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

持续交付-Jenkinsfile 语法

实现 Pipeline 功能的脚本语言叫做 Jenkinsfile,由 Groovy 语言实现。Jenkinsfile 一般是放在项目根目录,随项目一起受源代码管理软件控制,无需像创建"自由风格"项目一样,每次可能需要拷贝很多设置到新项目,提供了一些直接的好处:

  • Pipeline 上的代码审查/迭代
  • Pipeline 的审计跟踪
  • Pipeline 的唯一真实来源,可以由项目的多个成员查看和编辑
    Pipeline 支持:Declarative(在 Pipeline 2.5 中引入)和 Scripted Pipeline 两种格式。两者都支持建立 Pipeline,两者都可以用于在 Web UI 中定义一个流水线 Jenkinsfile,将 Jenkinsfile 文件创建并检查到源代码控制库中通常被认为是最佳做法。

Declared Pipeline

Declared Pipeline树

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

块 blocks{}

由大括号括起来的语句,如 Pipeline{},Section{},parameters{},script{}

章节(Sections)

章节中通常包含一个或多个指令或步骤。如 agent 、post、stages、steps

指令(Directives)

environment、options、parameters、triggers(触发)、stage、tools、when

节点(agent)

必须存在,agent 必须在 Pipeline 块内的顶层定义,但 stage 内是否使用是可选的
参数:any/none/label/node/docker/dockerfile
常用选项 label/cuetomWorkspace/reuseNode
示例:

agent { label 'my-label' }agent {node {label 'my-label'customWorkspace '/some/other/path'}
}agent {docker {image 'nginx:1.12.2'label 'my-label'args '-v /tmp:/tmp'}
}

构建后(post)

不是必须,用于 Pipeline 的最外层或者 stage{} 中,主要用于表达 Jenkins 完成构建动作之后需要做的事情。

示例:

pipeline {agent anystages {stage('Example'){steps {echo 'Hello world'}}}post {always {echo 'say goodbay'}}
}

阶段集(stages)

必须存在,包括顺序执行的一个或多个 stage 命令,在 Pipeline 内仅能使用一次,通常位于 agent/options 后面。

步骤(steps)

必须存在,steps 位于 stage 指令块内部,包括一个或多个 step。仅有一个 step 的情况下可以忽略关键字 step 及其{}。

环境(environment)

不是必须,environment 定义了一组全局的环境变量键值对,存在于 pipeline {} 或者 stage 指令内。执行特殊方法 credentials()可以获取 Jenkins 中预定义的凭证明文内容。

示例:

environment {CC='clang'}
environment {AN_ACCESS_KEY = credentials('my-prefined-secret-text')}
steps {sh 'printenv'}

选项(options)

不是必须,预定义 Pipeline 专有的配置信息,仅可定义一次

示例:

pipeline {agent anyoptions{timeout(time:1,unit: 'HOURS')}
}

参数(parameters)

不是必须, 定义参数化构建的参数可选参数, 参数类型 booleanParam,choice,file,text,password,run,string
示例:

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

触发器(rtiggers)

不是必须,定义 Pipeline 被自动触发的方式选项 cron、pollSCM、upstream

示例:

triggers {cron('0 8 * * 1-5')
}

Script Pipeline

Script Pipeline语句树

一个 Script Pipeline 可以划分成若干个 Stage,每个 Stage 代表一组操作,例如 Build,Test;Node 代表 Jenkins 节点,比如 Master, Slave 这样的节点;Step 是最基本的操作单元,在对应 Node 节点上执行的动作语句直接写在 node {} 中。

流程控制语句

如同传统的脚本语言一样,Script Pipeline 是从上至下顺序执行,可以使用 Groovy 表达式进行流程控制,如 if/else 语句通过逻辑条件判断来对流程进行控制:

node {stage('Example') {if (env.BRANCH_NAME == 'master') {echo 'I only execute on the master branch'} else {echo 'I execute elsewhere'}}
}

异常处理语句

Script Pipeline 脚本流程控制的另一种方式是异常处理机制。当任何一个步骤因各种原因而出现异常时,都必须在代码中使用 try/catch/finally 语句块进行异常捕获,并通过预先设定代码进行处理,保证脚本能够顺利执行:

stage('Error Handling') {node{echo "This is test demo for the error handling"try {echo "This is in the try block."sh 'exit 1'}catch (exc) {echo "Something failed, I'm in the catch block."}finally {echo "Finally, I'm in the finally block."}}
}

