DevOps之docker自动化部署java应用

/**docker images|grep “none” |awk ‘{print $3}’|xargs docker rmi --force **/
java后端服务 build.gradle添加task脚本完成docker镜像的生成、上传镜像文件到harbor仓库等。
依赖的开发环境:jdk,gradle,harbor,docker-daemon,kubernetes(可选)
添加的各个task可以单独写成插件,见DevOps-docker-build插件开发
部署时序图
1、需要发布的部署单元根目录
添加Dockerfile文件,据此文件解析部署单元
检查build.gradle文件是否包含名为pushImage的task

2、项目根目录settings.gradle添加以下内容,各个部署单元覆写该值

ext{
	//优先级低,各模块docker-build时会覆写该参数
	dockerTag = "dev"
	dockerGroup = "devops"//与harbor控制台【项目】对应。
}

3、部署单元build.gradle文件添加以下内容,pushImage名称不能修改,代码中有调用这个task:

buildscript {
	dependencies {
	    //新增以下行....
		classpath "com.bmuschko:gradle-docker-plugin:3.2.1"
	}
}
//新增以下行....
apply plugin: 'com.bmuschko.docker-java-application'
dependencies {
    //新增以下行....
    compile group: 'org.gradle', name: 'gradle-tooling-api', version: '4.3'
}
//追加以下内容,docker构建相关task:
task cleanDocker(type: Delete) {
	delete fileTree("${buildDir}/docker") {
		include '**/*'
	}
}
task copyDockerJar(type: Copy, dependsOn: build) {
	group = "docker"
	dependsOn cleanDocker
	from "Dockerfile",jar.archivePath.path
	into "${project.buildDir}/docker"
	rename {
		String fileName -> fileName.replace("-${project.version}", "")
	}
}
docker{
	registryCredentials {
		url = 'http://{docker-damon-ip}:5678'
		username = 'harbor-user'
		password = 'harbor-user-passwd'
	}
}
import com.bmuschko.gradle.docker.tasks.image.*
task buildImage(type: DockerBuildImage,dependsOn: copyDockerJar) {
	def destFile = file("Dockerfile")
	group = "docker"
	//inputDir = destFile.parentFile
	inputDir = file("${project.buildDir}/docker")
	tags = [
			"harbor.anji-allways.com/${dockerGroup}/${project.name}:${dockerTag}".toString()
	]
}
task tagImage(type: DockerTagImage,dependsOn: buildImage){
	imageId = ''
	repository = "harbor.anji-allways.com/${dockerGroup}/${project.name}"
	tag = "${dockerTag}"
	doFirst{
		imageId = buildImage.getImageId()
	}
}
task pushImage(type: DockerPushImage,dependsOn: tagImage){
	imageName = tagImage.repository
	tag =  tagImage.tag
	doLast{
        delete fileTree("${buildDir}/docker") {
            include '**/*'
        }
    }
}

手工执行docker任务,测试:

/*gradle ops-api-feign:pushImage -xTest -PdockerTag=dev1.0.3 -PdockerGroup=devops*/
/*执行 gradle [subproject]:pushImage -xTest 打包上传镜像,dockerTag,dockerGroup不要修改*/
原文地址:https://www.cnblogs.com/coding-now/p/14660604.html