首页 > 解决方案 > docker内部的Jenkins管道使用最新的上游图像

问题描述

我们有一个带有声明性管道的 Jenkinsfile,它使用 Docker 容器在构建节点上运行。

pipeline {
    agent {
        docker {
            registryCredentialsId   'foobar-registry'
            registryUrl             'https://foobar.com/'
            image                   'bar:latest'
            label                   'foobar && docker'
            reuseNode               false
            args                    ''
        }
    }
    stages {
        stage('Steps run inside docker here ...') {
            steps {
                sh "python3 -m pycodestyle ."
            }
        }
    }
}

除了构建节点 docker 实例正在缓存bar:latest图像并且在存在更新时不从上游注册表中提取最新的事实之外,此方法有效。如果我们更新存储库中的 Docker 映像,我们必须手动破坏构建节点 docker 缓存,这很痛苦。

我们可以手动将版本添加到 Jenkinsfile 中引用的镜像构建中,并在每次修改 Docker 镜像时更新版本,但是对于我们的开发分支,我们非常希望这条管道仅拉取存储库中的最新镜像(理想情况下使用缓存如果没有检测到变化)。

这不是一个不常见的需要,但很难找到 docker 插件的文档(特别是对于声明性工作),所以任何帮助表示赞赏。

标签: dockerjenkins

解决方案


在源代码中翻找之后,修复是:

pipeline {
    agent {
        docker {
            ...
            alwaysPull   true
            ...
        }
    }
}

这将使用本地 docker 缓存,并且仅在发生更改时才拉取新图像。


推荐阅读