Jenkins之pipeline语法——2023.07

news/2024/4/29 5:19:06/文章来源:https://blog.csdn.net/weixin_64124795/article/details/131106663

文章目录

    • 一、概述
    • 二、Pipeline任务
      • 1、Pipeline Script 运行任务
      • 2、Pipeline script from SCM 通过代码库运行任务
      • 3、在 job(任务)中配置Pipeline script from SCM
    • 三、Jenkinsfile 语法
      • 1、脚本式语法
      • 2、声明式语法
        • 1. agent :节点
        • 2. tool
        • 3. environment
        • 2. stages :阶段集
        • 3. steps :步骤
        • 4. post :构建后的操作
        • 5. parameters :参数
        • 6. triggers :触发器

一、概述

Pipeline,简而言之,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化;

Pipeline 是Jenkins 2.X 的最核心的特性,帮助Jenkins 实现从CI 到 CD 与 DevOps的转变。

Pipeline 是一组插件,让jenkins 可以实现持续交付管道的落地和实施。持续交付管道是将软件从版本控制阶段到交付给用户/客户的完整过程的自动化表现。

二、Pipeline任务

Pipeline定义有两种方式:
一种是Pipeline Script ,是直接把脚本内容写到脚本对话框中
另一种是 Pipeline script from SCM (Source Control Management–源代码控制管理),即从gitlab/github/git上获得pipeline脚本–JenkisFile。

1、Pipeline Script 运行任务

pipeline{agent anystages{stage("first"){steps {echo 'hello world'}}stage("run test"){steps {echo 'run test'}}}post{always{echo 'always say goodbay'}}
}

脚本中定义了2个阶段(stage):first和run test;post是jenkins完成构建动作之后需要做的事情。
运行任务,可以看到分为3个部分,如下图所示:
在这里插入图片描述

2、Pipeline script from SCM 通过代码库运行任务

将pipeline代码(Jenkinsfile)保存到代码库中,然后通过指定代码位置(脚本位置)的方式来运行pipeline任务。

创建Jenkinsfile,由Groovy语言实现。一般是存放在项目根目录,随项目一起受源代码管理软件控制。
在这里插入图片描述
Jenkinsfile :创建在根目录
脚本的第二stage 是执行pytestzwf文件下的test_json.py脚本
将项目提交到代码库。

3、在 job(任务)中配置Pipeline script from SCM

在这里插入图片描述
在这里插入图片描述
运行任务,查看结果:
在这里插入图片描述

三、Jenkinsfile 语法

Jenkinsfile 支持两种语法形式:

Declarative pipeline – 在pipeline v2.5 之后引入,结构化方式,比较简单,容易上手。这种类似于我们在做自动化测试时所接触的关键字驱动模式,只要理解其定义好的关键词,按要求填充数据即可。入门容易,但是灵活性欠缺。

Scripted pipeline – 基于grjoovy的语法,相较于Declarative,扩展性比较高,好封装,但是有些难度,需要一定的编程工具。

1、脚本式语法

使用Groovy语法实现pipeline,脚本式语法比较灵活和方便扩展,但是需要熟悉groovy语法。

