jenkinsfile变量范围

时间:2018-03-02 11:38:20

标签: jenkins groovy jenkins-pipeline

我试图从一个Jenkins服务器调用远程作业到另一个服务器,我通过shell脚本正常工作。但是,尝试将其转换为Jenkins文件会导致我遇到问题。环境变量总是" null"当在舞台内部使用时,甚至认为this文章说它应该是全球可用的?

pipeline {
agent any
/* get crumb for CSRF */
environment {
        def crumb = sh 'curl https://jenkins-remote/crumbIssuer/'
}

stages {
/* call remote job */
    stage("remote") {
        steps {
            sh "curl -X POST -H ${env.crumb} https://jenkins-remote/buildWithParameters?foo"
        }
    }
}
}

修剪后的输出如下:

[remote_pipeline] Running shell script
+ curl -X POST -H null

我正在使用Jenkins v2.89.4,new" Pipeline"工作,"管道脚本"。

3 个答案:

答案 0 :(得分:0)

根据官方文档,这是您定义环境变量的方式。

pipeline {
    agent any

    environment {
        DISABLE_AUTH = 'true'
        DB_ENGINE    = 'sqlite'
    }
    stages {
        stage('Build') {
            steps {
                echo "${env.DB_ENGINE}" # to access
            }
        }
    }
}

但你编码错了,

environment {
    def crumb = sh 'curl https://jenkins-remote/crumbIssuer/'
}

所以请完成其余的工作。

答案 1 :(得分:0)

感谢@TrafLaf指出变量为null,因为它没有设置为curl命令的输出。我的hacky解决方案是:

environment {
    def crumbRequest = sh 'curl https://jenkins-remote/crumbIssuer/ > crumbHeader'
    crumbHeader = readFile('crumbHeader').trim()
}

答案 2 :(得分:0)

sh任务现在可以返回输出,所以理论上下面应该有效(未经测试):

environment {
    crumb = sh(script: 'curl https://jenkins-remote/crumbIssuer/',
        returnStdout: true).trim()
}