配置或者修改流水线
触发方式配置
两者选择其一,可以按照需求自行配置
说明:
1.代码库变更自动触发:监听到关联的代码库代码提交消息,自动触发此流水线。
备注:建议默认设置为自动触发,如果不设置,有代码提交,不会自动触发流水线;但是可以手动触发,详见第4条。
2.定时触发:按照cron表达式进行触发此流水线。
cron文件的格式:M H D m d y cmd.
M: 分钟(0-59)。
H:小时(0-23)。
D:天(1-31)。
m: 月(1-12)。
d: 一星期内的天(1~7)。
y:年,可以选填
除数字外,还有几个特殊的符号"*"、"/"和"-"、",",*代表所有取值范围内数字,"/"代表每的意思,"*/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字
。
eg:
0 */2 * * ? 每两小时进行一次
0 23-7/2,8 * * ? 晚上11点到7点每两小时一次,8点一次
15 10 ? * 1-5 周日至周四的上午10:15触发
0 12 ? * 3 表示每个星期三中午12点
注意:星期和天不能同时用*,否则会发生冲突,此外输入要用英文输入法
备注:截止于2018年12月29日,逻辑为:<1>若选择“仅在有代码更改时触发”的时候,会对于2次的commitId,如果一致,则不触发流水线,类似jenkins的poll scm。
3.手动触发:手动触发流水线的某个分支最新的代码提交的构建
怎么没看到配置页面有配置?答:不用配置,所有流水线都支持手动触发,如图:
点击1:触发当前分支的流水线构建。 点击2:触发其他分支的流水线构建(若该流水线没有分支的构建记录,则点击2会提示“该分支无构建”,请先构建该分支记录后再手动执行)。
流水线监听分支配置
配置一条流水线,我怎么能让我指定的分支作用域于这条流水线呢,运行我在流水线上配置的各个阶段呢? 请按如下步骤操作: step 1 :点开流水线配置,如下图所示: step 2:找到“代码库/分支”字样,如下图所示,填写想关联的代码源、代码库以及作用于这条流水线上的分支和消息类型,如图所示:
分支:分支匹配方式有多种:依次是精确匹配,前缀匹配,正则匹配和精准排除。
- 精确匹配:分支名称完全匹配,例如:精确匹配 master ,那么master分支就在此流水线的作用域内。
- 精准排除 例如1:精准排除 master :那么master分支就不在此流水线的作用域内。 例如2:如果你想匹配所有分支(非主干),可以参考如下 注意:如果整个作用域你只配置精准排除,那么该流水线也是不匹配任何分支的;如果一个分支既在精准排除也在其它分支匹配中,那么以精准排除为准。
- 前缀匹配 例如1:前缀匹配 BRANCH :那么所有前缀是BRANCH的分支(例如BRANCH-1-0-1)就会在此流水线的作用域内,新建的符合此规则的分支也会在作用域内。 例如2:前缀匹配 『空』(这里说的空,是什么都不填写):那么所有分支(含主干)都会在此流水线的作用域内。
- 正则匹配 例如:正则匹配 .*dev :所有后缀为dev的分支就会在此流水线的作用域内。
注意:填写完分支匹配规则的时候,记得点击”添加“按钮。
消息类型:分为2种,依次是change和merge
- CHANGE:提交合入之前触发的消息。 例如:当使用git版本控制的时候,执行完,git push origin head:refs/for/master,就会产生一条master分支上的CHANGE消息。
- MERGE:提交合入之后触发的消息。 例如:当使用icode点击『合入』按钮的时候,就会产生一条master分支上的MERGE消息。
总结:一条流水线会触发哪些分支,在什么时候触发是由监听分支中的分支配置和消息配置共同决定的。
例如:如果一条流水线我想让所有代码合入master的时候都运行,并且所有分支有代码提交的时候(不包括master)都运行,那么我的监听分支配置如下:
step 3:填写流水线配置完成后,点击保存按钮
step 4:新保存的流水线配置会在流水线下次(手动执行,有代码提交)被触发时生效。
作用域配置(分支)
分支匹配方式有多种:
1.精确匹配 例如:精确匹配 master :那么master分支就在此流水线的作用域内。
2.精准排除 例如1:精准排除 master :那么master分支就不在此流水线的作用域内。
注意:如果整个作用域你只配置精准排除,那么该流水线也是不匹配任何分支的。
例如2:如果你想匹配所有分支(非主干),可以参考如下:
3.前缀匹配 例如1:前缀匹配 BRANCH :那么所有前缀是BRANCH的分支(例如BRANCH-1-0-1)就会在此流水线的作用域内,新建的符合此规则的分支也会在作用域内。
例如2:前缀匹配 『空』(这里说的空,是什么都不填写):那么所有分支(含主干)都会在此流水线的作用域内。
4.正则匹配 例如:正则匹配 .*dev :所有后缀为dev的分支就会在此流水线的作用域内。
注意: 1)填写完分支匹配规则的时候,记得点击”添加“按钮。 2)流水线默认是不匹配任何分支的,也就是说,如果你作用域为空,该流水线无法触发任何构建。
作用域配置(消息类型)
消息类型分为2种:
1.CHANGE:提交合入之前触发的消息。
场景举例: step1:
此场景下,当使用git版本控制的时候,执行git push origin head:refs/for/master,就会产生一条master分支上的CHANGE消息。
2.MERGE:提交合入之后触发的消息。
当使用icode点击『合入』按钮的时候,就会产生一条master分支上的MERGE消息。
阻塞构建配置
说明:不阻塞构建:正常的,默认的构建方式。
上一次构建未结束时阻塞构建:上一条流水线未结束的时候,下一条流水线不触发;当上一条流水线运行结束,下一条流水线才会自动触发。
如图:
适用场景:多条流水线如果同时构建,会产生冲突的时候,非需要的场景不建议配置。
场景举例:流水线由编译-部署测试环境-基于环境的UI测试组成,在RD A的第一次提交触发的#1构建中,编译-部署测试环境跑完了,目前正在UI测试;这时RD B提交了一次代码触发了#2
构建,跑到部署测试环境的时候,A的#1构建的UI测试被中断而失败了。我们不希望上述问题发生,所以希望能够限定流水线构建的顺序执行。如果上一次构建没完成,下一次构建处于等待中状态。
任务超时配置
1、设定任务超时时间
如图设置任务超时时间,在其他必填项填写完成后,点击保存即可。
输入说明: 单位:分钟,最小超时时间1分钟,最大超时时间1天=1440分钟,不在范围内(1-1440)的输入会无法保存配置。同时,建议您的输入为整数(非整数的输入会进行向下取整,如,1.5分钟会被认为是1分钟)。 设置完成后,流水线将支持全局型的超时服务,即,新的构建在job running的时候自动加入超时判定,而旧的构建的job在重新(手动/选择)执行时也会加入超时判定。任务超时时间为流水线上单个任务执行的最大时间,当任务执行时间超过设置的时间时,产品上任务的行为与取消任务一致,如下图:配置1分钟超时的任务,超过一分钟自动取消任务:
其他问题排查
Q:我在保存流水线时出现了 ”保存失败!register stage timer job error“ 错误,是哪里出错了呢?
A:请检查您是否配有定时触发的阶段,且定时阶段的cron表达式是否正确,如问号是否误输为中文的问号,而非英文的问号。cron表达式请参考触发方式配置中定时触发的cron格式说明。
Q:我的任务超时时间设置为1分钟,为什么会在1min1s,或者1min2s才判定为超时?
A:服务器偶有延迟,此为正常现象。
Q:我在设置了超时时间后,为什么会出现job 一直在running的情况?
A:这种情况来源之一为定时服务在达到超时时间后,调起超时服务的接口两次失败造成的,建议您重新执行该任务。
定时执行
目前定时执行可以配置在 阶段 上,即设置指定时间来运行对应阶段,如下配置所示:
注:定时任务的执行基于最新的流水线构建,如无代码变化定时任务将不会执行。
表达式说明 Seconds Minutes Hours Day-of-Month Month Day-of-Week Year (可选字段)
例 "0 0 12 ? * WED" 在每星期三下午12:00 执行,
Seconds (秒) :可以用数字0-59 表示,
Minutes(分) :可以用数字0-59 表示,
Hours(时) :可以用数字0-23表示,
Day-of-Month(天) :可以用数字1-31 中的任一一个值,但要注意一些特别的月份
Month(月) :可以用0-11 或用字符串 “JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV and DEC” 表示
Day-of-Week(每周):可以用数字1-7表示(1 = 星期日)或用字符口串“SUN, MON, TUE, WED, THU, FRI and SAT”表示
“/”:为特别单位,表示为“每”如“0/15”表示每隔15分钟执行一次,“0”表示为从“0”分开始, “3/20”表示表示每隔20分钟执行一次,“3”表示从第3分钟开始执行
“?”:表示每月的某一天,或第周的某一天
“L”:用于每月,或每周,表示为每月的最后一天,或每个月的最后星期几如“6L”表示“每月的最后一个星期五”
“W”:表示为最近工作日,如“15W”放在每月(day-of-month)字段上表示为“到本月15日最近的工作日”
““#”:是用来指定“的”每月第n个工作日,例 在每周(day-of-week)这个字段中内容为"6#3" or "FRI#3" 则表示“每月第三个星期五”
表达式范例
每隔5秒执行一次:*/5 * * * * ?
每隔1分钟执行一次:0 */1 * * * ?
每天23点执行一次:0 0 23 * * ?
每天凌晨1点执行一次:0 0 1 * * ?
每月1号凌晨1点执行一次:0 0 1 1 * ?
每月最后一天23点执行一次:0 0 23 L * ?
每周星期天凌晨1点实行一次:0 0 1 ? * L
在26分、29分、33分执行一次:0 26,29,33 * * * ?
每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?
构建参数
构建参数分类及解析
用户自定义参数,定义:用户在配置stage时,指定的自定义参数。
参数的作用域: 从定义的stage开始,本stage及后面所有stage的job都可使用并修改参数值 stage中定义了BUILD_A,stage中所有头job的输入参数值与stage相同,除头job外的串行job的输入=前一个job的输入+输出 stage中所有的job都可改写stage中的参数 关系如图: 参数的覆盖关系:stage上定义的参数,会覆盖前面stage已经定义的参数。 使用参数: 用户自定义参数、系统参数、插件参数,都可通过${参数名}来获取参数值。
注:jenkins job通过echo "TEST01=AAAAA" >> out.txt修改参数名为TEST01的参数值,注意:一定要修改值的时候一定要在后面加上 >> out.txt,如图所示:
系统参数如下
参数名 | 描述 | 实例 |
---|---|---|
AGILE_PIPELINE_BUILD_ID | 流水线构建id | 807 |
AGILE_BASE_REVISION | ac6e9ee97e0075f4a76ab3a68686789a1f136795 | |
AGILE_MODULE_NAME | 代码库名称 | ogkobjps/lihangtest/lihangtest01 |
AGILE_PIPELINE_ID | 50 | |
AGILE_COMMENTS | 提交代码的comment信息 | [{"Commit":"ac6e9ee97e0075f4a76ab3a68686789a1f136795","author":"zhutiankai04_ogkobjps","comment":"ogkobjps-demo-1 test pipieline"}] |
AGILE_PIPELINE_TYPE | 流水线流水线类型(单模块) | MODULE |
AGILE_COMPILE_BRANCH | mmmmmmmm | |
AGILE_PIPELINE_JOB_BUILD_ID | 执行job的唯一id | 117 |
AGILE_PIPELINE_BUILD_NUMBER | 流水线上显示的构建号 | 51 |
AGILE_TRIGGER_USER | 触发人 | zhutiankai04 |
AGILE_PIPELINE_NAME | ||
AGILE_REVISION | 版本号 | ac6e9ee97e0075f4a76ab3a68686789a1f136795 |
AGILE_TRIGGER_ID | 触发id触发id | f22bc0858a65415ebd7aad7fb540fe7b |
AGILE_OLD_REVISION | 初始版本号 | 0000000000000000000000000000000000000000 |
查看阶段的输入参数与输出参数: 进入job详情页 上游参数: 下游参数:
构建参数分为输入及输出参数,且都是 Stage 级别,运行时会传入至该 Stage 下的所有 Job 中。页面右上角点击配置进入配置详情页。选择配置主干还是分支参数。
复制流水线
1.选择新建流水线中的复制流水线
2.选择要复制的模块及要复制的流水线
3.复制完成如需填写流水线ID,其他如不需修改则按照提示进行确认点击“保存”即可。
阶段任务配置
基本概念:[层级关系,从上到下;模块 > 流水线 > 阶段 > 任务 ~= 插件]
- 模块(module):代码库
- 流水线(pipeline):代表了一次代码到结束所需要的一系列操作,唯一对应一次代码提交。
- 阶段(stage):在流水线之下的各个阶段。
- 任务(job):在阶段之下的各种需要的操作。
- 插件(plugin):插件是任务的具体实现,每个插件有每个插件的功能。
阶段详解
见图中1
触发方式:自动,手动,定时(不推荐使用) 1.自动:上游阶段构建成功之后,自动触发下游阶段,如果失败,则不允许触发下游;
2.手动:上游阶段构建成功之后,不会自动触发下游阶段;
3.定时:按照配置cron表达式定时触发阶段,且只会触发最新的一条流水线上面的未执行的阶段。 场景:与整条流水线关系不是很大的阶段,且不被其他任务依赖的阶段。
任务详解
见图中2
串行:指可以配置多个任务,并遵循前一个执行成功才可以继续执行下个串行的任务 并行:可以配置多个同时执行的任务。
构建参数
可以上下游阶段传递的供任务使用的参数,分为系统参数和自定义参数,在阶段开始的时候,会传递给阶段内部的任务。
流水线配置"通知"功能
流水线通知功能是面向任务层面的通知,可以在执行的任务中配置是在任务何种状态下发送提醒邮件通知,三种状态分别是:任务开始、任务成功、任务失败。
配置操作如下:
目前新建流水线的时候会自动发一个创建流水线的邮件提醒。