Jenkinsfile 中调用plugin功能

在 Jenkinsfile 中除了可以使用常规的逻辑、流程控制,还可以调用 Jenkins 的插件功能。下面用如下实例进行说明。

Email Extension插件

Email Extension 是 Jenkins 中的一个外部插件,用来发送邮件,从 Jenkins 的 Plugin Manager 中进行安装。在 Pipeline 中通过代码调用可以触发该插件的运行,实现发送邮件的功能。

基础配置

在安装好 Email Extension 插件之后,首先需要选择一个准备用来发送 Jenkins 通知邮件的邮箱,发件邮箱的具体参数要提前知晓(通常参数可以从邮箱的配置参数信息页面上查到);之后要在 Manage Jenkins -> Configure System 中将对应参数填写该插件的对应配置项中,必须配置的参数如下:

  • SMTP server:smtp 服务地址
  • SMTP port:smtp 端口号
  • Use SMTP Authentication:启用 smtp 安全校验
  • User Name:发件人用户名
  • Password:发件人密码
  • Default Recipients:默认收件人
    其他的参数可以根据自己的需要进行配置,Email Extension 配置参考截图如下:

Pipeline代码

pipeline{agent {label 'master'}stages{stage('发送邮件测试') {steps{echo 'Test Email'}}}post {always {emailext body: '$DEFAULT_CONTENT', recipientProviders: [[$class: 'RequesterRecipientProvider']], subject: '$DEFAULT_SUBJECT'}}
}

Declared Pipeline 的入门学习难度相对不高,这种类似我们在做自动化测试时所接触的关键字驱动模式,只要理解其定义好的关键词,按要求填充数据即可。
虽然这种方式入门容易,但灵活性欠缺。相比之下 script Pipeline 的好处就是灵活,好封装,易于大规模使用,但需要有一定的编程功底。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

相关文章:

持续交付-Jenkinsfile 语法

实现 Pipeline 功能的脚本语言叫做 Jenkinsfile,由 Groovy 语言实现。Jenkinsfile 一般是放在项目根目录,随项目一起受源代码管理软件控制,无需像创建"自由风格"项目一样,每次可能需要拷贝很多设置到新项目,…...

IDEA重新choose source

大概现状是这样:之前有个工程,依赖了别的模块基础包,但当时并没有依赖包的源码工程,因此,通过鼠标左键点进去,看到的是jar包里的class文件,注释什么的都去掉了的,不好看。后面有这个…...

解析虚拟文件系统的调用

Linux 可以支持多达数十种不同的文件系统。它们的实现各不相同,因此 Linux 内核向用户空间提供了虚拟文件系统这个统一的接口,来对文件系统进行操作。它提供了常见的文件系统对象模型,例如 inode、directory entry、mount 等,以及…...

佳能相机拍出来的dat文件怎么修复为正常视频

3-3 佳能相机是普通人用得最多的相机之一,也有一些专业机会用于比较重要的场景,比如婚庆、会议录像、家庭录像使用等。 但作为电子产品,经常会出现一些奇怪的故障,最严重的应该就是拍出来的东西打不开了。 本文案例是佳能相机拍…...

OAuth2.0双令牌

OAuth 2.0是一种基于令牌的身份验证和授权协议,它允许用户授权第三方应用程序访问他们的资源,而不必共享他们的凭据。 在OAuth 2.0中,通常会使用两种类型的令牌:访问令牌和刷新令牌。访问令牌是用于访问资源的令牌,可…...

Django(二、静态文件的配置、链接数据库MySQL)

文章目录 一、静态文件及相关配置1.以登录功能为例2.静态文件3.资源访问4.静态文件资源访问如何解决? 二、静态文件相关配置1. 如何配置静态文件配置?2.接口前缀3. 接口前缀动态匹配4. form表单请求方法补充form表单要注意的点 三、request对象方法reque…...

Linux 本地Yearning SQL审核平台远程访问

文章目录 前言1. Linux 部署Yearning2. 本地访问Yearning3. Linux 安装cpolar4. 配置Yearning公网访问地址5. 公网远程访问Yearning管理界面6. 固定Yearning公网地址 前言 Yearning 简单, 高效的MYSQL 审计平台 一款MYSQL SQL语句/查询审计工具,为DBA与开发人员使用…...

Leetcode—226.翻转二叉树【简单】

2023每日刷题(二十四) Leetcode—226.翻转二叉树 实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* …...

