我试图从一个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"工作,"管道脚本"。
答案 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()
}