(以下に更新)
引数VERSIONを受け取ることができる宣言的なパイプラインジョブがあります。
pipeline {
parameters {
string(name: VERSION, defaultValue: '')
}
// ...
}
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}
}
しかし、それは私の問題を解決しませんでした。
私はそれを解決するための助けを探しています。
[〜#〜] update [〜#〜]
私は今のように見える作業パイプラインを持っています
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: '[email protected]',
subject: "SUCCESS: ${VERSION}",
body: """<html><body><p>SUCCESS</p></body></html>""",
mimeType: 'text/html',
charset: 'UTF-8'
deleteDir()
}
}
} // pipeline
すべてのステージ(操作されるステージだけでなく)で$ VERSIONを取得できるようにするために、「環境」ステップを追加する必要がありました。
ビルドスクリプトが検出できるように、この$ VERSION変数を環境変数に挿入する方法を見つける必要があります。
後で使用できるように環境に変数を注入する場合は、env.VERSIONまたはシェルスクリプトの出力に等しい別の変数を定義できます。次に、パイプラインでその変数を使用します。例:
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 を使用します。
Parametrized pipelines を使用していると仮定すると、変数を${params.parameterName}
として呼び出す必要があります
パラメータはenvで使用できますが、現在パイプラインが最初に実行される前に作成されるため、paramsを使用してアクセスする必要があります。
あなたの場合:
${params.VERSION}