【阿里云】任务2-OSS对象存储教程(找我参加活动可获得京东卡奖励)

目录 前言说明第一步第二步第三步:开通并使用OSS传输加速三、清理第四步-提交作品第五步-提交记录到小程序 前言 本次任务是阿里云官方发出的,每个任务30软妹币,欢迎大家加入我的活动群,门槛很低,所有人都可以参加&…...

人工智能模型转ONNX 连接摄像头使用ONNX格式的模型进行推理

部署之后模型的运算基本上能快5倍。本地部署之后,联网都不需要,数据和隐私不像在网上那样容易泄露了。 模型部署的通用流程 各大厂商都有自己的推理工具。 训练的归训练,部署的归部署,人工智能也分训练端和部署端,每一…...

osgEarth之添加shp

目录 效果 代码 代码分析 加载模式 效果 代码 #include "stdafx.h" #include <osg/Notify> #include <osgGA/StateSetManipulator> #include <osgViewer/Viewer> #include <osgViewer/ViewerEventHandlers>#include <osgEarth/MapNo…...

Eolink Apikit 版本更新:「数据字典」功能上线、支持 MongoDB 数据库操作、金融行业私有化协议、GitLab 生成 API 文档...

&#x1f389; 新增 搭建自定义接口协议架构&#xff0c;支持快速适配金融行业各类型私有协议的导入、编辑和展示。 数据字典功能上线&#xff0c;支持以数据字典的形式管理参数枚举值&#xff1b; 数据库连接支持 MongoDB 数据库操作&#xff1b; 基于 Apikit 类型导入 API…...

GPT-4V:AI在医疗领域的应用

OpenAI最新发布的GPT-4V模型为ChatGPT增添了语音和图像功能&#xff0c;为用户提供了更多在日常生活中使用ChatGPT的方式。这次更新将为用户带来更加便捷、直观的交互体验&#xff0c;用户可以直接通过拍照上传图片&#xff0c;并提出相关问题。OpenAI的最终目标是构建一个安全…...

OpenCV 在ImShow窗体上选择感兴趣的区域

窗体上选择感兴趣ROI区域 在计算机视觉处理中, 通常是针对图像中的一个特定区域进行处理, 有时候这个特定区域需要人来选择, OpenCV 也提供了窗口选择ROI机制. 窗体支持两种选择ROI区域的方法, 一个是单选, 一个是多选, 操作方法如下: 单选: 通过鼠标在屏幕上选择区域, 然后通过…...

ubuntu 安装redis详细教程

下载redis安装包 链接如下&#xff1a; http://redis.io/download 本例版本为&#xff1a;redis-7.2.3.tar.gz 下载安装包到目录/opt下&#xff0c;路径可修改&#xff0c;本例为/opt wget https://github.com/redis/redis/archive/7.2.3.tar.gz 解压安装包&#xff0c;并…...

qframework 架构 (作者:凉鞋)使用笔记

一些准则&#xff1a; 根据VIEW->SYSTEM->MODEL的分层架构 初始架构&#xff1a; app. using FrameworkDesign;namespace ShootingEditor2D&#xff08;项目的命名空间&#xff09; {public class ShootingEditor2D &#xff08;游戏名称&#xff09;: Architecture&l…...

【JMeter】定时器分类以及场景介绍

1. 定时器分类 固定定时器 作用&#xff1a;请求之间设置等待时间应用场景&#xff1a;查询商品列表后&#xff0c;去查看列表商品详情页。针对商品列表数据量比较大的&#xff0c;响应时间会比较长&#xff0c;就需要设置等待时间然后去查看商详 2.定时器的作用域&#xff1…...

Spring Boot 请求/actuator/beans 无法访问 返回404

问题复现 在保证项目加入了spring-boot-starter-actuator依赖&#xff0c;并成功启动后。通过浏览器进行访问&#xff0c;返回如下图结果&#xff1a; 问题排查 1. 查看日志 从日志中可以看到基于路径’/actuator’下只暴露了一个端点 2. 访问http://localhost:8080/actua…...

AVD联网

AVD联网&#xff1a; 解决Android Studio模拟器无法联网_android studio模拟器没有网络-CSDN博客 挺好的&#xff0c;就是访问网站的时候只能用ip&#xff0c;而不能用域名。 AVD设置代理&#xff1a; android studio踩坑记 AVD模拟器代理设置_android studio avd 配置代理-…...

[Vue warn]: Missing required prop: “action“

