誰かがJenkins Pipelineスクリプトを持っていて、以前の成功したビルド以降のすべての変更を変数に埋め込むことができますか?私はgitとマルチブランチパイプラインの仕事を使用しています。jenkinsパイプラインで最後に成功したビルド以降の変更を取得するには?
答えて
私は何か一緒に何かをcobbleすることができました。私は、あなたがより良い配列を反復処理することができますかなり確信しているが、ここで私は今のところ持っているものです:私は、宣言パイプラインで使用するために以下のスクリプトを思い付いたCaptRespectからの回答をもとに
node('Android') {
passedBuilds = []
lastSuccessfulBuild(passedBuilds, currentBuild);
def changeLog = getChangeLog(passedBuilds)
echo "changeLog ${changeLog}"
}
def lastSuccessfulBuild(passedBuilds, build) {
if ((build != null) && (build.result != 'SUCCESS')) {
passedBuilds.add(build)
lastSuccessfulBuild(passedBuilds, build.getPreviousBuild())
}
}
@NonCPS
def getChangeLog(passedBuilds) {
def log = ""
for (int x = 0; x < passedBuilds.size(); x++) {
def currentBuild = passedBuilds[x];
def changeLogSets = currentBuild.rawBuild.changeSets
for (int i = 0; i < changeLogSets.size(); i++) {
def entries = changeLogSets[i].items
for (int j = 0; j < entries.length; j++) {
def entry = entries[j]
log += "* ${entry.msg} by ${entry.author} \n"
}
}
}
return log;
}
:
def changes = "Changes:\n"
build = currentBuild
while(build != null && build.result != 'SUCCESS') {
changes += "In ${build.id}:\n"
for (changeLog in build.changeSets) {
for(entry in changeLog.items) {
for(file in entry.affectedFiles) {
changes += "* ${file.path}\n"
}
}
}
build = build.previousBuild
}
echo changes
これは、特定のファイルが変更されたときにのみステージを実行するのに非常に役立ちます。私はまだその部分に慣れていませんが、私はこれから共有ライブラリを作成し、チェックするためにいくつかのグロビングパターンを渡すことができるようにしたいと思います。
EDIT:Check the docs btw、少し深く掘り下げたい場合に備えて。 object.getSomeProperty()
のすべてのコールをちょうどentry.someProperty
に変換できるはずです。
ニース。 contrubuteに気を付けると、いくつかのパイプラインの例があるgithub repoがあります:https://github.com/jenkinsci/pipeline-examples – CaptRespect
これは宣言的なパイプラインスタイルではなく、スクリプトによるパイプラインです! – Lincoln
@ Lincoln、yup。あなたは宣言的にそれをすることはできません。あなたがしなければならないことは、それをスクリプトブロックにラップするか、共有ライブラリから使用することです。 – andsens
- 1. VSTSビルドRestAPI最後に成功または部分的に成功したビルドのチェンジセットを取得する
- 2. Jenkinsは最後に変更されたリビジョンをビルドします
- 3. Jenkinsパイプラインの成功ステータスですぐにビルドを中止します
- 4. Jenkins - 最後のビルド変更をテキストファイルに保存します
- 5. 成功したビルドでJenkinsビルド名を設定する
- 6. TSQL - 最後に成功した日付を取得
- 7. Jenkinsのビルドが成功したときにjarをgithubにプッシュ
- 8. ビルドが成功した後、Jenkinsのダウンストリームジョブを条件ベースでトリガーする方法
- 9. Jenkins - 最後に完成したビルドステータスを取得
- 10. Jenkins Sonarプラグインでビルドが成功した後、Sonarがコードカバレッジを表示しない
- 11. Jenkins:ビルド成功後のパラメータを増やす
- 12. 最後に成功したビルド以来、Groovyを使用してJenkinsに情報をコミットする方法はありますか?
- 13. 最後のログイン以降に作成されたDjangoレコードをすべて取得します
- 14. 最後に成功してからコミットしない場合、Jenkinsはビルドを停止します。
- 15. Jenkinsパイプラインでのビルド後のアクションとしてのアーティファクト
- 16. Teamcity REST APIはブランチ上で最新の成功ビルドを取得します
- 17. jenkinsビルドでログ作成者を取得
- 18. Jenkins + Gradle + Artifactoryプラグイン(成功したビルドとデプロイメント - 失敗した最終結果)
- 19. Jenkinsでビルドをトリガーする方法Bambooで他のビルドを成功させた後、
- 20. 別のビルドが成功した場合にのみJenkinsビルドを実行するには?
- 21. 成功ビルド後に別のブランチにオートメーション
- 22. Jenkins、Perforce、Antを使用して、最後のグリーンビルド以降に変更されたファイルに対してのみPMDを実行できますか?
- 23. backbone.js:最後のサーバー保存以降に変更がありますか?
- 24. ビルド成功後のジェンキンエラー
- 25. PHPで最後に変更されたファイルを取得するには?
- 26. リモートでビルドをトリガーした後にJenkinsからの応答を取得するには
- 27. Jenkinsパイプライン - 最後のステージでのみマージする並列ステージ
- 28. 成功したすべてのビルドでJenkinsがgitタグを作成しないようにする
- 29. jenkinsを構成する方法パイプラインをビルドして手動で起動する
- 30. Jenkinsワークフロー(パイプライン)ビルドのビルド番号を設定する
[タグ:jenkins-pipeline]では動作しません。 – StephenKing
ええ、それをチェックしましたが、JenkinsFileからアクセスする方法を理解できませんでした。 – CaptRespect