Jenkins-Pipeline语法总结大全

在这里插入图片描述


这里写目录标题

  • pipeline的组成
    • 1、pipeline最简单结构
      • 1.1、pipeline
      • 1.2、stages
      • 1.3、stage
      • 1.4、steps
      • 1.5、agent
    • 2、post
    • 3、pipeline支持的命令
      • 3.1、environment
      • 3.2、tools
      • 3.3、input
      • 3.4、options
      • 3.5、parameters
      • 3.6、parallel
      • 3.7、triggers
      • 3.8、when

pipeline的组成

1、pipeline最简单结构

pipeline的必须部分有以下五个,少一个都不行都会报错。

1.1、pipeline

代表整条流水线,包含整条流水线的逻辑。

1.2、stages

流水线中多个stage的容器。stages部分至少包含一个stage。

1.3、stage

阶段,代表流水线的阶段。每个阶段必须有名称。。

1.4、steps

代表阶段中的一个或者多个具体步骤(step)的容器。steps部分至少一个步骤。

1.5、agent

指定流水线的执行节点(Jenkins agent)

参数:

  • any: 在任何可用的agent 上执行Pipeline或stage。例如:agent any
  • none: 当在pipeline块的顶层使用none时,将不会为整个Pipeline运行分配全局agent ,每个stage部分将需要包含其自己的agent部分。
  • label: 使用有label标签的agent,例如:agent
  • node: agent { node { label ‘labelName’ } },等同于 agent { label ‘labelName’ },但node允许其他选项(如customWorkspace)。
  • docker: 动态供应一个docker节点去执行pipeline或stage,docker还可以接受一个args,直接传递给docker run调用。

2、post

post部分包含的是在整个pipeline或阶段完成后一些附加的步骤。post部分是可选的,所以并不包含在pipeline最简结构中。但这并不代表它作用不大。根据pipeline或阶段的完成状态,post部分分成多种条件块,包括:

  • always:不论当前完成状态是什么都执行。
  • success:当前完成状态为成功时运行。
  • failure:当前完成状态为失败时执行。
  • unstable:当前完成状态为不稳定时执行。
  • changed:只要当前完成状态与上一次完成状态不同就执行。
  • fixed:上一次完成状态为失败或不稳定(unstable),当前完成状态为成功时执行。
  • aborted:当前执行结果是中止状态时(一般为人为中止)执行。
  • cleanup:清理条件块。不论当前完成状态是什么,在其他所有条件块执行完成后都执行
  • regression:上一次完成状态为成功,当前完成状态为失败、不稳定或中止(aborted)时执行。

3、pipeline支持的命令

3.1、environment

用户设置环境变量,可以定义在stage或者pipeline部分
定义Pipeline或stage运行时的环境变量
不是必须出现的指令
无参数
该environment指令指定一系列键值对,这些对值将被定义为所有步骤的环境变量或阶段特定步骤,具体取决于environment指令位于pipeline中的位置。

例如

