Jenkins分层作业和作业状态汇总
您可能知道,Jenkins是高度可配置的CI服務器。 我們可以設置不同的自定義構建過程。 我將分享一些我用來設置Jenkins工作層次的方法。 這是用例:
請參見下面的示例屏幕快照,該示例可視化了總體思路。 這里:
- Main_Job是單入口作業,必須包含所有同級作業狀態
- Job_Set_1和Job_Set_2是兩個子作業
- Build_ [1-4]是Job_Set_1的子作業
- Tests_ [1-3]是Job_Set_2的子作業
現在,我們應該使用一些Jenkins插件來構建這樣的層次結構。 我一直在使用Multijob Plugin 。 請參閱以下配置的屏幕截圖:
Main_Job /配置
Job_Set_1 /配置
Job_Set_2 / configure
但是,這還不夠。 我們必須將所有兄弟作業的狀態匯總到Main_Job中 。 我一直在使用修補的Groovy Postbuild插件 。 修改后的插件位于https://github.com/halyph/groovy-postbuild-plugin Groovy Postbuild插件允許我們為作業的Post-build Actions編寫Groovy腳本。 該腳本可以訪問整個Jenkins環境,并且可以使用所有已安裝的Jenkins插件的功能:
這是此腳本的來源:
import hudson.model.* import com.tikal.jenkins.plugins.multijob.*;void log(msg) {manager.listener.logger.println(msg) }threshold = Result.SUCCESSvoid aggregate_results() {failed = falsemainJob = manager.build.getProject().getName()job = hudson.model.Hudson.instance.getItem(mainJob)log '-------------------------------------------------------------------------------------'log 'Aggregated status report'log '-------------------------------------------------------------------------------------'log('${mainJob} #${manager.build.getNumber()} - ${manager.build.getResult()}')job.getLastBuild().getSubBuilds().each { subBuild->subJob = subBuild.getJobName() subJobNumber = subBuild.getBuildNumber()job = hudson.model.Hudson.instance.getItem(subBuild.getJobName())log '${subJob} #${subJobNumber} - ${job.getLastCompletedBuild().getResult()}'log job.getLastCompletedBuild().getLog()//println subBuilddePhaseJob = hudson.model.Hudson.instance.getItem(subBuild.getJobName())dePhaseJobBuild = dePhaseJob.getBuildByNumber(subBuild.getBuildNumber())dePhaseJobBuild.getSubBuilds().each { childSubBuild ->try {log ' ${childSubBuild.jobName}'job = hudson.model.Hudson.instance.getItem(childSubBuild.getJobName())build = job.getBuildByNumber(childSubBuild.getBuildNumber())indent = ' ' log '${indent} #${build.getNumber()} - ${build.getResult()}' log build.getLog()if(!failed && build.getResult().isWorseThan(threshold) ) {failed = true}} catch (Exception e) { log('ERROR: ${e.getMessage()}')failed = true}}}if(failed) {manager.build.setResult(hudson.model.Result.FAILURE)} }try {aggregate_results() } catch(Exception e) {log('ERROR: ${e.message}')log('ERROR: Failed Status report aggregation')manager.build.setResult(hudson.model.Result.FAILURE) }您也可以在GitHub Gist上找到它: https : //gist.github.com/4610274 。
這個腳本很傻。 它只是為每個子作業提取(在Main_Job控制臺中打印)下一個信息:
- 工作名稱
- 建立數字
- 生成結果(狀態)
- 建立日志
此外,它還可以根據子作業的狀態來設置Main_Job狀態。 請參閱腳本中的threshold變量。 匯總報告如下所示:
Started by user anonymous Building in workspace C:\Users\oivasiv\.jenkins\jobs\Main_Job\workspace Starting build job Job_Set_1. Finished Build : #8 of Job : Job_Set_1 with status :SUCCESS Starting build job Job_Set_2. Finished Build : #8 of Job : Job_Set_2 with status :SUCCESS ------------------------------------------------------------------------------------- Aggregated status report ------------------------------------------------------------------------------------- Main_Job #8 - SUCCESS Job_Set_1 #8 - SUCCESS Started by upstream project 'Main_Job' build number 8 Building in workspace C:\Users\oivasiv\.jenkins\jobs\Job_Set_1\workspace Starting build job Build_1. Starting build job Build_2. Finished Build : #8 of Job : Build_1 with status :FAILURE Finished Build : #8 of Job : Build_2 with status :SUCCESS Starting build job Build_3. Starting build job Build_4. Finished Build : #6 of Job : Build_3 with status :UNSTABLE Finished Build : #6 of Job : Build_4 with status :SUCCESS Notifying upstream projects of job completion Finished: SUCCESSBuild_1#8 - FAILURE Started by upstream project 'Job_Set_1' build number 8 Building in workspace C:\Users\oivasiv\.jenkins\jobs\Build_1\workspace Setting result to [Failed] Build step 'Set the build result' changed build result to FAILURE Build step 'Set the build result' marked build as failure Notifying upstream projects of job completion Finished: FAILUREBuild_2#8 - SUCCESS Started by upstream project 'Job_Set_1' build number 8 Building in workspace C:\Users\oivasiv\.jenkins\jobs\Build_2\workspace Setting result to [Success] Build step 'Set the build result' changed build result to SUCCESS >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> null Notifying upstream projects of job completion Finished: SUCCESSBuild_3#6 - UNSTABLE Started by upstream project 'Job_Set_1' build number 8 Building in workspace C:\Users\oivasiv\.jenkins\jobs\Build_3\workspace Setting result to [Unstable] Build step 'Set the build result' changed build result to UNSTABLE Notifying upstream projects of job completion Finished: UNSTABLEBuild_4#6 - SUCCESS Started by upstream project 'Job_Set_1' build number 8 Building in workspace C:\Users\oivasiv\.jenkins\jobs\Build_4\workspace Setting result to [Success] Build step 'Set the build result' changed build result to SUCCESS Notifying upstream projects of job completion Finished: SUCCESSJob_Set_2 #8 - SUCCESS Started by upstream project 'Main_Job' build number 8 Building in workspace C:\Users\oivasiv\.jenkins\jobs\Job_Set_2\workspace Starting build job Test_1. Finished Build : #8 of Job : Test_1 with status :SUCCESS Starting build job Test_2. Finished Build : #8 of Job : Test_2 with status :UNSTABLE Starting build job Test_3. Finished Build : #8 of Job : Test_3 with status :SUCCESS Notifying upstream projects of job completion Finished: SUCCESSTest_1#8 - SUCCESS Started by upstream project 'Job_Set_2' build number 8 Building in workspace C:\Users\oivasiv\.jenkins\jobs\Test_1\workspace Setting result to [Success] Build step 'Set the build result' changed build result to SUCCESS Notifying upstream projects of job completion Finished: SUCCESSTest_2#8 - UNSTABLE Started by upstream project 'Job_Set_2' build number 8 Building in workspace C:\Users\oivasiv\.jenkins\jobs\Test_2\workspace Setting result to [Unstable] Build step 'Set the build result' changed build result to UNSTABLE Notifying upstream projects of job completion Finished: UNSTABLETest_3#8 - SUCCESS Started by upstream project 'Job_Set_2' build number 8 Building in workspace C:\Users\oivasiv\.jenkins\jobs\Test_3\workspace Setting result to [Success] Build step 'Set the build result' changed build result to SUCCESS Notifying upstream projects of job completion Finished: SUCCESSBuild step 'Groovy Postbuild' changed build result to FAILURE Build step 'Groovy Postbuild' marked build as failure Notifying upstream projects of job completion Finished: FAILURE因此,此類作業狀態聚合和Groovy后處理有什么好處:
- 我們在一個地方擁有工作狀態
- 從Main_Job發送的電子郵件通知包含此狀態
- 實現任何自定義后處理邏輯的能力
- 可以通過Groovy Scrip重用其他插件功能
參考:來自JCG合作伙伴 Orest Ivasiv的Jenkins分層作業和作業狀態匯總 ,在Knowledge Is Everything博客上。
翻譯自: https://www.javacodegeeks.com/2013/02/jenkins-hierarchical-jobs-and-jobs-status-aggregation.html
總結
以上是生活随笔為你收集整理的Jenkins分层作业和作业状态汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 植绒工艺介绍 植绒工艺是什么
- 下一篇: Spring集成–从头开始应用程序,第2