node{stage("编译打包"){// groovy语法try{}catch(err){// 异常处理代码}}stage("部署"){}
}

2、声明式语法

def getversion(){def version = '1.0.0'return version;
}
pipeline{agent anytools{maven 'MAVEN_HOME'}options {}environment{{}parameters {}triggers{}stages {stage('编译打包') {environment {DEBUG_FLAGS = '-g'}echo '编译打包'}stage('部署') {steps {echo '部署'}}}post {always {}success {}failure{}}
}

必须包含在固定格式Pipeline{} 块内,每个声明语句必须独立一行,行尾无需使用分号。
块 blocks{} 只能包含章节(Sections),指令(Directves),步骤(Steps) 或 赋值语句。

Jenkins pipeline是基于Groovy语言实现的DSL,用于描述流水线如何进行,包括编译、打包、部署、测试等等步骤

1. agent :节点

必须存在,agent必须在pipeline块内的顶层定义
agent 指定了整个流水线或特定的阶段, 会在Jenkins环境中执行的位置(master节点或其它从节点运行)。可以在 pipeline 块的顶层被定义, 也可以在 stage 内定义。
any
在任何可用的代理上执行流水线或阶段。例如: agent any

none
当在 pipeline 块的顶部没有全局代理, 该参数将会被分配到整个流水线的运行中并且每个 stage 部分都需要包含他自己的 agent 部分。比如: agent none

label
在提供了标签的 Jenkins 环境中可用的代理上执行流水线或阶段。 例如: agent { label ‘my-defined-label’ }

node
agent { node { label ‘labelName’ } } 和 agent { label ‘labelName’ } 一样, 但是 node 允许额外的选项 (比如 customWorkspace )。

agent anyagent { label 'my-master'}
agent{node{label "myslave"customWorkspace "myworkspace"}
}

2. tool

Global Tool Configuration(全局工具配置)中配置的工具, tools指令能帮助我们自动下载并安装所指定的构建工具,并将其加入 PATH 变量中。这样,我们就可以在sh步骤里直接使用了。但在agent none的情况下不会生效。
tools指令默认支持3种工具:JDK、Maven、Gradle。通过安装插件,tools 指令还可以支持更多的工具。
tools {
git ‘Default’
jdk ‘JAVA_HOME’
maven ‘MAVEN_HOME’
}

3. environment

设置环境变量,可在在 pipeline中 或 stage配置

在 pipeline 中定义 environment, 表示 pipeline 全局使用的环境变量
在 stage 中定义 environment, 表示当前 stage 的环境变量

有三种引用方式:
${env.BUILD_NUMBER} 方式一,推荐使用
$env.BUILD_NUMBER 方式二,
${BUILD_NUMBER} 方式三,不推荐使用

内置的环境变量:

使用环境变量
Jenkins 流水线通过全局变量 env 提供环境变量,它在 Jenkinsfile 文件的任何地方都可以使用。Jenkins 流水线中可访问的完整的环境变量列表记录在 ``${YOUR_JENKINS_URL}/pipeline-syntax/globals#env``,并且包括:BUILD_ID
当前构建的 ID,与 Jenkins 版本 1.597+ 中创建的构建号 BUILD_NUMBER 是完全相同的。BUILD_NUMBER
当前构建号,比如 “153”。BUILD_TAG
字符串 ``jenkins-${JOB_NAME}-${BUILD_NUMBER}``。可以放到源代码、jar 等文件中便于识别。BUILD_URL
可以定位此次构建结果的 URL(比如 http://buildserver/jenkins/job/MyJobName/17/ )EXECUTOR_NUMBER
用于识别执行当前构建的执行者的唯一编号(在同一台机器的所有执行者中)。这个就是你在“构建执行状态”中看到的编号,只不过编号从 0 开始,而不是 1。JAVA_HOME
如果你的任务配置了使用特定的一个 JDK,那么这个变量就被设置为此 JDK 的 JAVA_HOME。当设置了此变量时,PATH 也将包括 JAVA_HOME 的 bin 子目录。JENKINS_URL
Jenkins 服务器的完整 URL,比如 https://example.com:port/jenkins/ (注意:只有在“系统设置”中设置了 Jenkins URL 才可用)。JOB_NAME
本次构建的项目名称,如 “foo” 或 “foo/bar”。NODE_NAME
运行本次构建的节点名称。对于 master 节点则为 “master”。WORKSPACE
workspace 的绝对路径。

全局变量可以在搭建好的jenkins服务上查看,访问地址:http://jenkins访问地址/pipeline-syntax/globals#env

2. stages :阶段集

必须存在,包含顺序执行的一个或者多个stage命令
在pipeline内仅能使用一次
需要定义stage的名字

3. steps :步骤

必须存在
steps位于stage指令块内部,包含一个或者多个step

stages{stage("stage name"){steps{echo "this is a step"}}
}

4. post :构建后的操作

非必须
always:无论pipeline运行的完成的状态如何都会运行
success:仅当当前pipeline具有 成功 状态时才运行
failure: 仅当当前pipeline 具有 失败 状态时才运行
当然还有其他选项,这里不再做扩展介绍;

5. parameters :参数

非必须
参数化构建的参数设置,参数类型有booleanParam、choice(选择)、file、text、string 等

parameters{string( name :'name',defaultValue:'beauty',description:'姓名是')
}

等同于如下设置:
在这里插入图片描述
构建时效果如下:
在这里插入图片描述

6. triggers :触发器

非必须
定义了pipeline自动化触发的方式
cron:接受一个cron风格的字符串来定义pipeline触发的常规间隔
pollSCM:接受一个cron风格的字符串来定义jenkins检查SCM源更改的常规间隔;如果存在新的更改,则pipeline将被重新触发

triggers{cron('*/1 * * * *')
}

每隔一分钟执行一次

triggers{pollSCM('*/1 * * * *')
}

每隔一分钟监控SCM源,更改即触发
在这里插入图片描述

参考文章:
jenkins-Pipeline 教程
pipeline教程

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

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

相关文章

ATTCK(六)之ATTCK子项目atomicredteam测试环境安装与使用

ATT&CK子项目atomicredteam测试环境安装与使用 Atomicredteam的主站点为https://atomicredteam.io/,是一个攻击测试库,每个安全团队都可以执行这些测试来测试他们的防御控件。测试是有重点的,几乎没有依赖关系,并且以结构化格…

C++动态库使用

个人博客地址: https://cxx001.gitee.io 前言 Windows与Linux下面的动态链接库区别 1. 文件后缀不同 Linux动态库的后缀是 .so 文件,而window则是 .dll 文件。 2. 文件格式不同 (a)Linux下是ELF格式,即Executable and Linkab…

CANDENCE :简单贴装器件封装绘制

紧接candence:常见表贴焊盘绘制举例 简单贴装器件封装绘制 以0603封装电容为例,绘制其封装,这里会用到前面绘制的电容的焊盘。 1、打开PCB editor 软件工具 2、新建一个PACKGE symbol 文件,设置好路径和名称。点击ok确认 3、设置画布尺寸、原点位置、…

Uniapp开发的开源盲盒系统源码

最近比较火的盲盒系统,该项目是基于uniapp开发的盲盒项目,有需要的朋友可以联系我,运营级的项目,本次开源的是uniapp前端模板,选用技术为JAVA,采用框架:spring bootmybatisvue开发。 通过node安…

行为型模式-策略模式(一)

今天就说一说设计模式中的策略模式,从名字来讲,意思就是,对应不同的情况,就有一种解决问题的办法,不同的情况,就有不同的应对方法,这就是策略模式,非常的智能化。 也可以参考菜鸟 …

【Git原理与使用】-- 远程操作

目录​​​​​​​ 理解分布式版本控制系统 远程仓库 新建远程仓库 lssue 与 Pull Request模板文件 知识铺垫 lssue 模板文件 Pull Request模板文件 克隆远程仓库 使用 HTTPS 方式 使用 SSH 方式 第一步:创建SSH Key 向远程仓库推送 过程梳理 实操 …

【SLAM学习】获取IMU和雷达消息并发布

本文主要记录如何将rosbag的消息进行获取并进行发布以及后续处理。 测试数据集: 链接: https://pan.baidu.com/s/1DthWE45V5Zhq7UUrfTt_CQ 提取码: mxvn 查看数据集bag包里面都有那些话题: rosbag info indoor_lab_RS.bag 可以看到包含了两个话题…

『手撕 Mybatis 源码』09 - MyBatis 插件

MyBatis插件 概述 问题:什么是Mybatis插件?有什么作用? Mybatis插件本质上来说就是一个拦截器,它体现了 JDK 动态代理和责任链设计模式的综合运用 Mybatis 中所允许拦截的方法如下 Executor 【SQL执行器】【update&#xff…

Docker服务编排之Docker Compose的使用

Docker服务编排 概念:按照一定的业务规则批量的管理容器 微服务架构的应用系统中一般包含很多微服务,一个微服务中又包含很多的实例,每个微服务都要手动管理,维护的工作量很大。 拉去镜像,创建多个容器,分…

【Vue3】学习笔记-自定义hook函数

概念 什么是hook? 本质是一个函数,把setup函数中使用的Composition API进行了封装。 类似于vue2.x中的mixin。(但是mixins会组件的配置项覆盖。vue3使用了自定义hooks替代mixnins,hooks本质上是函数,引入调用。) 自定义hook的优势: 复用代…

【密码学基础】半/全同态加密算法基础学习笔记

文章目录 1 半同态加密Pailliar加法同态加密Paillier加解密过程Paillier的同态性Paillier的安全性 El Gamal乘法同态加密RSA乘法同态加密 2 全同态加密BFV全同态加密BFV的编码方式BFV加解密过程BFV的安全性BFV的同态性自举Bootstrapping 3 同态加密应用场景场景1:安…

0基础学习VR全景平台篇 第54篇: 高级功能-皮肤

功能位置示意 一、本功能将用在哪里? 皮肤功能,摆脱传统VR全景展示样式,自行选择场景与全景分组的界面模板,从而与不同的应用行业风格相互适应,达到最贴切的展示效果。 是在各种风格的VR全景作品中,最快实…

ubuntu安装MobaXterm和WPS

文章目录 ubuntu安装MobaXtermi386 架构wine操作步骤 ubuntu安装WPS操作步骤WPS版本知识补充 ubuntu安装MobaXterm i386 架构 sudo dpkg --add-architecture i386 是一个Linux系统中的命令,用于添加一个新的架构(architecture)支持到当前系统…

netwox构造免费ARP数据包【网络工程】(保姆级图文)

目录 构造免费的 ARP 数据包。1) 构造免费的 ARP 数据包2) 使用 Wireshark 进行抓包 总结 欢迎关注 『网络工程专业』 系列,持续更新中 欢迎关注 『网络工程专业』 系列,持续更新中 温馨提示:对虚拟机做任何设置,建议都要先快照备…

IDEA中集成zookeeper的插件

IDEA中集成zookeeper的插件 一、IDEA中集成插件 搜索插件并安装: 安装完成,重启IDEA 配置zk集群 连接成功

【PortAudio】PortAudio 音频处理库Demo

1. 介绍 PortAudio是一个免费、跨平台、开源的音频I/O库。看到I/O可能就想到了文件,但是PortAudio操作的I/O不是文件,而是音频设备。它能够简化C/C的音频程序的设计实现,能够运行在Windows、Macintosh OS X和UNIX之上(Linux的各种…

从零开始 Spring Boot 57:JPA中的一对多关系

从零开始 Spring Boot 57:JPA中的一对多关系 图源:简书 (jianshu.com) 在上篇文章中我们介绍了如何在 JPA 中实现实体的一对一关系,在关系型数据库设计中,除了一对一关系,还存在一对多关系。本篇文章介绍如何在 JPA 中…

【Python】NLP参数控制模板

前言 学过AI的都知道训练一个模型需要调整很多参数,为了有效的管理这些参数、不至于让代码的参数写的乱七八糟,有必要写一套控制参数的模板。 argparser argparser是python当中的参数解析器,在NLP当中主要是用来接受和使用参数的。一个使用它…

QT学习笔记:TCP客户端的实现

QT一般用来做客户端&#xff0c;我这里就简单讲一下怎么开发基于QT的TCP客户端。 1、用QtCreator创建项目 2、界面 3、.pro文件添加network QT core gui network 4、mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include &l…

SpringBoot的缓存管理

缓存是分布式系统中的重要组件&#xff0c;主要解决数据库数据的高并发访问问题。在实际开发中&#xff0c;尤其是用户 访问量较大的网站&#xff0c;为了提高服务器访问性能、减少数据库的访问压力、提高用户体验&#xff0c;使用缓存显得 尤为重要。Spring Boot对缓存提供了良…