Jenkinsパイプライン取得コミットログ
2604 ワード
前に書く
以前Jenkins pipelineを使用していたときにログが取れないことに気づき、multiple scmsプラグインを使用してログ変数を取得する方法が失効しました.
しかし、パイプラインPipeline Syntaxを見ると、checkoutにはログをコミットするオプションが含まれていることがわかりました.ここではログを取得する方法があります.これまで時間がかかっていたので、タスクが重くて、ログを取得できなかったときに、ログを取得する方法があります.
最近何かやってるんだけど、ついでにキーワードを思いついてやっとgoogleが届いた.
実装の原理
pipelineブロックの外部音名
Groovyコード
pipelineのstages/stage/scriptブロックでこのメソッドを呼び出すとログが得られ、最も簡単なdemoの概略を書くことができます.
CurrentBuild.changeSetsデータ構造擬似コード
また、ここで出力される部分はchangeSetsのすべてではありません.以下の
参考記事:
https://javadoc.jenkins.io/hudson/scm/ChangeLogSet.Entry.html#Entry--
https://support.cloudbees.com/hc/en-us/articles/217630098-How-to-access-Changelogs-in-a-Pipeline-Job-
https://issues.jenkins-ci.org/browse/JENKINS-30412?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel
以前Jenkins pipelineを使用していたときにログが取れないことに気づき、multiple scmsプラグインを使用してログ変数を取得する方法が失効しました.
しかし、パイプラインPipeline Syntaxを見ると、checkoutにはログをコミットするオプションが含まれていることがわかりました.ここではログを取得する方法があります.これまで時間がかかっていたので、タスクが重くて、ログを取得できなかったときに、ログを取得する方法があります.
最近何かやってるんだけど、ついでにキーワードを思いついてやっとgoogleが届いた.
実装の原理
pipelineブロックの外部音名
@NonCPS
を用いて修飾する方法で、構築時変数currentBuild.changeSets
からログオブジェクトを取得し、オブジェクトを遍歴して更新ログを取得するGroovyコード
pipelineのstages/stage/scriptブロックでこのメソッドを呼び出すとログが得られ、最も簡単なdemoの概略を書くことができます.
#!groovy
// Declarative //
pipeline {
agent any
stages {
stage(' ') {
steps {
// , pipeline syntax checkout
}
}
stage(' ') {
steps {
script{
//
def changeString = getChangeString()
echo "$changeString"
}
}
}
}
}
@NonCPS
def getChangeString() {
MAX_MSG_LEN = 100
def changeString = ""
echo "Gathering SCM changes"
def changeLogSets = currentBuild.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]
truncated_msg = entry.msg.take(MAX_MSG_LEN)
changeString += " - ${truncated_msg} [${entry.author}]
"
}
}
if (!changeString) {
changeString = " - No new changes"
}
return changeString
}
CurrentBuild.changeSetsデータ構造擬似コード
また、ここで出力される部分はchangeSetsのすべてではありません.以下の
はいくつかを参考にしています.また、APIドキュメントを調べていくつか書いています.差は多くありません.足りない場合はapiを参考にして構造を推測してください.happy:currentBuild.changeSets{
items[{
msg //
commitId // hash
author{ //
id
fullName
}
timestamp
affectedFiles[{ //
editType{
name
}
path: "path"
}]
affectedPaths[// , Collection
"path-a","path-b"
]
}]
}
参考記事:
https://javadoc.jenkins.io/hudson/scm/ChangeLogSet.Entry.html#Entry--
https://support.cloudbees.com/hc/en-us/articles/217630098-How-to-access-Changelogs-in-a-Pipeline-Job-
https://issues.jenkins-ci.org/browse/JENKINS-30412?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel