标签:秘密 The 根据 regex size close display something 很多
pipeline 分为脚本式和声明式,相比于脚本式声明式更主流更强大一些。pipeline 自身有语法语句外还支持groovy 语法,groovy 是一个类似java 语言,更简洁,有各种数据结构,函数,流程控制语句以供使用。
Jenkins是使用Java实现的,所以在很早的时候就引入了groovy作为DSL,管理员可以使用groovy来实现一些自动化和高级的管理功能。因为groovy引擎已经集成到Jenkins,所以在pipeline一开始很自然就使用groovy来编写Jenkinsfile。但是groovy毕竟是一种语言,对于没有太多编程经验的小白这个学习曲线有点太陡峭。这个时候声明式的pipeline就出现了
pipeline { //所有的声明式Pipeline都必须包含 pipeline块中 agent any //指定了流水线的执行节点(none 没有指定agent的时候默认。label 在指定标签上的节点上运行Pipeline。node 允许额外的选项) //其他的一些指令 environment //指定一个键值对序列,该序列将被定义为所有步骤的环境变量,或者是特定于阶段的步骤,这取决于environment 指令在流水线的位置 //该指令支持一个特殊的方法 credentials() ,该方法可用于在Jenkins环境中通过标识符访问预定义的凭证。对于类型为 "Secret Text"的凭证, // credentials() 将确保指定的环境变量包含秘密文本内容。 options //允许从流水线内部配置特定于流水线的选项。 流水线提供了许多这样的选项, 比如buildDiscarder,但也可以由插件提供, 比如 timestamps。 triggers //触发器,有很多种,比如定时,webhook 等等 tool //获取通过自动安装或手动放置工具的环境变量。支持maven/jdk/gradle。工具的名称必须在系统设置->全局工具配置中定义 input //用户在执行各个阶段的时候,提供的一个交互方法,例如由人工确认是否继续进行。 when //允许流水线根据给定的条件决定是否执行阶段。必须包含至少一个条件。 如果when 指令包含多个条件, 所有的子条件必须返回True, //阶段才能执行。这与子条件在 allOf 条件下嵌套的情况相同。when 的条件可以使environment 或者分支等。 parameters //就是参数化构建功能,有字符串、布尔值、多选等等web 界面存在的都可在此处相应方式实现 parallel //声明式流水线的阶段可以在他们内部声明多隔嵌套阶段, 它们将并行执行。 stages { //stages 里面可以定义多个stage是发版的主要操作区域 stage(‘Example Build‘) { steps { //stage 里面必须有steps{}里面可以通过 sh "xxx" 执行shell语句等操作是实际执行的操作步骤 echo ‘Hello World‘ sh "service xxx stop" } } stage(‘Example Deploy‘) { when { branch ‘production‘ environment name: ‘DEPLOY_TO‘, value: ‘production‘ } steps { echo ‘Deploying‘ script { //声明式不支持一些shell 语法,可以通过script{} 嵌入脚本式里面的一些语法例如for 循环、if 语句等 def browsers = [‘chrome‘, ‘firefox‘] for (int i = 0; i < browsers.size(); ++i) { echo "Testing the ${browsers[i]} browser" } } } post { //post是发版后的一些操作,根据发版结果做一些操作,主要条件有always/changed/failure/success always { echo ‘I will always say Hello again!‘ } }
脚本化流水线, 与声明式一样的是, 是建立在底层流水线的子系统上的。与声明式不同的是, 脚本化流水线实际上是由 Groovy构建的通用 DSL 。 Groovy 语言提供的大部分功能都可以用于脚本化流水线的用户。这意味着它是一个非常有表现力和灵活的工具,可以通过它编写持续交付流水线。
脚本化流水线从Jenkinsfile
的顶部开始向下串行执行, 就像 Groovy 或其他语言中的大多数传统脚本一样。 因此,提供流控制取决于 Groovy 表达式, 比如 if/else 条件, 例如:
node { stage(‘Example‘) { if (env.BRANCH_NAME == ‘master‘) { echo ‘I only execute on the master branch‘ } else { echo ‘I execute elsewhere‘ } } }
另一种方法是使用Groovy的异常处理支持来管理脚本化流水线流控制。当 步骤 失败 ,无论什么原因,它们都会抛出一个异常。处理错误的行为必须使用Groovy中的 try/catch/finally 块 , 例如:
node { stage(‘Example‘) { try { sh ‘exit 1‘ } catch (exc) { echo ‘Something failed, I should sound the klaxons!‘ throw } } }
pipeline 里面有各种功能各种语句,不便于记住,可以在jenkins 页面通过生成器配置生成,如下所示:
pipeline { agent any stages { stage(‘Example‘) { steps { echo ‘Hello World‘ script { def browsers = [‘chrome‘, ‘firefox‘] for (int i = 0; i < browsers.size(); ++i) { echo "Testing the ${browsers[i]} browser" } } } } } }
triggers { cron(‘H */4 * * 1-5‘) }
但是使用generic webhook trigger 的时候就不带括号,就会导致运行失败
triggers { GenericTrigger causeString: ‘Generic Cause‘, genericVariables: [[defaultValue: ‘‘, key: ‘message‘, regexpFilter: ‘‘, value: ‘$.message‘], [defaultValue: ‘‘, key: ‘$.message‘, regexpFilter: ‘refs/tags/‘, value: ‘$.ref‘]], printPostContent: true, regexpFilterExpression: ‘^(.*\\{\\{k8s-asdf:.*\\}\\}.*)$‘, regexpFilterText: ‘$message‘, token: ‘k8s-asdf‘ }
正确格式是在 GenericTrigger 后面加一个括号把后面内容全部包括进来
在pipeline 中定义parameter 时,第一次执行任务的时候由于parameter 配置还会生成所以就会在引用里面的参数的代码处报错提示不存在,如果引用此参数的代码位于定义parameter 代码前面那么就会导致任务永远无法执行成功,因为代码到此处就会停止,不会执行后面的parameter 定义的代码也就不会生成parameter 的配置。如果是在后面那么第一次会报错,第二次执行的时候填入parameter 参数就会正常了。
标签:秘密 The 根据 regex size close display something 很多
原文地址:https://www.cnblogs.com/fanggege/p/12894506.html