【发布时间】:2018-10-31 04:52:15
【问题描述】:
(下方更新)
我有一个可以接受参数 VERSION 的声明性管道作业。
pipeline {
parameters {
string(name: VERSION, defaultValue: '')
}
// ...
}
如果没有给出 VERSION,比如当 Gitlab 向这个工作发送一个钩子时,我想从 git 计算它,所以我做这样的事情
stages {
stage('Prepare') {
steps {
// ...
if (! env.VERSION) {
VERSION = sh(script: "git describe", returnStdout: true).trim()
}
}
}
}
现在我想将这个变量“注入”到
- 我的构建脚本。它需要在环境变量中找到“VERSION”
- 致詹金斯邮件通知者。并让它在主题或正文中检索 ${VERSION}
我尝试用
更改上面的代码stages {
stage('Prepare') {
steps {
// ...
if (! env.VERSION) {
env.VERSION = sh(script: "git describe", returnStdout: true).trim()
}
}
}
}
收到此错误groovy.lang.MissingPropertyException: No such property: VERSION for class: groovy.lang.Binding
然后我尝试在下面添加一个“环境”步骤
environment {
VERSION = ${VERSION}
}
但这并没有解决我的问题。
我正在寻求任何帮助来解决它。
更新
我现在有一个看起来像这样的工作管道
pipeline {
agent any
parameters {
string(name: 'VERSION', defaultValue: '')
}
environment {
def VERSION = "${params.VERSION}"
}
stages {
stage('Prepare & Checkout') {
steps {
script {
if (! env.VERSION) {
VERSION = sh(script: "date", returnStdout: true).trim()
}
echo "** version: ${VERSION} **"
}
}
}
stage('Build') {
steps {
// sh "./build.sh"
echo "** version2: ${VERSION} **"
}
}
} // stages
post {
always {
mail to: 'foo@example.com',
subject: "SUCCESS: ${VERSION}",
body: """<html><body><p>SUCCESS</p></body></html>""",
mimeType: 'text/html',
charset: 'UTF-8'
deleteDir()
}
}
} // pipeline
我需要添加“环境”步骤,以便能够在所有阶段获得 $VERSION(不仅仅是在它被操纵的阶段)。
我还需要想办法把这个$VERSION变量注入到环境变量中,这样我的构建脚本才能找到它。
【问题讨论】:
标签: jenkins environment-variables jenkins-pipeline