配置或者修改流水线

触发方式配置

1.JPG

三者可以同时勾选,也可以同时都不勾选,可以按照需求自行配置

说明:

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.其他流水线触发:当xxx模块的xxx流水线的xxx阶段运行完毕后,自动触发此流水线
4.手动触发:手动触发流水线的某个分支最新的代码提交的构建

怎么没看到配置页面有配置?答:不用配置,所有流水线都支持手动触发,如图:
2.JPG

点击1:触发当前分支的流水线构建。
点击2:触发其他分支的流水线构建(若该流水线没有分支的构建记录,则点击2会提示“该分支无构建”,请先构建该分支记录后再手动执行)。

流水线监听分支配置

配置一条流水线,我怎么能让我指定的分支作用域于这条流水线呢,运行我在流水线上配置的各个阶段呢?
请按如下步骤操作:
step 1 :点开流水线配置,如下图所示:
3.JPG
step 2:找到“监听分支”字样,如下图所示,填写想作用于这条流水线上的分支和消息类型
4.JPG
分支:分支匹配方式有多种:依次是精确匹配,前缀匹配,正则匹配和精准排除。

  • 精确匹配:分支名称完全匹配,例如:精确匹配 master ,那么master分支就在此流水线的作用域内。
  • 精准排除
    例如1:精准排除 master :那么master分支就不在此流水线的作用域内。
    例如2:如果你想匹配所有分支(非主干),可以参考如下
    ![image.png](https://bce.bdstatic.com/doc/XLY/image_64cdf0a.png)
    注意:如果整个作用域你只配置精准排除,那么该流水线也是不匹配任何分支的;如果一个分支既在精准排除也在其它分支匹配中,那么以精准排除为准。
    
  • 前缀匹配
    例如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消息。
    5.JPG

总结:一条流水线会触发哪些分支,在什么时候触发是由监听分支中的分支配置和消息配置共同决定的。

例如:如果一条流水线我想让所有代码合入master的时候都运行,并且所有分支有代码提交的时候(不包括master)都运行,那么我的监听分支配置如下:
6.JPG

step 3:填写流水线配置完成后,点击保存按钮

step 4:新保存的流水线配置会在流水线下次(手动执行,有代码提交)被触发时生效。

作用域配置(分支)

7.JPG

分支匹配方式有多种:

1.精确匹配
例如:精确匹配 master :那么master分支就在此流水线的作用域内。

2.精准排除
例如1:精准排除 master :那么master分支就不在此流水线的作用域内。

注意:如果整个作用域你只配置精准排除,那么该流水线也是不匹配任何分支的。

例如2:如果你想匹配所有分支(非主干),可以参考如下:
8.JPG

3.前缀匹配
例如1:前缀匹配 BRANCH :那么所有前缀是BRANCH的分支(例如BRANCH-1-0-1)就会在此流水线的作用域内,新建的符合此规则的分支也会在作用域内。

例如2:前缀匹配 『空』(这里说的空,是什么都不填写):那么所有分支(含主干)都会在此流水线的作用域内。

4.正则匹配
例如:正则匹配 .*dev :所有后缀为dev的分支就会在此流水线的作用域内。

注意:
1)填写完分支匹配规则的时候,记得点击”添加“按钮。
2)流水线默认是不匹配任何分支的,也就是说,如果你作用域为空,该流水线无法触发任何构建。

作用域配置(消息类型)

消息类型分为2种:

1.CHANGE:提交合入之前触发的消息。

场景举例:
9.JPG
此场景下,当使用git版本控制的时候,执行git push origin head:refs/for/master,就会产生一条master分支上的CHANGE消息。

2.MERGE:提交合入之后触发的消息。
10.JPG
当使用icode点击『合入』按钮的时候,就会产生一条master分支上的MERGE消息。
11.JPG

阻塞构建配置

12.JPG

说明:不阻塞构建:正常的,默认的构建方式。

13.JPG

上一次构建未结束时阻塞构建:上一条流水线未结束的时候,下一条流水线不触发;当上一条流水线运行结束,下一条流水线才会自动触发。

如图:
14.JPG
15.JPG

