docker 容器保存为镜像_Jenkins 保存 Docker 镜像实现极速构建

2bdcfe88198624742e395707bd416a5a.png

上一篇文章《如何在Jenkins中跑多个Docker(MySQL、Redis等)?》讲解了用 Dockerfile 跑 Jenkins,解决了“CircleCI 的 Dockerfile 和 config.yml 重复,违反 DRY”的问题。

但也面临一个新问题:

  • Jenkins 每次跑测试都要先进行 docker build,很慢。

解决办法很简单:把 Jenkins 构建的 Docker 镜像存起来,下次直接拉取。

检查 Docker image 是否存在远端镜像服务器

$ DOCKER_CLI_EXPERIMENTAL=enabled docker manifest inspect sinkcup/foo:bar
no such manifest: docker.io/sinkcup/foo:bar
$ echo $?
1

把 Jenkins 构建的 Docker 镜像存起来

sh "docker login -u $DOCKER_USER -p $DOCKER_PASSWORD $DOCKER_SERVER"
md5 = sh(script: "md5sum Dockerfile | awk '{print $1}'", returnStdout: true).trim()
imageAndTag = "${DOCKER_SERVER}${DOCKER_PATH_PREFIX}laravel-demo:dev-${md5}"
dockerNotExists = sh(script: "DOCKER_CLI_EXPERIMENTAL=enabled docker manifest inspect $imageAndTag > /dev/null", returnStatus: true)
def testImage = null
if (dockerNotExists) {
    testImage = docker.build("$imageAndTag", "--build-arg APP_ENV=testing ./")
    sh "docker push $imageAndTag"
} else {
    testImage = docker.image(imageAndTag)
}
testImage.inside("-e 'APP_ENV=testing'") {
    stage('prepare') {
        echo 'preparing...'
        sh 'composer install'
        echo 'prepare done.'
    }
    stage('test') {
        echo 'testing...
        sh './lint.sh'
        sh './phpunit.sh'
        junit 'junit.xml'
        echo 'test done.'
    }
}

完整代码请看:GitHub、CODING

当然需要先获得 Docker 镜像仓库的密码,有这些服务商:

  • 国外的 hub.docker.com:1个免费私有额度,7美元/月含5个私有额度,建议搭配国外的持续集成使用;
  • 国内的 coding.net - 制品库:免费,搭配 CODING CI(Jenkins 云服务) 使用;
  • 国内的 腾讯云 - 镜像仓库:免费;
  • 国内的 阿里云-容器镜像服务:免费;

a821d136e07fb718e373575ad6b1464b.png
docker hub 价格

经过试验,同一个项目在不同平台的持续集成速度如下:

  • Jenkins 第一次运行:7分钟
  • Jenkins 第二次运行:1分钟24秒
  • CircleCI:2分钟-4分47秒

0b4d28415feccede01a4fc60928bef57.png
CODING CI(Jenkins 云服务)

79383ab880e49a3fad0825340ebd2845.png
CircleCI
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值