我有一個很長的構建步驟(它需要幾個小時)和一個Jenkinsfile觸發它。 (構建步驟由多個Makefile目標等組成)如何更好地使用Jenkinsfile可視化大型構建步驟的工作?
由於構建步驟完成生成工件所需的所有工作,因此Jenkins管道可視化非常無用。
有沒有辦法讓我更好地將構建步驟的內部可視化,而無需將其移植到/複製到Jenkinsfile?
我有一個很長的構建步驟(它需要幾個小時)和一個Jenkinsfile觸發它。 (構建步驟由多個Makefile目標等組成)如何更好地使用Jenkinsfile可視化大型構建步驟的工作?
由於構建步驟完成生成工件所需的所有工作,因此Jenkins管道可視化非常無用。
有沒有辦法讓我更好地將構建步驟的內部可視化,而無需將其移植到/複製到Jenkinsfile?
不是真的:有一個similar issue for long-running stages。
關於步驟,有JENKINS 33185(「可視化流水線級內並行步驟」)仍然打開
但對於一個單一的長時間運行的一步,你已經是殼輸出,這是不是當有幫助一個命令需要很長時間才能完成。
您可以遠離單個目標任務來構建所有內容(make
或make all
),而是專門針對Jenkins文件中的不同構建任務。例如,假設您正在爲不同平臺構建應用程序。您原來Jenkinsfile可能是......
node('builder') {
stage('build') {
sh "make"
}
}
這是觸發了「所有」的目標在你的makefile,這可能觸發的任務「的iOS」,「機器人」和「WindowsPhone的」
相反,讓你的Jenkinsfile單獨執行這些任務中的每一個。
例:
node('builder') {
stage('build iOS') {
sh "make iOS"
}
stage('build android') {
sh "make android"
}
stage('build windows phone') {
sh "make windowsphone"
}
}
通過你的目標任務拆分成這些多階段,你最好在你的詹金斯UI報告。
如果你想成爲真正的勇敢,你能避免創建一個腳本拆開什麼all
在做,把它變成詹金斯階段在兩個地方(在all
目標,以及Jenkinsfile)硬編碼此。假設你all
或默認的任務僅僅是一個的其他任務列表,你可以使用以下的bash:
if [[ -z $(make -rpn | grep ".DEFAULT_GOAL") ]]; then
DEFAULTTARGET=all
else
DEFAULTTARGET=$(make -rpn | grep ".DEFAULT_GOAL" | sed "s/.*=[[:space:]]*//" | tr -d "[:space:]")
fi
make -rpn | sed -n -e "/^$/ { n ; /^[^ ]*:/p ; }" | grep "$DEFAULTTARGET:" | sed "s/.*:[[:space:]]*//" | tr " " "\n"
在Jenkinsfile像這樣:
node() {
## NOT NORMALLY REQUIRED. Just sets up a simple makefile
sh "echo 'all: images release clean report' > Makefile "
## Start of required logic
def makeTasks = sh(script: 'if [[ -z $(make -rpn | grep ".DEFAULT_GOAL") ]]; then DEFAULTTARGET=all; else DEFAULTTARGET=$(make -rpn | grep ".DEFAULT_GOAL" | sed "s/.*=[[:space:]]*//" | tr -d "[:space:]"); fi; make -rpn | sed -n -e "/^$/ { n ; /^[^ ]*:/p ; }" | grep "$DEFAULTTARGET:" | sed "s/.*:[[:space:]]*//" | tr " " "\n"', returnStdout: true)
def tasks = makeTasks.split('\n')
for(int i = 0; i < tasks.size(); i++){
stage(tasks[i]) {
echo tasks[i]
// This will fail with the bogus makefile defined above, but would work with a real one.
// sh 'make ${tasks[i]}'
}
}
}
票鏈接藍海(我也可以使用),但我不確定藍色海洋如何提供幫助。關於貝殼產量。我有很多。如果我可以解析它並從概述中的解析輸出步驟生成,那將是非常好的。但我還沒有看到我會如何做到這一點。 – JE42
@ JE42也許通過像https://wiki.jenkins-ci.org/display/JENKINS/Log+Parser+Plugin或更近的插件https://wiki.jenkins-ci.org/display/JENKINS/Console+解析器+插件,但它可能無法與管道良好配合。 – VonC
@ JE42也許http://stackoverflow.com/q/36304131/6309是一種可能的選擇? – VonC