适用场景:多条流水线如果同时构建,会产生冲突的时候,非需要的场景不建议配置。

场景举例:流水线由编译-部署测试环境-基于环境的UI测试组成,在RD A的第一次提交触发的#1构建中,编译-部署测试环境跑完了,目前正在UI测试;这时RD B提交了一次代码触发了#2构建,跑到部署测试环境的时候,A的#1构建的UI测试被中断而失败了。我们不希望上述问题发生,所以希望能够限定流水线构建的顺序执行。如果上一次构建没完成,下一次构建处于等待中状态。

任务超时配置

1、设定任务超时时间

如图设置任务超时时间,在其他必填项填写完成后,点击保存即可。
16.JPG

输入说明:
单位:分钟,最小超时时间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:这种情况来源之一为定时服务在达到超时时间后,调起超时服务的接口两次失败造成的,建议您重新执行该任务。

定时执行

目前定时执行可以配置在 阶段 上,即设置指定时间来运行对应阶段,如下配置所示:

17.JPG

注:定时任务的执行基于最新的流水线构建,如无代码变化定时任务将不会执行。

表达式说明 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时,指定的自定义参数。
18.JPG

参数的作用域:
从定义的stage开始,本stage及后面所有stage的job都可使用并修改参数值
stage中定义了BUILD_A,stage中所有头job的输入参数值与stage相同,除头job外的串行job的输入=前一个job的输入+输出
stage中所有的job都可改写stage中的参数
关系如图:
19.JPG
参数的覆盖关系:stage上定义的参数,会覆盖前面stage已经定义的参数。
使用参数:
用户自定义参数、系统参数、插件参数,都可通过${参数名}来获取参数值。

注:jenkins job通过echo "TEST01=AAAAA" >> out.txt修改参数名为TEST01的参数值,注意:一定要修改值的时候一定要在后面加上 >> out.txt,如图所示:

20.JPG
21.JPG

系统参数如下

参数名 描述 实例
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详情页
22.JPG
上游参数:
23.JPG
下游参数:
24.JPG

构建参数分为输入及输出参数,且都是 Stage 级别,运行时会传入至该 Stage 下的所有 Job 中。页面右上角点击配置进入配置详情页。选择配置主干还是分支参数。

复制流水线

1.选择新建流水线中的复制流水线
25.JPG
2.选择要复制的模块及要复制的流水线
26.JPG
3.复制完成如需修改配置请修改,如不需修改则按照提示进行确认点击“保存”即可。
27.JPG

阶段任务配置

28.JPG
基本概念:[层级关系,从上到下;模块 > 流水线 > 阶段 > 任务 ~= 插件]

  • 模块(module):代码库
  • 流水线(pipeline):代表了一次代码到结束所需要的一系列操作,唯一对应一次代码提交。
  • 阶段(stage):在流水线之下的各个阶段。
  • 任务(job):在阶段之下的各种需要的操作。
  • 插件(plugin):插件是任务的具体实现,每个插件有每个插件的功能。

阶段详解

见图中1

触发方式:自动,手动,定时(不推荐使用)
1.自动:上游阶段构建成功之后,自动触发下游阶段,如果失败,则不允许触发下游;

2.手动:上游阶段构建成功之后,不会自动触发下游阶段;

3.定时:按照配置cron表达式定时触发阶段,且只会触发最新的一条流水线上面的未执行的阶段。
场景:与整条流水线关系不是很大的阶段,且不被其他任务依赖的阶段。

任务详解

见图中2

串行:指可以配置多个任务,并遵循前一个执行成功才可以继续执行下个串行的任务
并行:可以配置多个同时执行的任务。

构建参数

可以上下游阶段传递的供任务使用的参数,分为系统参数和自定义参数,在阶段开始的时候,会传递给阶段内部的任务。

流水线配置"通知"功能

流水线通知功能是面向任务层面的通知,可以在执行的任务中配置是在任务何种状态下发送提醒邮件通知,三种状态分别是:任务开始、任务成功、任务失败。

配置操作如下:

1.JPG
2.JPG
3.JPG
4.JPG

目前新建流水线的时候会自动发一个创建流水线的邮件提醒。