保存 Dockerfile 镜像用于下次集成
背景介绍
持续集成使用 Dockerfile
作为构建环境很方便,但每次都要先进行 docker build
,很慢。
解决方案:把构建的 Docker 镜像保存到仓库,下次直接拉取。
Jenkinsfile
// 创建 CODING Docker 制品库,获取用户名、密码和仓库地址
sh "docker login -u $DOCKER_USER -p $DOCKER_PASSWORD my-team-docker.pkg.coding.net"
// 使用 Dockerfile 的 md5 做 tag
md5 = sh(script: "md5sum Dockerfile | awk '{print \$1}'", returnStdout: true).trim()
imageFullName = "my-team-docker.pkg.coding.net/my-project/my-repo/my-app:dev-${md5}"
// 检查镜像是否已存在远端仓库
dockerNotExists = sh(script: "docker manifest inspect $imageFullName > /dev/null", returnStatus: true)
def testImage = null
if (dockerNotExists) {
testImage = docker.build("$imageFullName", "--build-arg APP_ENV=testing ./")
sh "docker push $imageFullName"
} else {
testImage = docker.image(imageFullName)
}
// 使用镜像进行自动化测试
testImage.inside("-e 'APP_ENV=testing'") {
stage('test') {
echo 'testing...'
sh 'ls'
echo 'test done.'
}
}
代码解释:在 shell 中执行下列命令,通过返回值可以判断「镜像是否已存在」。
$ docker manifest inspect ecoding/foo:bar
no such manifest
$ echo $?
1
截图
可以看出:第 1 次构建很慢,因为需要生成镜像,而第 2 次很快。
参考资料
最近更新
感谢反馈有用
感谢反馈没用
在阅读中是否遇到以下问题?
您希望我们如何改进?