web-dev-qa-db-ja.com

Jenkinsパイプラインで動作するemail-extスクリプトテンプレートの取得

最近Jenkins 2.xに変換し、パイプラインフローを実験していますが、groovyスクリプトテンプレートで動作するemail-extプラグインを取得できないようです。私の標準フローはまだ正常に動作しますが、次のことを試みると、予期しないトークンSCRIPTでエラーが発生します

    emailext mimeType: 'text/html', replyTo: 'xxxx', subject: "${env.JOB_NAME} - Build# ${env.BUILD_NUMBER} - ${env.BUILD_STATUS}", to: 'xxxx', body: "${SCRIPT, template='regressionfailed.groovy'}"

私は早い段階でトークンの展開に問題があったことを知っていますが、最新のウィキのアップデートからは修正されているようです。トークンのトークン拡張もまだ得られません。これを再び機能させるための良いリファレンスはありますか?パイプラインフローに切り替えたいのですが、トークンを展開する電子メールテンプレートがワークフローのキーになる可能性があります。

18
naven87

宣言パイプラインでemailextを使用しても問題はありません。ただし、スクリプトはまだ完了していないため、「build.result」パラメーターに正しくアクセスできません。デフォルトのスクリプトgroovy-html.templateのように。

編集:実際に手動で設定した場合、build.resultにアクセスできます。

そのため、宣言型パイプラインの最後に次のようにステージを追加するのが最適です。

stage('Send email') {
    def mailRecipients = "[email protected]"
    def jobName = currentBuild.fullDisplayName

    emailext body: '''${SCRIPT, template="groovy-html.template"}''',
        mimeType: 'text/html',
        subject: "[Jenkins] ${jobName}",
        to: "${mailRecipients}",
        replyTo: "${mailRecipients}",
        recipientProviders: [[$class: 'CulpritsRecipientProvider']]
}

また、独自のスクリプトを使用している場合、「groovy-html.template」または「groovy-text.template」という名前を付けることはできないことに注意してください。これらはemailextのデフォルトであるため、ファイルにアクセスできません。 「スクリプトコンテンツ」 こちら をご覧ください。

21
user3360767

今日同じ問題に直面し、emailextがトリックを実行する前にボディが定義されているようです。

def emailBody = '${SCRIPT, template="regressionfailed.groovy"}'
def emailSubject = "${env.JOB_NAME} - Build# ${env.BUILD_NUMBER} - ${env.BUILD_STATUS}"
emailext(mimeType: 'text/html', replyTo: 'xxxx', subject: emailSubject, to: 'xxxx', body: emailBody)

テンプレートの一部をやり直す必要があるかもしれないことを覚えておいてください。

5
Martin

どうやら誰もがそれを知っています。パイプラインを定義するには2つの方法があります:宣言的パイプライン(「パイプライン」で始まる)およびスクリプト化されたパイプライン(「ノード」で始まる)

宣言的パイプラインを使用して、プロシージャを実行するスクリプトを指定する必要があります。つまり、defを使用して変数を定義する必要があります。パイプラインの場合:

stage('Email') {
    steps {
        script {
            def mailRecipients = '[email protected]'
            def jobName = currentBuild.fullDisplayName
            emailext body: '''${SCRIPT, template="groovy-html.template"}''',
            mimeType: 'text/html',
            subject: "[Jenkins] ${jobName}",
            to: "${mailRecipients}",
            replyTo: "${mailRecipients}",
            recipientProviders: [[$class: 'CulpritsRecipientProvider']]
        }
    }
}

私はこれにいくらか時間を費やしました、それが他の誰かに役立つことを願っています。

4