詹金斯:如何在代理docker args中使用变量?

时间:2018-12-21 09:47:51

标签: jenkins jenkins-pipeline

除了主要的詹金斯变量(例如JENKINS_URL)之外,詹金斯不想在代理docker args部分中使用任何变量。

集装箱式詹金斯2.152。尝试使用来自变量的自定义args启动docker代理。尝试使用Groove var,envir.var等环境变量,$ {Var}等环境变量。它们全都用作名称,而不是其值。

Jenkinsfile

Gpath = "/var/log:/opt/gpath"
pipeline {
agent {
    docker {
        image "bash:latest"
        args '--network proxy_nw -v Gpath -v ${Ppath} -v env.Ppath2 -v /var/log:/${NODE_LABELS}'
    }
}
environment {
    Ppath = "/var/log:/opt/ppath"
    Ppath2 = "/var/log:/opt/ppath2"
}
    stages {
        stage ('main') {
            steps {
               script {
                sh 'echo "Ppath= " ${Ppath} "; Ppath2= " ${Ppath2} "; NODE_LABELS= " ${NODE_LABELS}'
                sh 'printenv'
                input message: "wait"
            }
        }
    }
}

}

Jenkins控制台输出

docker run -t -d -u 1000:1000 --network proxy_nw -v Gpath -v ${Ppath} -v env.Ppath2 -v /var/log:/${NODE_LABELS}

如您所见,我在args部分中使用了几个变量。 好的,由于单引号,Groovy var看起来像名字一样是合理的。我们可以在Jenkins控制台输出中看到它。 但是环境变量也不起作用。它们是实际在建筑物容器中的,而不是在詹金斯级别。 所以。如何为代理docker指令的args部分定义变量?

1 个答案:

答案 0 :(得分:0)

我找到了解决方法。

我添加到了最高级别agent none,并且仅通过容器声明将所有阶段都置于阶段中。是的,因为我们可以将stages放在stage

pipeline {
    agent none
    environment {
    WORKDIR = getVar(G_workdir)
    DIRDOUBLE = getVar(G_dirdouble)
    }
    stages {
        stage('build container up') {
            agent {
                docker {
                    image G_container
                    args '--network proxy_nw -v ${DIRDOUBLE}'
                }
            }
            stages {
                stage('Initialise') {
                        steps {
            ........