首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jenkins声明管道中的参数化码头图像

jenkins声明管道中的参数化码头图像
EN

Stack Overflow用户
提问于 2018-11-28 13:31:12
回答 2查看 2.4K关注 0票数 0

我希望在一个容器中运行我的构建,该容器的映像由源代码管理下的文件确定,因此类似于

代码语言:javascript
复制
environment {
   my_image = ...
}
agent {
    docker { 
        image my_image
    }
}

但詹金斯抱怨说

代码语言:javascript
复制
groovy.lang.MissingPropertyException: No such property: my_image for class: groovy.lang.Binding

有没有办法让Jenkins使用一个变量作为码头图像规范?

供参考的完整管道:

代码语言:javascript
复制
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'
            }
        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-28 15:24:47

结果发现的问题是,在有机会运行image env.whatever之前就对其进行了评估。

我通过使用脚本版本的docker插件来解决这个问题:

代码语言:javascript
复制
            script {
                docker.image(env.IMAGE).inside {
                    sh './build'
                }
            }

现在,env.IMAGE是在计算之后计算出来的,插件不会被未初始化的参数搞混。

票数 3
EN

Stack Overflow用户

发布于 2018-11-28 14:03:48

你只需:

代码语言:javascript
复制
environment {
   my_image = ...
}
agent {
    docker { 
        image env.my_image
    }
}

您可以在shell步骤中单独使用my_image。

代码语言:javascript
复制
sh 'echo ${my_image}'

但是在管道步骤中,您需要从env中取消对它的引用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53520622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档