jenkins pipeline 内置条件判断when和script 内执行脚本

when指令概述 when指令允许Pipeline根据给定条件确定是否应执行该阶段。该when指令必须至少包含一个条件。如果when指令包含多个条件,则所有子条件必须返回true才能执行该阶段。这与子条件嵌套...

when指令概述

when指令允许Pipeline根据给定条件确定是否应执行该阶段。该when指令必须至少包含一个条件。如果when指令包含多个条件,则所有子条件必须返回true才能执行该阶段。这与子条件嵌套在allOf条件中的情况相同(参见下面的示例)。如果使用anyOf条件,请注意一旦找到第一个true条件,条件就会跳过剩余的测试条件。

更复杂的条件结构可使用嵌套条件建:not,allOf或anyOf。

嵌套条件可以嵌套到任意深度。

是否必须: 非必须

参数: 没有

所在位置: 在stage指令内

内置条件

branch


当正在构建的分支与给定的分支模式匹配时执行阶段。如 when { branch ‘master’ } . 这仅在多分支Pipeline中有效。

buildingTag


构建构建标记时执行阶段。例: when { buildingTag() }

changelog


如果构建的SCM更新日志包含给定的正则表达式模式,则执行该阶段 例如: when { changelog ‘.*^\[DEPENDENCY\] .+$’ }

changeset


如果构建的SCM变更集包含与给定字符串或glob匹配的一个或多个文件,则执行该阶段。 例如: when { changeset “**/*.js” }


默认情况下,路径匹配不区分大小写,可以使用caseSensitive参数关闭, 例如: when { changeset glob: “ReadMe.*”, caseSensitive: true }

changeRequest


如果当前构建用于“更改请求”(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_-.]+@example.com”, comparator: ‘REGEXP’ }

environment


当指定的环境变量设置为给定值时执行阶段, 例如: when { environment name: ‘DEPLOY_TO’, value: ‘production’ }

equals


当期望值等于实际值时执行阶段, 例如: when { equals expected: 2, actual: currentBuild.number }

expression


当指定的Groovy表达式求值为true时执行阶段,例如: when { expression { return params.DEBUG_BUILD } } .


请注意,从表达式返回字符串时,必须将它们转换为布尔值或返回null表示为false。 简单地返回0或false仍将评估为true。

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 ‘master’; environment name: ‘DEPLOY_TO’, value: ‘production’ } }

anyOf


至少有一个嵌套条件为真时执行阶段。 必须至少包含一个条件。例如: when { anyOf { branch ‘master’; branch ‘staging’ } }


在进入stage’s agent之前评估when

默认情况下,进入该阶段的agent后,对该阶段的when条件进行评估。 但是,可以通过在when块中指定beforeAgent选项来更改此设置。 如果beforeAgent设置为true,则首先评估when条件,并且仅当when条件的计算结果为true时才进入agent。

-----------------------------------



pipeline中执行命令 在steps中和script中看是都可以
结论:


如果同时有environment和parameters时,env.VERSION和VERSION默认会使用enironment的值的,因此要想使用parameters,推荐使用params.VERSION来引用。

这里需要注意下,大小写变量问题。


如果把命令式代码写在了steps里面,有的命令会报错的,因此一般要写在scriptP{}里面;这样一来的话,Jenkinsfile就由声明式代码,内嵌一部分命令式代码组成,更加增加了其灵活性;


虽然有的shell命令放在stage里也不会报错的,但是为了代码的规范性及可读性,强烈建议将shell命令都放在script里!(有可能if else放在stage里可能会报错)


pipeline{

    //指定运行此流水线的节点

    agent any

    environment{

        branchName = "dev"

       version = "1.1.1"

    }

    parameters {

        string defaultValue: '1.1.2', description: '版本号', name: 'VERSION', trim: true

        choice choices: ['prod', 'test', 'dev'], name: 'envType'

    }


    //流水线的阶段

    stages{

        //阶段1 获取代码

        stage("CheckOut"){

            steps{

                script{

                     echo "${branchName}"

                     echo "${VERSION}"

                     echo "${env.VERSION}"

                     echo "${params.VERSION}"

                }

            }

        }

}

}

  • 发表于 2022-05-10 15:27
  • 阅读 ( 50 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
shitian
shitian

662 篇文章

作家榜 »

  1. shitian 662 文章
  2. 石天 437 文章
  3. 每天惠23 33 文章
  4. 小A 29 文章