/**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不要修改*/