建站工具帝国网站大幅广告

当前位置: 首页 > news >正文

建站工具帝国,网站大幅广告,舟山市建设工程造价管理协会网站,wordpress 做公司网站大家好#xff0c;我是蓝胖子#xff0c;相信大家平时项目中或多或少都有用到jenkins#xff0c;它的piepeline模式能够对项目的发布流程进行编排#xff0c;优化部署效率#xff0c;减少错误的发生#xff0c;如何去写一个pipeline脚本呢#xff0c;今天我们就来简单看… 大家好我是蓝胖子相信大家平时项目中或多或少都有用到jenkins它的piepeline模式能够对项目的发布流程进行编排优化部署效率减少错误的发生如何去写一个pipeline脚本呢今天我们就来简单看看pipeline的语法。 先拿一个hello world的pipeline脚本举例我们来看看pipeline脚本的组成 pipeline {agent anystages {stage(Hello) {steps {echo Hello World}}} }脚本都是以pipeline的关键字开头接着看下pipeline内部具体由哪几部分组成。 agent agent 部分指明了pipeline脚本在哪台机器或者容器内执行因为jenkins的工作模式是master-agent模式master可以把流水线任务的执行放到其代理节点上执行。 同时jenkins的节点(master节点或者agent代理节点)可以打上标签如下表示的是pipeline脚本需要在标签为jdk8的节点上运行。 pipeline {agent {node {label:jdk8}}stages {stage(Hello) {steps {echo Hello World}}} }agent模块也可以写到stage里表示特定stage模块都在指定的agent节点上运行,如下所示 pipeline {agent anystages {stage(Hello) {agent {node {label:jdk8}}steps {echo Hello World}}} }在文章开头的hello world的脚本中agent我们指定了any这表示可以在任意节点上运行pipeline脚本。agent模块不可省略不写。 stages 接着来看下stages模块stages模块由多个stage组成一个stage表示一个阶段比如我们通常将发布的整个流程分为编译传输部署等几个阶段。 stage 一个阶段由多个步骤组成在pipeline语法中步骤通过steps模块表示steps包含了一个或多个步骤在上述hello world的pipeline脚本中echo ‘Hello World’ 就是一个步骤比如我们想要执行shell命令就要运行sh步骤如下所示, pipeline {agent anystages {stage(Hello) {steps {sh ping 127.0.0.1}}} }pipeline的步骤是可插拔的可以通过安装某些插件来执行特定的步骤。 post 除了上述模块还可以在stages或者steps模块后面定义post模块来表示整个pipeline执行完成或者单个stage完成后需要执行的动作。 如下所示 pipeline {agent anystages {stage(Build) {steps {sh echo Build stage …}post {always {echo post condition executed: always …} }}}post {unstable {echo post condition executed: unstable …}failure {echo post condition executed: unsuccessful …}cleanup {echo post condition executed: cleanup …}}}post模块可以定义多个条件块条件块里写上要执行的步骤条件块有以下几种 always: 无论当前执行结果是什么状态都执行changed: 当前完成状态和上一步完成状态不同则执行fixed: 上一步为失败或不稳定(unstable) 当前状态为成功时regression: 上一次完成状态为成功当前完成状态为失败、不稳定或中止aborted时执行。aborted: 当前执行结果是中止状态时一般为人为中止执行。failure当前完成状态为失败时执行。success当前完成状态为成功时执行。unstable当前完成状态为不稳定时执行通常是cleanup清理条件块。不论当前完成状态是什么在其他所有条件块执行完成后都执行。 这里再着重解释下unstable 状态通常我们将测试失败的状态设定为unstable可以把它理解成日志等级的warn状态。如下我们可以主动设置stage和构建结果为unstable状态。 pipeline {agent anystages {stage(Test) {steps {warnError(watch it){sh echo Running tests…exit 1 }}}stage(Hello2) {steps {echo hello}}}post {failure {echo failure}success {echo success}unstable {echo unstable}} }最终产生的构建视图如下: 指令 pipeline除了上述的基本结构外还提供了一些其他指令作为其基本结构的补充 Jenkins pipeline支持的指令有 environment用于设置环境变量可定义在stage或pipeline部分。tools可定义在pipeline或stage部分。它会自动下载并安装我们指定的工具并将其加入PATH变量中。input定义在stage部分会暂停pipeline提示你输入内容。options用于配置Jenkins pipeline本身的选项比如options {retry3}指当pipeline失败时再重试2次。options指令可定义在stage或pipeline部分。parallel并行执行多个step。在pipeline插件1.2版本后parallel开始支持对多个阶段进行并行执行。parameters与input不同parameters是执行pipeline前传入的一些参数。triggers用于定义执行pipeline的触发器。when当满足when定义的条件时阶段才执行。 在使用指令时需要注意的是每个指令都有自己的“作用域”。如果指令使用的位置不正确Jenkins将会报错。 更多的配置案例请参考 流水线语法 (jenkins.io) 嵌入式脚本 在pipeline 声明式语法中当需要执行代码块条件判断时除了使用when指令还可以使用groovy语法的脚本脚本还可以执行for循环的操作配置代码如下脚本需要被script块包括起来 写script块内的脚本需要先简单了解下groovy的语法 pipeline {agent anystages {stage(Example) {steps {echo Hello Worldscript {def browsers [chrome, firefox]for (int i 0; i browsers.size(); i) {echo Testing the \({browsers[i]} browser}}}}} }函数调用 pipeline脚本同样可以定义函数然后通过调用函数来执行一段逻辑函数的定义遵循groovy的语法如下我定义了一个hello的函数然后对其进行调用。 注意函数定义是放到pipeline外面的。因为要接收函数返回值所以整个函数调用是放到了script块里groovy的语法中双引号中可以用\)变量名来引用特定的变量。 def hello(String name){echo \(namereturn Yes } pipeline {agent anystages {stage(Hello2) {steps {script {def res hello(Beatiful)echo \)res}}}}}共享库 虽然pipeline脚本能够定义函数提取重复逻辑但是如果有100个pipeline脚本都需要同一个函数不可能定义100遍这样的函数所以jenkins提供了共享库的机制来让我们方便去定义一个函数可以供多个pipeline脚本使用。下面介绍下写一个共享库的基本步骤 创建一个代码库并上传git 我们要写的函数就定义在vars目录下在vars目录中的文件名如果有多个单词需遵循驼峰格式的命名到时候引用函数的函数名和vars目录下的文件名一致。 BoxJenkins ├── README.md ├── src └── vars├── hello.groovy hello.groovy 的文件内容如下,注意里面的函数名call是固定的不可变动。 def call(String name){ echo $name
}jenkins 引入共享库 在Jenkins的Manage Jenkins→Configure System→Global Pipeline Libraries中配置共享库的git地址。 其中Name则是到时候我们要引入的库名称 pipeline 中引入共享库 引入共享库的语法为 在pipeline块外部使用Library(‘lanpangzi-libmaster’) _ 以下是配置示例其中master 中的master代表库的版本可以由分支名tag名乃至commit id代替。 Library(lanpangzi-libmaster) _pipeline {agent anystages {stage(Hello2) {steps {hello(wudi)}}}}关于共享库还有更多的用法例如在共享库中定义pipeline模板以及使用共享库中src的代码这里就不再展开了。 总结 这一节基本上对jenkins的pipeline脚本语法做了比较完整的介绍在以后再看pipeline脚本时可能还会接触到许多插件提供的函数或更多的指令但是它们都逃不开pipeline脚本的基本结构掌握了基础语法后面才能更上一层楼。