我想在容器中运行构建,该容器的图像由源代码控制下的文件确定,所以类似
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'
}
}
}
}
答案 0 :(得分:1)
原来的问题是image env.whatever
在没有任何机会运行之前已经过评估。
我通过使用docker插件的脚本版本来解决此问题:
script {
docker.image(env.IMAGE).inside {
sh './build'
}
}
现在,env.IMAGE在计算后便会求值,并且插件不会因未初始化的参数而困惑。
答案 1 :(得分:0)
您只需要:
environment {
my_image = ...
}
agent {
docker {
image env.my_image
}
}
您可以在shell步骤中单独使用my_image
sh 'echo ${my_image}'
但是在管道步骤中,您需要从env取消引用