【问题标题】:Jenkins pipeline: update image before docker.image().inside()Jenkins 管道:在 docker.image().inside() 之前更新图像
【发布时间】:2017-12-14 12:55:44
【问题描述】:

我有一个 Jenkinsfile 中描述的 Jenkins 管道。

在构建步骤中,我启动了一个 docker 容器,所有构建步骤都在其中执行。像这样的:

docker.image('node:8').inside() { }

我注意到这不会获取最新的 docker 镜像,而是始终使用最初从 docker hub 拉取的镜像。如果node:8 图像仍然是最新的,我希望这将与 docker hub 一起检查,如果不是,则获取新图像。如果我的本地注册表没有缓存最新的图像,如何触发新的图像下载?

【问题讨论】:

    标签: docker jenkins jenkins-pipeline


    【解决方案1】:

    您可以随时拉取图像,这只会下载已更改的图像层:

    sh 'docker pull node:8'
    

    【讨论】:

    • 我现在基本上是这样做的,但是通过管道 api,类似于 docker.image('node:8').pull().
    • 我感到困惑的原因是 Jenkins 的 docker 变量引用提到,对于 inside 函数不需要拉动,这让我假设它也会拉动重复调用,但是似乎只有在系统上还没有图像时才会拉出图像。
    【解决方案2】:

    要在不退回到 shell 的情况下更新图像,您可以添加 docker.image("node:8").pull()

    【讨论】:

      【解决方案3】:

      您可以做的一种解决方法是在构建之前删除本地图像。

      docker rmi image_name
      

      在詹金斯的 bash shell 提示符下

      【讨论】:

      • 我不想这样做,因为这会使缓存的整个想法无效。我使用的镜像可能每隔几个月左右才更新一次,但我通常每天构建我的项目多次,并且我不想在每次构建期间下载新镜像。我需要一个仅在有新的上游版本可用时才下载新图像的解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-08
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多