Docker允许将--pull
标记传递给docker build
,例如docker build --pull -t myimage .
。如何在我的Jenkinsfile
中使用管道脚本强制提取基本图像?这样我想确保构建始终使用最新的容器映像,尽管本地可用的版本。
node('docker') {
def app
stage('Checkout') {
checkout scm
}
stage('Build image') {
docker.withRegistry('https://myregistry.company.com', 'dcr-jenkins') {
app = docker.build "myimage"
}
}
stage('Publish image') {
docker.withRegistry('https://myregistry.company.com', 'dcr-jenkins') {
app.push("latest")
}
}
}
答案 0 :(得分:4)
最直接的答案是使用docker.build
stage('Build image') {
docker.withRegistry('https://myregistry.company.com', 'dcr-jenkins') {
app = docker.build("myimage", "--pull .")
}
}
如果您不提供它,那么它只是默认为.
,所以如果您传入任何内容,您还必须自己包含上下文。
您可以在“管道语法 - 全局变量参考”中找到它。只需将/pipeline-syntax/globals
添加到任何Jenkins网址的末尾(即http://localhost:8080/job/myjob/pipeline-syntax/globals)
答案 1 :(得分:2)
additionalBuildArgs完成这项工作。
示例:
pipeline {
agent {
label "docker"
}
stages {
[…]
stage('Build image') {
agent {
dockerfile {
reuseNode true
registryUrl "https://registry.comapny.com"
registryCredentialsId "dcr-jenkins"
additionalBuildArgs "--pull --build-arg APP_VERSION=${params.APP_VERSION}"
dir "installation/app"
}
}
steps {
script {
docker {
app = docker.build "company/app"
}
}
}
}
[…]
}
}
答案 2 :(得分:0)
docker rmi <image>
,docker build --pull
之前。执行docker build --pull
时,图像不会在本地存在,因此每次都会重新下载。