我希望在一个容器中运行我的构建,该容器的映像由源代码管理下的文件确定,因此类似于
environment {
my_image = ...
}
agent {
docker {
image my_image
}
}但詹金斯抱怨说
groovy.lang.MissingPropertyException: No such property: my_image for class: groovy.lang.Binding有没有办法让Jenkins使用一个变量作为码头图像规范?
供参考的完整管道:
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'
}
}
}
}发布于 2018-11-28 15:24:47
结果发现的问题是,在有机会运行image env.whatever之前就对其进行了评估。
我通过使用脚本版本的docker插件来解决这个问题:
script {
docker.image(env.IMAGE).inside {
sh './build'
}
}现在,env.IMAGE是在计算之后计算出来的,插件不会被未初始化的参数搞混。
发布于 2018-11-28 14:03:48
你只需:
environment {
my_image = ...
}
agent {
docker {
image env.my_image
}
}您可以在shell步骤中单独使用my_image。
sh 'echo ${my_image}'但是在管道步骤中,您需要从env中取消对它的引用。
https://stackoverflow.com/questions/53520622
复制相似问题