jenkins 多分支构建(9)
1.创建多分支pipeline
前面所有例子都是单分支pipeline项目,而在实际项目中,往往需要多分支同时进行开发。如果为每个分支都分别创建一个jenkins项目,实在有些多余。幸好jenkins支持多分支pipeline(Multibranch Pipeline)。在创建此类项目时,就需要选择Multibranch Pipeline,如下所示:
下面创建了一个项目叫multibranch-jenkenhellowrold, 配置好git仓库,在腾讯工蜂的jenkenhellowrold项目上增加一个develop开发分支,继承来自master分支。点击scan多分支时,会自动加载一个develop任务,如果git仓库删除一个分支,这里也会自动删除一个任务。jenkins界面中如下所示:
下面是配置定时扫描分支,不需要人工去点击,如下所示:
孤儿项任务策略:如果代码仓库删除了release分支,那么在多分支任务页面上,该分支任务也应该被删除,至于什么时候删除,取决于下次分支扫描的时间,如果jenkins上相应任务还没有被删除,那么这个任务就叫"孤儿项任务"。
如下图所示,旧的流水线是指孤儿项任务
2. 根据分支部署到不同的环境
git分支可以用于对代码进行物理隔离。对分支的管理有很多方法,比如主干开发,发布分支以及gitflow法等,但不论使用哪种分支管理,都会有根据不同的分支部署到不同的环境,类似使用if-else来实现。
2.1 when指令
when指令允许pipeline根据给定的条件,决定是否执行阶段内的步骤。when指令必须至少包含一个条件。
下面编写一个pipeline文件,上传到devlop和master分支,保持多分支下pipeline文件相同
pipeline { agent any stages { //部署到生产环境 stage('deploy to pro'){ when{ branch 'master' } steps{ echo "deploy to pro" } } stage('deploy to dev'){ when{ branch 'develop' } steps{ echo "deploy to dev" } } } }
下面点击一个任务进去,开始构建,如下图
构建日志,如下说明,当前构建跳过了 阶段“deploy to pro ”,在deploy to dev阶段中执行了,打印了echo deploy to dev
[Pipeline] stage [Pipeline] { (deploy to pro) Stage "deploy to pro" skipped due to when conditional [Pipeline] } [Pipeline] // stage [Pipeline] stage [Pipeline] { (deploy to dev) (hide) [Pipeline] echo deploy to dev
2.2 when其它判断
when指令除了支持branch判断条件,还支持多种条件判断。
1)changelog:如果版本控制库的changlog符合正则表达式,则执行。
2)changeset: 如果版本控制库的变更集合中包含一个或多个文件符合的Ant风格路径表达式,则执行。
3)environment:如果环境变量的值与给定的值相同,则执行。
4)equals:如果期望值与给定的值相同,则执行。
5)expression:如果Groovy表达式返回true,则执行。
6)tag:如果pipeline所执行的代码被打了tag,且tag名称符合规则,则执行。