jenkins声明式管道中的参数化docker映像

时间:2018-11-28 13:31:13

标签: jenkins jenkins-pipeline jenkins-docker

我想在容器中运行构建,该容器的图像由源代码控制下的文件确定,所以类似

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' } } } }

2 个答案:

答案 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取消引用