pipeline {
    agent  {
        node{
            label 'docker_node'
            customWorkspace "myWorkspace"
        }
    }

    environment {
        hlw = 'hello world'
    }

3.2、tools

可定义在pipeline或stage部分。它会自动下载并安装我们指定的工具,并将其加入PATH变量中。如果agent none指定,则将其忽略。

pipeline {
    agent any
    tools {
        maven 'apache-maven-3.0.1' 
    }
    stages {
        stage('Example') {
            steps {
                sh 'mvn --version'
            }
        }
    }
}

3.3、input

3.4、options

options :该options指令允许在Pipeline本身内配置Pipeline专用选项。Pipeline提供了许多这些选项
不是必须出现的指令

常用选项

  • buildDiscarder: pipeline保持构建的最大个数。例如:options
  • disableConcurrentBuilds: 不允许并行执行Pipeline,可用于防止同时访问共享资源等。例如:options
  • skipDefaultCheckout: 默认跳过来自源代码控制的代码。例如:options
  • skipStagesAfterUnstable: 一旦构建状态进入了“Unstable”状态,就跳过此stage。例如:options
  • timeout: 设置Pipeline运行的超时时间。例如:options
  • retry: 失败后,重试整个Pipeline的次数。例如:options
  • timestamps: 预定义由Pipeline生成的所有控制台输出时间。例如:options
pipeline{
    agent {
        node{
            label 'docker_node'
            customWorkspace "pipelineWorkspace"
        }
    }
    
    options {
        timeout(time: 10,unit:"SECONDS")    //构建超过10s,就会超时
        buildDiscarder(logRotator(numToKeepStr:"2"))    //最多保留2个最新的构建
        retry(5)    //失败后尝试运行5}

3.5、parameters

parameters :定义pipeline 的专有参数列表
不是必须出现的指令

  • 支持数据类型:booleanParam, choice, credentials, file, text, password, run, string
    类似参数化构建的选项

代码举例

parameters {
    string(name: 'PERSON', defaultValue: 'Jenkins', description: '输入的文本参数')
    choice(name: 'CHOICE', choices: ['One', 'Two', 'Three'], description: 'Pick something')
}

代码举例

在这里插入图片描述

pipeline {
    agent any

    parameters {
        string(name: 'Version',defaultValue:'1.1.1',description: '版本号')
        text name: 'index_monitor',defaultValue: 'index_monitor',description: '综合平台首页数据监控'
        booleanParam(name: 'ifFlag',defaultValue: true, description: 'isFlag is True')
        choice name: 'env',choices: ["prod","test"], description: '环境'
    }
}

在这里插入图片描述

3.6、parallel

声明性Parallel的代码块中的可以嵌套多个stage,从而让多个stage任务并行执行。
注意:
一个stage有且只能有一个steps,stages或parallel
嵌套的stages本身不能包含其他parallel stage
但在其他方面的行为与stage相同
任何包含parallel的stage都不能包含agent或者tools

案例

pipeline {
  agent any
  stages {
    stage('s1') {
      steps {
        sh 'echo s1'
      }
    }
 
    stage('s2') {
      parallel {
        stage('parallel-1'){
          steps{
            echo "parallel-1"
          }
        }
        stage('parallel-2'){
          steps{
            echo "parallel-2"
          }
        }
      }
    }
 
    stage('s3') {
      steps {
        sh 'echo s3'
      }
    } 
  }
}

运行结果
在这里插入图片描述
案例

pipeline {
    agent any
    stages {
        stage('Non-Parallel Stage') {
            steps {
                echo 'This stage will be executed first.'
            }
        }
        stage('Parallel Stage') {
            when {
                branch 'master'
            }
            parallel {
                stage('Branch A') {
                    agent {
                        label "for-branch-a"
                    }
                    steps {
                        echo "On Branch A"
                    }
                }
                stage('Branch B') {
                    agent {
                        label "for-branch-b"
                    }
                    steps {
                        echo "On Branch B"
                    }
                }
            }
        }
    }
}

3.7、triggers

用于定义执行pipeline的触发器。• when:当满足when定义的条件时,阶段才执行。
triggers指令定义了Pipeline自动化触发的方式。对于与源代码集成的Pipeline,如GitHub或BitBucket,triggers可能不需要基于webhook的集成也已经存在。目前只有两个可用的触发器:cron和pollSCM。

  • cron: 接受一个cron风格的字符串来定义Pipeline触发的常规间隔,例如: triggers
  • pollSCM: 接受一个cron风格的字符串来定义Jenkins检查SCM源更改的常规间隔。如果存在新的更改,则Pipeline将被重新触发。例如:triggers

案例

// Declarative //
pipeline {
    agent any
    triggers {
        cron('H */4 * * 1-5')
      	'''
      	每15分钟构建一次:H/15 * * * * 或*/5 * * * *
				每天8点构建一次:H 8 * * *
				每天8点~17点,两小时构建一次:H 8-17/2 * * *
				周一到周五,8点~17点,两小时构建一次:H 8-17/2 * * 1-5
				每月1号、15号各构建一次,除12月:H H 1,15 1-11 *

				第1列分钟1~59
				第2列小时0~23
				第3列日1~31
				第4列月1~12
				第5列星期0~7(0和7表示星期日)
      	'''
    }
    stages {
        stage('Example') {
            steps {	
                echo 'Hello World'
            }
        }
    }
}

3.8、when

when指令允许Pipeline根据给定的条件确定是否执行该阶段。该when指令必须至少包含一个条件。如果when指令包含多个条件,则所有子条件必须为stage执行返回true。这与子条件嵌套在一个allOf条件中相同。

内置条件

  • branch: 当正在构建的分支与给出的分支模式匹配时执行,例如:when { branch ‘master’ }。请注意,这仅适用于多分支Pipeline。
  • environment: 当指定的环境变量设置为给定值时执行,例如: when
  • expression: 当指定的Groovy表达式求值为true时执行,例如: when { expression { return params.DEBUG_BUILD } }
  • not: 当嵌套条件为false时执行。必须包含一个条件。例如:when { not { branch ‘master’ } }
  • allOf: 当所有嵌套条件都为真时执行。必须至少包含一个条件。例如:when { allOf { - branch ‘master’; environment name: ‘DEPLOY_TO’, value: ‘production’ } }
  • anyOf: 当至少一个嵌套条件为真时执行。必须至少包含一个条件。例如:when { anyOf { branch ‘master’; branch ‘staging’ } }
pipeline {
    agent any
    stages {
        stage('Example Build') {
            steps {
                echo 'Hello World'
            }
        }
        stage('Example Deploy') {
            when {
                allOf {
                    branch 'production'
                    environment name: 'DEPLOY_TO', value: 'production'
                }
            }
            steps {
                echo 'Deploying'
            }
        }
    }
}


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/310313.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GPT-4与DALL·E 3:跨界融合,开启绘画与文本的新纪元

在人工智能的发展浪潮中,MidTool(https://www.aimidtool.com/)的GPT-4与DALLE 3的集成代表了一个跨越式的进步。这一集成不仅仅是技术的结合,更是艺术与文字的完美融合,它为创意产业带来了革命性的变革。本文将探讨GPT…

12.22 探探 数分 已HR面

岗位信息 1222 3.30PM 1面 40min 能感觉数据基建还不是很完善 因此 问了一些指标体系的问题还挺多 自我介绍能力考察1.说说你是怎么异常归因的以付费场景项目为例2.归因中如果遇到一个页面同时存在有3个实验在跑 无法归因出数据的异常是哪个改动造成的怎么办?3.讲…

抖捧AI实景自动直播,开启2024直播新篇章!

在如今互联网的时代,各个行业的实体商家都面临着新的挑战与机遇,而传统做线下经营的方式,已经逐渐被直播与短视频宣传所超越,但还有不少商家思维存在于传统的宣传方式上,也错失了很多的机会,今天就给大家介…

基于JavaWeb+BS架构+SpringBoot+Vue基于web的多媒体素材管理系统的设计和实现

基于JavaWebBS架构SpringBootVue基于web的多媒体素材管理系统的设计和实现 文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 文末获取源码 Lun文目录 1 绪 论 1 1.1选题背景与意义 1 1.1 研究背景 1 1.2 研究意义…

操作系统--虚拟内存--物理内存

虚拟内存地址: 出现的原因:单片机时代,cpu直接操作物理内存,每次只能有一个进程操作,如果多个 在 4GB 物理内存的机器上,申请 8G 内存会怎么样? 1、明确是32位机器,还是64位机器 32位&#xf…

api网关-kong

选型 api网关相关功能 服务的路由 动态路由负载均衡 服务发现 限流 熔断、降级 流量管理 黑白名单反爬策略 控制台:通过清晰的UI界面对网关集群进行各项配置。 集群管理:Goku网关节点是无状态的,配置信息自动同步,支持节点水…

照片动起来-yanderifier

🏡 个人主页:IT贫道-CSDN博客 🚩 私聊博主:私聊博主加WX好友,获取更多资料哦~ 🔔 博主个人B栈地址:豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录 图片动起来实现步骤 …

典型的无人机打击技术

无人机打击技术主要指的是用于中和、摧毁或干扰无人机(UAV)的各种技术手段。 这些技术随着无人机的广泛使用而迅速发展,特别是在军事和安全领域。下面是一些主要的无人机打击技术及其原理: 射频干扰(RF Jamming&#x…

开源C语言库Melon之日志模块

本文向大家介绍一个名为Melon的开源C语言库的日志模块。 简述Melon Melon是一个包含了开发中常用的各类组件的开源C语言库,支持Linux、MacOS、Windows系统,可用于服务器开发亦可用于嵌入式开发,无第三方软件依赖,安装简单&…

2023年人工智能的最新发展(下)

目录 1.MidJourney: 2.GAN: 3.Diffusion Model 4.DALLE、Disco Diffusion 5.Stable Diffusion 1.MidJourney: 2023年3月,一组中国小情侣的照片在网络上迅速走红。这组照片看起来普通,就像一对小情侣的合影,但实…

【Hudi数据湖】hudi集成hive同步元数据

摘要 Spark/Flink可以使用Hive的metastore,但是Hive无法通过Hive metastore中的Spark/Flink表直接查询数据。为了解决这个问题,可以配置使用Hive sync。在Spark/Flink操作表的时候,自动同步Hive的元数据。这样就可以通过Hive查询Hudi表的内容…

leetcode动态规划问题总结 Python

目录 一、基础理论 二、例题 1. 青蛙跳台阶 2. 解密数字 3. 最长不含重复字符的子字符串 4. 连续子数组的最大和 5. 最长递增子序列 6. 最长回文字符串 7. 机器人路径条数 8. 礼物的最大价值 一、基础理论 动态规划其实是一种空间换时间的基于历史数据的递推算法&…

8.2、5GMEC认识篇

MEC:多接入边缘计算(Multi-access Edge Computing),强调的是边缘侧的计算服务。 MEC最大的好处是就近访问业务:MEC是一个资源池,可以部署各种服务器,把需要就近访问的业务部署在MEC的服务器上&a…

400G-哪个形式因素?(QSFP-DD, OSFP, CFP8)

400G收发器形式因素的发展趋势: 随着新技术的出现,采用新的形式因素和特点并不是什么新鲜事。400G时代即将到来,就像之前的技术周期一样,400G市场将针对特定的网络应用提供不同的收发器形式的因素。 下一代收发器外形因子有三个共同属性&am…

快速排序-排序算法

算法思想 快速排序采用的仍然是分治的思想。 Step1.每次在无序的序列中选取一个基准数。 Step2.然后将大于和小于基准数的元素分别放置于基准数两边。(前面部分的元素均小于或等于基准数,后面部分均大于或等于基准数) Step3.然后采用分治法&…

【大数据】NiFi 中的处理器(二):PutDatabaseRecord

NiFi 中的处理器(二):PutDatabaseRecord 1.基本介绍2.属性配置3.连接关系4.应用场景 1.基本介绍 PutDatabaseRecord 处理器使用指定的 RecordReader 从传入的流文件中读取(可能是多个,说数组也成)记录。这…

仿蓝奏云网盘 /file/list SQL注入漏洞复现

0x01 产品简介 仿蓝奏网盘是一种类似于百度网盘的文件存储和共享解决方案。它为用户提供了一个便捷的平台,可以上传、存储和分享各种类型的文件,方便用户在不同设备之间进行文件传输和访问。 0x02 漏洞概述 仿蓝奏云网盘 /file/list接口处存在SQL注入漏洞,登录后台的攻击…

启英泰伦离线自然说:让语音交互更“顺口”

你是不是也有这样的烦恼?每次用语音控制家里的智能设备,总是要说那几个固定的词,感觉有点别扭。比如,每次都要说“打开空调”,不能换个说法吗? 现在,有了启英泰伦的离线自然说技术,…

Kafka之集群搭建

1. 为什么要使用kafka集群 单机服务下,Kafka已经具备了非常高的性能。TPS能够达到百万级别。但是,在实际工作中使用时,单机搭建的Kafka会有很大的局限性。 ​ 消息太多,需要分开保存。Kafka是面向海量消息设计的,一个T…

QT第1天

题目&#xff1a;点击按钮改变文字 需要增加一个count属性&#xff0c;并且只需要定义槽&#xff0c;信号函数已经内置好了 //widget.h#ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Wi…