web-dev-qa-db-ja.com

宣言的なジェンキンスパイプライン。変数を宣言してスクリプトまたはメール通知で使用する方法は?

(以下に更新)

引数VERSIONを受け取ることができる宣言的なパイプラインジョブがあります。

pipeline {
  parameters {
    string(name: VERSION, defaultValue: '')
  }

  // ...
}

Gitlabがこのジョブにフックを送信するときなど、バージョンが指定されていない場合、gitからそれを計算したいので、私はこのようなことをします

stages {
  stage('Prepare') {
    steps {
      // ...
      if (! env.VERSION) {
        VERSION = sh(script: "git describe", returnStdout: true).trim()
      }
    }
  }
}       

今、私はこの変数を「注入」したい

  • ビルドスクリプト。環境変数で「バージョン」を見つける必要があります
  • ジェンキンスのメール通知者に。そして、件名または本文で$ {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}
}

しかし、それは私の問題を解決しませんでした。

私はそれを解決するための助けを探しています。

[〜#〜] 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変数を環境変数に挿入する方法を見つける必要があります。

7
daks

後で使用できるように環境に変数を注入する場合は、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 を使用します。

2
Vasiliki Siakka

Parametrized pipelines を使用していると仮定すると、変数を${params.parameterName}として呼び出す必要があります

パラメータはenvで使用できますが、現在パイプラインが最初に実行される前に作成されるため、paramsを使用してアクセスする必要があります。

あなたの場合:

 ${params.VERSION}
0
user7294900