(更新如下)
我有一个声明性管道作业,可以接受参数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()
}
}
}
}
现在我想"注入"
这个变量我尝试用
更改上面的代码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
我需要添加&#34;环境&#34;步骤,以便能够在所有阶段获得$ VERSION(不仅仅是在它被操纵的阶段)。
我仍然需要找到一种方法在环境变量中注入这个$ VERSION变量,这样我的构建脚本就可以找到它。
答案 0 :(得分:1)
如果要在环境中注入变量以便以后可以使用它,可以定义另一个等于env.VERSION的变量或shell脚本的输出。然后在管道中使用该变量,例如:
pipeline {
parameters {
string(name: VERSION, defaultValue: '')
}
def version = env.VERSION
stages {
stage('Prepare') {
steps {
// ...
if (!version) {
version = sh(script: "git describe", returnStdout: true).trim()
}
}
}
mail subject: "$version build succeeded", ...
}
如果希望其他作业在构建运行后能够访问VERSION的值,则可以将其写入文件并将其存档。
编辑: 为了使您的脚本能够使用版本变量,您可以使脚本将版本作为参数,也可以使用withEnv step。
答案 1 :(得分:0)
假设您使用的是Parametrized pipelines,则应将变量称为${params.parameterName}
尽管参数在env中可用,但它们当前是在第一次运行管道之前创建的,因此您应该通过params访问它们:
在你的情况下:
${params.VERSION}