控制台显示错误信息 vue.runtime.esm.js:4605 [Vue warn]: Missing required prop: "action" found in ---> <ElUpload> at packages/upload/src/index.vue <ElTableRow> <ElTableBody> <ElTable> at pack…...

BetterNCM Installer:为什么你的网易云音乐需要这个插件管理器?

BetterNCM Installer&#xff1a;为什么你的网易云音乐需要这个插件管理器&#xff1f; 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐功能单一而烦恼吗&#xff1f;…...

孤能子视角:OpenAI,再看强关系与弱关系

(在以下的与AI互动中&#xff0c;在EIS理论约束下&#xff0c;DeepSeek叫信兄&#xff0c;Kimi叫酷兄&#xff0c;我呢叫水兄。主要是观察关系场中AI角色的持续把握)(这篇太实&#xff0c;观点还挺刺眼的&#xff0c;不好说科幻&#xff0c;那仅供参考)我的问题:一般都玩强关系…...

AI教材写作新趋势:低查重AI工具,让教材生成更高效!

教材编写痛点与AI工具的解决方案 教材编写过程中&#xff0c;繁琐的格式要求让不少编者感到苦恼。比如&#xff0c;标题的字体大小该如何选择&#xff1f;参考文献应该遵循GB/T7714还是特定出版标准&#xff1f;习题的排版方式是单栏还是双栏&#xff1f;这些不同的要求让人眼…...

nli-MiniLM2-L6-H768保姆级教程:NLI服务接入企业统一认证(LDAP/OAuth2)方案

nli-MiniLM2-L6-H768保姆级教程&#xff1a;NLI服务接入企业统一认证&#xff08;LDAP/OAuth2&#xff09;方案 1. 引言 nli-MiniLM2-L6-H768是一个专为自然语言推理(NLI)与零样本分类设计的轻量级交叉编码器(Cross-Encoder)模型。它具备以下核心优势&#xff1a; 精度高&am…...

C++编写MCP网关到底该选Boost.Asio还是Seastar?:3轮压测、5类协议场景、9项核心指标横向对比报告

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;C编写高吞吐量MCP网关对比评测报告 MCP&#xff08;Microservice Communication Protocol&#xff09;网关作为现代云原生架构中服务间通信的关键中间件&#xff0c;其性能直接决定系统整体吞吐能力与端…...

嵌入式机器人开发实战指南:RoboMaster C型开发板20个核心示例深度解析

嵌入式机器人开发实战指南&#xff1a;RoboMaster C型开发板20个核心示例深度解析 【免费下载链接】Development-Board-C-Examples 项目地址: https://gitcode.com/gh_mirrors/de/Development-Board-C-Examples 面对机器人嵌入式开发的复杂挑战&#xff0c;你是否曾困惑…...

主域控突然宕机别慌!手把手教你用ntdsutil命令让辅域控快速顶上(含DNS清理与GC配置)

主域控宕机应急指南&#xff1a;用ntdsutil实现无缝故障转移与全局编录配置 当企业Active Directory主域控制器突然宕机时&#xff0c;整个组织的身份验证、策略应用和资源访问都可能陷入瘫痪。这种紧急状况下&#xff0c;快速将辅域控制器提升为主域控制器并恢复服务&#xff…...

如何快速掌握PLIP:蛋白质-配体相互作用分析工具的完整实战指南

如何快速掌握PLIP&#xff1a;蛋白质-配体相互作用分析工具的完整实战指南 【免费下载链接】plip Protein-Ligand Interaction Profiler - Analyze and visualize non-covalent protein-ligand interactions in PDB files according to &#x1f4dd; Schake, Bolz, et al. (20…...

如何轻松提取游戏资源?QuickBMS工具终极指南

如何轻松提取游戏资源&#xff1f;QuickBMS工具终极指南 【免费下载链接】QuickBMS QuickBMS by aluigi - Github Mirror 项目地址: https://gitcode.com/gh_mirrors/qui/QuickBMS 你是否曾经想要修改游戏文件、提取游戏资源或进行游戏本地化&#xff0c;却被复杂的文件…...

【RAG】【vector_stores096】TiDB向量存储示例分析

1. 案例目标本案例展示了如何使用TiDB Cloud的向量搜索功能与LlamaIndex集成&#xff0c;实现高效的文档检索和语义搜索。TiDB Serverless将内置的向量搜索集成到MySQL生态系统中&#xff0c;使用户无需额外的数据库或技术栈即可开发AI应用程序。2. 技术栈与核心依赖LlamaIndex…...