(обновление ниже)
У меня есть декларативное конвейерное задание, которое может принимать аргумент 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()
}
}
}
}
Теперь я хочу «внедрить» эту переменную в
- myСценарий сборки.Он должен найти «VERSION» в переменных окружения
- для почтового уведомителя jenkins.И заставить его получить $ {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
Мне нужно было добавить шаг "environment", чтобы иметь возможность получить $ VERSION ввсе стадии (не только в той, которой манипулируют).
Мне все еще нужно найти способ вставить эту переменную $ VERSION в переменные окружения, чтобы мой сценарий сборки мог ее найти.