1987WEB视界-分享互联网热门产品和行业

您现在的位置是:首页 > WEB开发 > 正文

WEB开发

Jenkins-Piplinewhen条件判断

1987web2023-10-06WEB开发93
无论是jenkins官网,还是一些百度百科或者博客,都一定when基本使用。在本篇文章中,除了整理when条件使用外,也整理了我在使用过程中对复合条件实践。when指令根据给定条件判断是否执行该

无论是jenkins官网,还是一些百度百科或者博客,都一定when基本使用。在本篇文章中,除了整理when条件使用外,也整理了我在使用过程中对复合条件实践。 when指令根据给定条件判断是否执行该阶段的代码。要求when至少包含一个条件判断,支持包含多个条件,多条件是and复合条件的关系,此时与allOf的情况是相同的。

一、内置条件

branch:当构建的分支与给定的分支模式匹配时执行step,如:仅对分支pipline有效,多子系统项目不是很实用,需对子系统进行分解独立任务:when {branch master}buildingTag:构建标记时执行step,如when {buildingTag()}changelog:如果构建的SCM更新日志包含给定的正则表达式模式,则执行该阶段,如when{changelog .*^\[DEPENDENCY\] .+$}changeset:如果构建的SCM变更集包含与给定字符串或glob匹配的一个或多个文件,则执行该阶段,如when{changeset "*/.js"}默认情况下,路径匹配不区分大小写,可以使用caseSensitive参数关闭,如when{changeset glob: "ReadMe.*", caseSensitive: true}changeRquest:如果当前构建用于更改请求(GitHub和Bitbucket上的Pull Request,GitLab上的Merge请求或Gerrit中的change等),则执行该阶段。 如果没有传递任何参数,则每个更改请求都会运行该阶段when{changeRequest()}通过向变更请求添加带参数的过滤器属性,可以使阶段仅在匹配的变更请求上运行。 可能的属性是id,target,branch,fork,url,title,author,authorDisplayName和authorEmail。 其中每个对应一个CHANGE_*环境变量,如when{changeRequest target: master}可以在属性之后添加可选参数比较器,以指定如何评估匹配的任何模式:EQUALS用于简单字符串比较(默认值),GLOB用于ANT样式路径glob(与例如变更集相同)或REGEXP用于常规 表达匹配,如when{changeRequest authorEmail: "[\w_-.]+@http://example.com", comparator: REGEXP}environment:当指定环境变量设置为给定值时执行step,如:when{environment name: DEPLOY_TO, value: production}equals:当期望值等于实际值时执行阶段,如:when{equals expected: 2, actual: currentBuild.number}expression:当指定的Groovy表达式求值为true时执行阶段,从表达式返回字符串时,必须将它们转换为布尔值或返回null表示为false。 简单地返回0或false仍将评估为true。如:when{expression { return params.DEBUG_BUILD }}tag:如果TAG_NAME变量与给定模式匹配,则执行该阶段,如when {tag "release-*"}如果提供了空模式,则如果TAG_NAME变量存在,则将执行该阶段(与buildingTag()相同)。可以在属性之后添加可选参数比较器,以指定如何评估匹配的任何模式:EQUALS用于简单字符串比较(默认值),GLOB用于ANT样式路径glob(与例如变更集相同)或REGEXP用于常规 表达匹配。when {tag pattern: "release-\d+", comparator: "REGEXP"}not:嵌套条件为false时执行阶段,如when {not { branch master }}allOf:当所有嵌套条件都为真时执行阶段,必须至少包含一个条件,如when {allOf {branch masterenvironment name: DEPLOY_TO, value: production}}anyOf:至少有一个嵌套条件为真时执行阶段,必须至少包含一个条件,如when {anyOf{branch masterenvironment name: DEPLOY_TO, value: production}}

二、实践部分

复合条件使用在实际使用过程中,单一条件判断不是很实用,往往涉及多条件的处理。(1)复合expression:当其中所有条件为true时,执行step部分when {expression { params.DEBUG_BUILD }expression { env.aotu1==env.auto2}...}(2)混合复合:when {expression { params.DEBUG_BUILD }anyOf{branch masterenvironment name: DEPLOY_TO, value: production}...}