jenkins 声明管道中的参数化 docker 图像
Parametrized docker image in jenkins declarative pipeline
我想 运行 我在一个容器中构建我的图像由源代码管理下的文件确定,所以像
environment {
my_image = ...
}
agent {
docker {
image my_image
}
}
但詹金斯抱怨
groovy.lang.MissingPropertyException: No such property: my_image for class: groovy.lang.Binding
有没有办法让 Jenkins 为 docker 图像规范使用变量?
完整管道供参考:
pipeline {
agent any
environment {
REPO = 'unknown'
}
stages {
stage('toolchain') {
steps {
git 'https://github.com/avikivity/jenkins-docker-test'
script {
REPO = readFile 'repo'
}
echo "repo = ${REPO}"
}
}
stage('build') {
agent {
docker {
image REPO
//image 'docker.io/scylladb/scylla-build-dependencies-docker:fedora-29'
label 'packager'
}
}
steps {
git 'https://github.com/avikivity/jenkins-docker-test'
sh './build'
}
}
}
}
您只需要:
environment {
my_image = ...
}
agent {
docker {
image env.my_image
}
}
您可以在 shell 步骤中单独使用 my_image
sh 'echo ${my_image}'
但在管道步骤中,您需要从 env
中取消引用它
问题原来是 image env.whatever
在任何东西有机会 运行 之前就被评估了。
我通过使用 docker 插件的脚本版本解决了这个问题:
script {
docker.image(env.IMAGE).inside {
sh './build'
}
}
现在,env.IMAGE 在计算后进行求值,插件不会被未初始化的参数混淆。
我想 运行 我在一个容器中构建我的图像由源代码管理下的文件确定,所以像
environment {
my_image = ...
}
agent {
docker {
image my_image
}
}
但詹金斯抱怨
groovy.lang.MissingPropertyException: No such property: my_image for class: groovy.lang.Binding
有没有办法让 Jenkins 为 docker 图像规范使用变量?
完整管道供参考:
pipeline {
agent any
environment {
REPO = 'unknown'
}
stages {
stage('toolchain') {
steps {
git 'https://github.com/avikivity/jenkins-docker-test'
script {
REPO = readFile 'repo'
}
echo "repo = ${REPO}"
}
}
stage('build') {
agent {
docker {
image REPO
//image 'docker.io/scylladb/scylla-build-dependencies-docker:fedora-29'
label 'packager'
}
}
steps {
git 'https://github.com/avikivity/jenkins-docker-test'
sh './build'
}
}
}
}
您只需要:
environment {
my_image = ...
}
agent {
docker {
image env.my_image
}
}
您可以在 shell 步骤中单独使用 my_image
sh 'echo ${my_image}'
但在管道步骤中,您需要从 env
中取消引用它问题原来是 image env.whatever
在任何东西有机会 运行 之前就被评估了。
我通过使用 docker 插件的脚本版本解决了这个问题:
script {
docker.image(env.IMAGE).inside {
sh './build'
}
}
现在,env.IMAGE 在计算后进行求值,插件不会被未初始化的参数混淆。