上一篇学习了Agent的这个指令和相关参数的基本使用,基本上掌握了node这个可选参数就好。这一篇,来学习post和stages指令。
1.post指令基本概述
post部分定义将在Pipeline运行或阶段结束时运行的操作。一些
条件后
的块的内支持post:部分 always,changed,failure,success,unstable,和aborted。这些块允许在Pipeline运行或阶段结束时执行步骤,具体取决于Pipeline的状态。
简单来说,post可以放在顶层,也就是和agent{…}同级,也可以放在stage里面。一般放顶层的比较多。而且pipeline代码中post代码块不是必须的,使用post的场景基本上执行完一个构建,进行发送消息通知,例如构建失败会发邮件通知。
基本代码布局:
Pipeline {
agent any
stages {
stage (‘Test’) {
post {
//写相关post部分代码
2.不同post条件的基本用法
在post代码块区域,支持多种条件指令,这些指令有always,changed,failure,success,unstable,和aborted。下面分别来介绍这些条件的基本用法。
条件1:always
作用:无论Pipeline运行的完成状态如何都会执行这段代码
基本代码:
pipeline {
agent {
node {
label ‘xxx-agent-机器’
customWorkspace "${env.JOB_NAME}/${env.BUILD_NUMBER}"
stages {
stage (‘Build’) {
bat “dir” // 如果jenkins安装在windows并执行这部分代码
sh “pwd” //这个是Linux的执行
post {
always {
script {
//写相关清除/恢复环境等操作代码
这个always场景,很容易想到的场景就是,事后清理环境。例如测试完了,对数据库进行恢复操作,恢复到测试之前的环境。
条件2:changed
作用:只有当前Pipeline运行的状态与先前完成的Pipeline的状态不同时,才能触发运行。
基本代码:
pipeline {
agent {
node {
label ‘xxx-agent-机器’
customWorkspace "${env.JOB_NAME}/${env.BUILD_NUMBER}"
stages {
stage (‘Build’) {
bat “dir” // 如果jenkins安装在windows并执行这部分代码
sh “pwd” //这个是Linux的执行
post {
changed {
script {
// 例如发邮件代码
这个场景,大部分是写发邮件状态。例如,你最近几次构建都是成功,突然变成不是成功状态,里面就触发发邮件通知。当然,使用changed这个指令没success和failure要频率高。
条件3:failure
作用:只有当前Pipeline运行的状态与先前完成的Pipeline的状态不同时,才能触发运行。
基本代码:
pipeline {
agent {
node {
label ‘xxx-agent-机器’
//customWorkspace "${env.JOB_NAME}/${env.BUILD_NUMBER}"
stages {
stage (‘Build’) {
bat “dir” // 如果jenkins安装在windows并执行这部分代码
sh “pwd” //这个是Linux的执行
post {
failure {
script {
// 例如发邮件代码
这个failure条件一般来说,百分百会写到Pipeline代码中,内容无非就是发邮件通知,或者发微信群,钉钉机器人,还有国外的slack聊天群组等。
剩下的三个条件:success, unstable, aborted 我就不写代码介绍,和上面一样的代码结构,简单介绍下这三个条件的含义。Success和上面failure都是只Jenkins job的执行结果。是成功,Jenkins UI这次构建会显示绿色图标;如果是失败,就显示红色图标;如果是取消,也就是aborted状态,就显示灰色图标。还有一个是不稳定状态,叫unstable,这几个单词都是和Jenkins job构建结果的概念,如果你熟悉Jenkins,那么这些概念很简单。本篇要求掌握,always和failure和success的基本使用代码。
3.stages 和steps基本使用
前面简单说了steps和step的语法,这里来详细说说steps语法,在Declarative 模式中,只支持steps,不支持在steps {…} 里面嵌套写step{…}。一个stage 下至少有一个steps,一般也就是一个steps。我们可以在一个steps下写调用一个或者几个方法,也就是两三行代码。具体的代码实现,可以放在别的包里面。stages下可以包含多个stage, 在一个Declarative Pipeline脚本中,只允许出现一次stages。
以后我们大部分的pipeline代码都在每一个stage里面的steps下,下面写一个最基础的,还是第二篇文章的这个基础代码。
pipeline {
agent any
stages {
stage('Build') {
steps {
println "Build"
stage('Test') {
steps {
println "Test"
stage('Deploy') {
steps {
println "Deploy"
注:上面println是Groovy的语法,就是一个打印语句。不管以后pipeline代码有多么复杂,都是以这个为基础骨架,例如添加一些try catch语句还有其他的指令。
//always部分 pipeline运行结果为任何状态都运行
emailext body:
'''<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0">
<tabl...
any: 运行在任一可用节点。
none:当pipeline全局指定agent为none,则根据每个stage中定义的agent运行(stage必须指定)。
label:在指定的标签的节点运行。(标签=分组)
node:支持自定义流水线的工作目录。
pipeline {
agent any
pipeline {
agent { label "label Name" }
## 三 自定义节点
pipeline {
执行输出的时候, 可以正常显示, 却总是不显示,但是也不报错
于是, 我做了以下测试 (我的主节点为 windows, 子节点也为 windows)也就是说windows子节点无法在pipeline风格项目中直接执行cmd命令,尝试过的方法包括以下(但是都不起作用)那么最后的解决方法是什么呢? 就是在共享库中定义子节点执行cmd命令的一个方法 ,然后在pipeline项目中导入共享库,并且调用该方法
不知道大家没有没遇到过这个问题
jenkins2.x支持Pipeline as code,可以通过Jenkinsfile用代码来部署流水线,使用jenkinsfile比界面操作的方式的好处:
- 更好的版本化,可以将Jenkinsfile提交到版本管理工具中(git、svn),进行版本控制;
- 更方便多人协作,也可以对流水线代码审查;
- 增加部署流水线脚本的重用。......
jenkins 有 2 种流水线分为声明式流水线与脚本化流水线,脚本化流水线是 jenkins 旧版本使用的流水线脚本,新版本 Jenkins 推荐使用声明式流水线。文档只介绍声明流水线。
##Pipeline
Pipeline 简而言之,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化
关键字node就是用来区分,Jenkins环境中不同的节点环境。例如一个Jenkins环境包括master节点,也就是主节点,还包括N多个从节点,这些从节点在添加到主节点的向导页面中有一个参数,好像是label,就是给这个从节点取一个名称。在Pipeline代码中可以通过node这个关键字告诉Jen
optimum pipeline stages 最佳流水线等级
2.所谓流水线处理,如同生产装配线一样,将操作执行工作量分成若干个时间上均衡的操作段,从流水线的起点连续地输入,流水线的各操作段以重叠方式执行。这使得操作执行速度只与流水线输入的速度有关,而与处理所需的时间无关。这样,在理想的流水操作状态下,其运行效率很高。
利用流水线的设计方法,可大大提高系统的工作速度。这种...
目录pipeline学习脑图一、pipeline基本介绍1、pipeline是什么2、语法类型二、语法说明三、pipeline实际应用jenkins2.x开始流行pipeline(groovy语言编写)的写法,目的是通过以代码的方式来进行job的构建,减少人工操作导致的人为出错。它是用于描述整条流水线是如何进行,流水线的内容一般包括执行编译、打包、测试、部署及告警通知等步骤。pipeline有两种语法类型,分别是声明式pipeline和脚本式2.1 声明式pipeline
字段说明agent : any
目前DevOps和CI/CD正在大行其道,各家公司都有自己的产品,主要分为两类:微软的TFS、开源的Jenkins,目前来看Jenkins由于其开源性、丰富的组件更受欢迎。我去年就想学习一下Jenkins,不过由于各种原因直到最近才把本地自动化部署完整的弄出来,难度其实并不高,今天把文章发出来一是为了做个记录,二是希望能让新入门的朋友有一个参考。本文略过了Jenkins的安装过程,请大家安装完毕后再参考本文实现自动化部署。
一、安装插件
1、操作路径:Manage Jenkins/Manage Plug
流水线顶层必须是一个块,特别是pipeline{}。
不需要分号作为分割符,是按照行分割的。
语句块只能由阶段、指令、步骤、赋值语句组成。例如: input被视为input()。
那么Jenkins pipeline支持多少哪些指令
在Declarative Pipeline模式的代码中,可能会在一个stages{…}中声明一窜嵌套的stages{…}, 并以顺序执行。需要指出的是,一个stage{…}必须有且只有一个steps{…}, 或者parallel{…} 或者stages{…}
看看下面这个顺序嵌套例子代码
pipeline {
agent none
stages {
stage...
pipeline 执行完毕后,您可能需要运行清理步骤或根据pipeline的结果执行一些操作。比如根据构建结果触发钉钉通知
Jenkinsfile (Declarative Pipeline)
pipeline {
agent any
stages {
stage('Test') {
steps {
sh 'echo "Fail!"; exit 1'
Jenkins为您提供了两种开发管道代码的方式:脚本式和声明式。脚本式流水线(也称为“传统”流水线)基于Groovy作为其特定于域的语言。而声明式流水线提供了简化且更友好的语法,并带有用...