web-dev-qa-db-ja.com

Jenkinsfileからパイプライン名と説明を設定する

私はジェンキンスのパイプラインをコードとして実行しようとしています。 Github組織フォルダープラグインを使用してGithub組織をスキャンし、ブランチごとにジョブを作成しています。 Jenkinsfileから取得するパイプラインジョブの名前を明示的に定義する方法はありますか?また、ジョブの説明をいくつか追加したいと思います。

13
HarshaB

以下のようにcurrentBuildを使用する必要があります。 node部分は重要です

node {
    currentBuild.displayName = "$yournamevariable-$another"
    currentBuild.description = "$yourdescriptionvariable-$another"
}

編集:上記の1つはビルドの名前を変更しますが、元の質問はジョブの名前変更に関するものです。パイプラインの次のスクリプトはそれを行います(これには適切な権限が必要です)

item = Jenkins.instance.getItemByFullName("originalJobName")
item.setDescription("This description was changed by script")
item.save()
item.renameTo("newJobName")
16
Jayan

私はこのパーティーに遅刻しましたが、この質問により、今日のほとんどの時間を費やした#jenkinsチャットに追い込まれました。私の状況に合わせてこれを上手に解決する手助けをしてくれたチャットの@ tang ^に感謝したいと思います。

マルチブランチDECLARATIVEパイプラインで子のJOB記述とJOB表示名を設定するには、ステージで次のステップブロックを使用します。

steps {
    script {
        if(currentBuild.rawBuild.project.displayName != 'jobName') {
            currentBuild.rawBuild.project.description = 'NEW JOB DESCRIPTION'
            currentBuild.rawBuild.project.setDisplayName('NEW JOB DISPLAY NAME')
        }
        else {
            echo 'Name change not required'
        }
    }
}

これには、Jenkinsサンドボックス承認メソッドを使用して個々のスクリプト呼び出しを承認する必要がありますが、親パイプラインの実際の子の名前を変更することについてWebで見つけた他のどの方法よりもはるかに簡単でした。最後に注意することは、環境変数を使用して設定されているジョブ項目を操作できるJenkinsfileでこれが機能することです。

4
Joshua

JenkinsfileでJenkinsパイプラインを説明するために、受け入れられた回答のコードスニペットを使用しようとしました。コードスニペットを@NonCPSアノテーションで関数にラップし、アイテム変数にdefを使用する必要がありました。ノードセクションではなく、Jenkinsfileのルートにコードスニペットを配置しました。

@NonCPS 
def setDescription() { 
    def item = Jenkins.instance.getItemByFullName(env.JOB_NAME) 
    item.setDescription("Some description.") 
    item.save()
}

setDescription()
2