背景
公司项目中,通过配置jenkins job控制任务执行顺序。
由于执行的job是一级控制一级,具体到某一个job时候,并不能确认是配置在哪一级job中。举个例子:比如有三个jobjob1,job2,job3
,这三个job并不是具体实现,它里面配置的job才是具体实现。故,当排查一个具体job是否编排了任务,不能一下子定位到,可能需要在job1,job2,job3
各个任务搜索一遍,方可确认。若有job1,job2,job3
类似job有10个,那也是挺繁琐的过程,于是想着能否放在思维导图中,具体某个job直接一搜索就知道job所属,以及是否配置正确。
如下:
pipeline {
agent none
stages {
stage('并行计算2.1') {
parallel{
stage ('acct_wt_user_1') { steps{ script{
if (step < '5200') {
build job: 'acct_wt_user_max_holddays_stock_inc', parameters: [
[$class: 'StringParameterValue', name: 'begin_date', value: begin_date],
[$class: 'StringParameterValue', name: 'end_date', value: end_date],
[$class: 'StringParameterValue', name: 'interval_type', value: '1']
]
}
}}}
stage ('acct_wt_user_2') { steps{ script{
if (step < '5200') {
build job: 'acct_wt_user_max_holddays_stock_inc', parameters: [
[$class: 'StringParameterValue', name: 'begin_date', value: begin_date],
[$class: 'StringParameterValue', name: 'end_date', value: end_date],
[$class: 'StringParameterValue', name: 'interval_type', value: '2']
]
}
}}}
stage ('acct_wt_user_3') { steps{ script{
if (step < '5200') {
build job: 'acct_wt_user_max_holddays_stock_inc', parameters: [
[$class: 'StringParameterValue', name: 'begin_date', value: begin_date],
[$class: 'StringParameterValue', name: 'end_date', value: end_date],
[$class: 'StringParameterValue', name: 'interval_type', value: '3']
]
}
}}}
stage ('acct_wt_user_4') { steps{ script{
if (step < '5200') {
build job: 'acct_wt_user_max_holddays_stock_inc', parameters: [
[$class: 'StringParameterValue', name: 'begin_date', value: begin_date],
[$class: 'StringParameterValue', name: 'end_date', value: end_date],
[$class: 'StringParameterValue', name: 'interval_type', value: '4']
]
}
}}}
stage ('acct_wt_user_5') { steps{ script{
if (step < '5200') {
build job: 'acct_wt_user_trade_num_inc', parameters: [
[$class: 'StringParameterValue', name: 'begin_date', value: begin_date],
[$class: 'StringParameterValue', name: 'end_date', value: end_date],
[$class: 'StringParameterValue', name: 'interval_type', value: '1']
]
}
}}}
}
}
stage('并行计算2.2') {
parallel{
stage ('acct_wt_user_1') { steps{ script{
if (step < '5200') {
build job: 'acct_wt_user_trade_num_inc', parameters: [
[$class: 'StringParameterValue', name: 'begin_date', value: begin_date],
[$class: 'StringParameterValue', name: 'end_date', value: end_date],
[$class: 'StringParameterValue', name: 'interval_type', value: '2']
]
}
}}}
stage ('acct_wt_user_2') { steps{ script{
if (step < '5200') {
build job: 'acct_wt_user_trade_num_inc', parameters: [
[$class: 'StringParameterValue', name: 'begin_date', value: begin_date],
[$class: 'StringParameterValue', name: 'end_date', value: end_date],
[$class: 'StringParameterValue', name: 'interval_type', value: '3']
]
}
}}}
stage ('acct_wt_user_3') { steps{ script{
if (step < '5200') {
build job: 'acct_wt_user_trade_num_inc', parameters: [
[$class: 'StringParameterValue', name: 'begin_date', value: begin_date],
[$class: 'StringParameterValue', name: 'end_date', value: end_date],
[$class: 'StringParameterValue', name: 'interval_type', value: '4']
]
}
}}}
}
}
}
}
分析
把所有任务放在思维导图中,肯定是最合适不过,也好维护,job的执行结构顺序也清晰。最笨的方法就是在xmind中输入一个个job。但job近千个,实现完全是可行的,但是工作机械繁琐,而且容易出错。这个方法直接pass掉。
实现
稍加研究,觉得下述方法值得一试:
1、拷贝jenkins配置项具体信息至notpad++,数据内容如上描述。
2、通过正则处理:
正则表达式为:
[\s|\S]*?(\('(.+?)'\))
替换成
$2\n
替换结果为:
此时,已经提取出每个stage名,接下来稍作拷贝即可:
如上图,如此一处理,逻辑很清晰。以后即使job变动,再重新处理下也不耗时。需要注意的是,例子中并行计算2.x
下面的job,拷贝后,在ximind的上一层粘贴,那么下一层会按照\n
分隔,达到图式效果。算是一点点技巧吧。