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

Jenkins-pipeline Jenkinsfile说明

一. 简介:

  Jenkinsfile 是一个文本文件,通常保存在项目的源代码仓库中,用于定义 Jenkins Pipeline 的行为。使用 Jenkinsfile 可以使 CI/CD 流程版本化,并且易于共享和审核。

二. 关于jenkinsfile:

  jenkins的pipeline目前支持两种语法: Declarative(在Pipeline 2.5中引入)和Scripted Pipeline。两者都支持建立连续输送Pipeline。两者都可以用于在Web UI或者a中定义一个流水线Jenkinsfile。 

    从检索的资料来看,Declarative Pipeline 是后续Open Blue Ocean所支持的类型。相对而言,Declarative Pipeline比较简单,Declarative Pipeline中,也是可以内嵌Scripted Pipeline代码的。
  为与BlueOcean脚本编辑器兼容,通常建议使用Declarative Pipeline的方式进行编写,从jenkins社区的动向来看,很明显这种语法结构也会是未来的趋势。
    https://stackoverflow.com/questions/43484979/jenkins-scripted-pipeline-or-declarative-pipeline
    http://jenkins-ci.361315.n4.nabble.com/Declarative-pipelines-vs-scripted-td4891792.html

a). declarative pipeline方式:pipeline {agent any                     #没有agent指令,声明Pipeline无效,不能做任何工作stages {                      stage('Build') {          steps {               echo 'Building..'}}.................}
} b). scripts pipeline方式:
node {                          #没有node Pipeline不能做任何工作stage('Build') {echo 'Building....'}.................}
}

二. pipeline流程: 

        一个标准的pipeline项目,应当包含最基本的构建、测试、部署三个阶段(对应3个stage)。

a).  构建(build):  

       通常情况下,一个jenkins项目中的task是从构建(build)开始的。 在pipeline中,这个阶段是编译源码打包的过程。Jenkinsfile不是为了替换现有的编译工具(如GNU/Make,Maven,Gradle,etc,but等)。而是作为一个结合项目的开发生命周期的多个阶段(建设,测试,部署等)一起的联合胶水。如通过sh下的make指令:

pipeline {agent anystages {stage('Build') {steps {sh 'make' archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true }}}
}#sh: 调用make命令,只有在命令返回零退出代码时才会继续。任何非零退出代码为失败状态
#archiveArtifacts:捕获包含匹配(**/target/*.jar)的文件,并将它们保存到Jenkins主文件以供以后检索(只能用于基本报告和文件归档)。

b).  测试(test):

    运行自动化测试是任何成功的连续传送过程的重要组成部分。因此,Jenkins有许多插件提供的测试记录,报告和可视化设备 。当有测试失败时,Jenkins可以在Web UI中记录报告和可视化的故障。下面的示例使用junit由JUnit plugin.提供的

steps:

pipeline {agent anystages {stage('Test') {steps {/* `make check` returns non-zero on test failures,* using `true` to allow the Pipeline to continue nonetheless*/sh 'make check || true' junit '**/target/*.xml' }}}
}#sh || true : 确保sh能够返回正确退出代码,从而使该junit步骤有机会捕获和处理测试报告。
#junit :   捕获并关联与匹配(**/target/*.xml) 的JUnit XML文件

c).  部署(deploy): 

      部署环节相对来说可能比较麻烦。 不同的team(公司环境下,规范化的重要性就凸显了)可能会有不同的方式。通常情况下,进入部署阶段,意味着构建和测试阶段是成功了的,否则,应该控制jenkins退出。

pipeline {agent anystages {stage('Deploy') {when {expression {currentBuild.result == null || currentBuild.result == 'SUCCESS' }}steps {sh 'make publish'}}}
}#currentBuild.result变量允许Pipeline确定是否有任何测试失败。在这种情况下,值将是UNSTABLE的

d). 变量引用: 

    Pipeline使用与Groovy相同的规则, 进行变量引用。

   1 .  自带全局变量:

      jenkins会通过自身或插件,自动定义一些全局变量env(可以通过自己安装的jenkins查看: http://localhost:8080/job/jobname/pipeline-syntax/globals),可以用于整个构建环境的任何步骤。引用方式如;

pipeline {agent anystages {stage('Example') {steps {echo "Running ${env.BUILD_ID} on ${env.JENKINS_URL}"}}}
}

2. 自定义环境变量:

     Declarative Pipeline支持environment变量设置指令,scripts pipeline不支持,需要通过withEnv步骤(可参考官网):

pipeline {agent anyenvironment { CC = 'clang'}stages {stage('Example') {environment { DEBUG_FLAGS = '-g'}steps {sh 'printenv'}}}
}# environment: 在pipeline块中使用的environment会在Pipeline中的所有步骤中生效。
# 在一个stage中定义environment,只会在当前的stage中生效

e). 参数:

     Declarative Pipeline支持开箱即用的参数,允许Pipeline在运行时通过parameters指令接受用户指定的参数。使用script Pipeline配置参数是通过properties步骤完成的,可以在代码段生成器中找到(说明参考官网)。如果使用“使用构建参数”选项来配置Pipeline以接受参数,那么这些参数可作为params 变量的成员访问(如: 定义一个名为“Greeting”的String参数已经在配置中 Jenkinsfile,它可以通过${params.Greeting}以下方式访问)。

pipeline {agent anyparameters {string(name: 'Greeting', defaultValue: 'Hello', description: 'How should I greet the world?')}stages {stage('Example') {steps {echo "${params.Greeting} World!"}}}
}

pipeline状态处理(运行结束时的操作);

      在一个项目运行时, 声明不同的“post conditions” (目前支持:alwaysunstablesuccessfailure, 和changed ),根据不同的处理状态,做不同的操作。

pipeline {agent anystages {stage('Test') {steps {sh 'make check'}}}post {always {junit '**/target/*.xml'}failure {mail to: team@example.com, subject: 'The Pipeline failed :('}}
}#always:无论Pipeline运行的完成状态如何。
#changed:当前Pipeline运行的状态与先前完成的Pipeline的状态不同时。
#failure:当前Pipeline处于“失败”状态时。
#success:当前Pipeline具有“成功”状态时
#unstable:当前Pipeline具有“不稳定”状态,如由测试失败,代码违例等引起。
#aborted:当前Pipeline处于“中止”状态时,通常是由于Pipeline被手动中止。

f). 使用多个代理(agent):

       通常情况下,一个pipeline工作中,选择在同一个agent/node中执行。但也有一些特殊的情况。如在不同的系统环境下,进行test验证。我们可以通过label进行打标签,在jenkins中指定不同的agent执行相应的工作:

pipeline {agent nonestages {stage('Build') {agent anysteps {checkout scmsh 'make'stash includes: '**/target/*.jar', name: 'app' }}stage('Test on Linux') {agent { label 'linux'}steps {unstash 'app' sh 'make check'}post {always {junit '**/target/*.xml'}}}stage('Test on Windows') {agent {label 'windows'}steps {unstash 'app'bat 'make check' }post {always {junit '**/target/*.xml'}}}}
}
​​​​​​​

相关文章:

Jenkins-pipeline Jenkinsfile说明

一. 简介: Jenkinsfile 是一个文本文件,通常保存在项目的源代码仓库中,用于定义 Jenkins Pipeline 的行为。使用 Jenkinsfile 可以使 CI/CD 流程版本化,并且易于共享和审核。 二. 关于jenkinsfile: jenkins的pipeline…...

vue3中为什么引入setup,引入setup是为了解决什么问题,setup的执行时机是什么?返回值是什么

在 Vue 3 中,引入 setup 函数是为了提供一种更加简洁、灵活、逻辑分离和可维护的方式来组织组件的逻辑。setup 使得 Vue 3 在构建应用时,能够更加有效地支持组合式 API(Composition API),解决了 Vue 2 中一些组件逻辑组…...

Ubuntu 安装 docker 配置环境及其常用命令

Docker 安装与配置指南 本文介绍如何在 Ubuntu 系统上安装 Docker,解决权限问题,配置 Docker Compose,代理端口转发,容器内部代理问题等并进行相关的优化设置。参考官方文档:Docker 官方安装指南 一、安装 Docker 1…...

自动化01

测试用例的万能公式:功能测试界面测试性能测试易用性测试安全性测试兼容性测试 自动化的主要目的就是用来进行回归测试 新产品--第一个版本 (具备丰富的功能),将产品的整体进行测试,人工创造一个自动化测试用例,在n个版本的时候…...

音频入门(二):音频数据增强

本文介绍了一些常见的音频数据增强方法,并给出了代码实现。 目录 一、简介 二、代码 1. 安装必要的库 2. 代码 3. 各函数的介绍 4. 使用方法 参考: 一、简介 音频数据增强是机器学习和深度学习领域中用于改善模型性能和泛化能力的技术。 使用数据…...

MySQL管理事务处理

目录 1、事务处理是什么 2、控制事务处理 (1)事务的开始和结束 (2)回滚事务 (3)使用COMMIT (4)使用保留点 (5)结合存储过程的完整事务例子 3、小结 …...

MySQL数值型函数详解

简介 本文主要讲解MySQL数值型函数,包括:ROUND、RAND、ABS、MOD、TRUNCATE、CEIL、CEILING、FLOOR、POW、POWER、SQRT、LOG、LOG2、LOG10、SIGN、PI。 本文所有示例中,双横杠左边为执行的SQL语句,右边为执行语句的返回值。 ROU…...

54.DataGrid数据框图 C#例子 WPF例子

首先是绑定一个属性&#xff0c;属性名称无所谓。到时候看属性设置的啥&#xff0c;可能要改。 <DataGrid ItemsSource"{Binding Index_instance}"/> 然后创建INotifyPropertyChanged的类&#xff0c;并把相关固定的代码粘贴上去。 然后把这个目录类建好&am…...

总结6..

背包问题的解决过程 在解决问题之前&#xff0c;为描述方便&#xff0c;首先定义一些变量&#xff1a;Vi表示第 i 个物品的价值&#xff0c;Wi表示第 i 个物品的体积&#xff0c;定义V(i,j)&#xff1a;当前背包容量 j&#xff0c;前 i 个物品最佳组合对应的价值&#xff0c;同…...

复位信号的同步与释放(同步复位、异步复位、异步复位同步释放)

文章目录 背景前言一、复位信号的同步与释放1.1 同步复位1.1.1 综述1.1.2 优缺点 1.2 recovery time和removal time1.3 异步复位1.3.1 综述1.3.2 优缺点 1.4 同步复位 与 异步复位1.5 异步复位、同步释放1.5.1 总述1.5.2 机理1.5.3 复位网络 二、思考与补充2.1 复…...

Gartner发布2025年网络治理、风险与合规战略路线图

新型网络风险和合规义务&#xff0c;日益成为网络治理、风险与合规实践面临的问题。安全和风险管理领导者可以参考本文&#xff0c;实现从被动、专注于合规的方法到主动、进一步自动化方法的转型。 主要发现 不断变化的监管环境和不断扩大的攻击面&#xff0c;使企业机构难以实…...

基于STM32的智能空气质量监测与净化系统设计

目录 引言系统设计 硬件设计软件设计 系统功能模块 空气质量检测模块自动净化模块数据显示与用户交互模块远程监控与数据上传模块 控制算法 空气质量检测与判断算法净化设备控制算法数据记录与远程反馈算法 代码实现 空气质量检测与显示代码自动净化与调节代码数据上传与远程控…...

人工智能之数学基础:线性代数中的线性相关和线性无关

本文重点 在线性代数的广阔领域中,线性相关与线性无关是两个核心概念,它们对于理解向量空间、矩阵运算、线性方程组以及人工智能等问题具有至关重要的作用。 定义与直观理解 当存在一组不全为0的数x1,x2,...,xn使得上式成立的时候,那么此时我们可以说向量组a1,a2...,an…...

08 工欲善其事必先利其器—常用类

1 字符串相关 1.1 String 所属包&#xff1a;java.lang 代表不可变的字符序列 注意&#xff1a;Java中&#xff0c;String是一个final类 1&#xff09;创建字符串方式 String a "hello"; // 开辟内存空间 String b new String("hello"); String d…...

Redis实战-初识Redis

初识Redis 1、Redis简介2、 Redis数据结构简介3、 Redis命令3.1 字符串3.2 列表3.3 集合3.4 散列3.5 有序集合3.6 发布与订阅3.7 其他命令3.7.1 排序3.7.2 过期时间 如有侵权&#xff0c;请联系&#xff5e; 如有错误&#xff0c;也欢迎批评指正&#xff5e; 本篇文章大部分是来…...

spring boot中实现手动分页

手动分页 UserMapper.xml <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace"cn.m…...

【优选算法】5----有效三角形个数

又是一篇算法题&#xff0c;今天早上刚做的热乎的~ 其实我是想写博客但不知道写些什么&#xff08;就水一下啦&#xff09; -------------------------------------begin----------------------------------------- 题目解析: 这道题的题目算是最近几道算法题里面题目最短的&a…...

C++打字模拟

改进于 文宇炽筱_潜水 c版的打字效果_c自动打字-CSDN博客https://blog.csdn.net/2401_84159494/article/details/141023898?ops_request_misc%257B%2522request%255Fid%2522%253A%25227f97863ddc9d1b2ae9526f45765b1744%2522%252C%2522scm%2522%253A%252220140713.1301023…...

最新版pycharm如何配置conda环境

首先在conda prompt里创建虚拟环境&#xff0c;比如 conda create --prefix E:/projects/myenv python3.8然后激活 conda activate E:/projects/myenv往里面安装点自己的包&#xff0c;比如 conda install pytorch1.7.1 torchvision0.8.2 -c pytorch打开pycharm 注意&#x…...

UML-对象图(Object Diagram)

一、定义 UML对象图用于描述系统中对象的状态和相互关系,是类图的一个实例化版本,主要展示了类图中定义的关系在特定时间点的实际体现。它帮助开发者在设计阶段理解对象之间的实际关系、属性值和状态,从而支持系统设计的准确性与有效性。 二、组成要素 UML对象图主要由以…...

图片调色思路分享

图片调色是摄影后期处理的核心环节&#xff0c;旨在塑造画面的色彩氛围、统一风格、突出主题或表达情感。以下是一个系统的调色思路&#xff0c;结合了您提纲中的基础调整与色彩管理部分&#xff1a;1. 基础定调与校正 (奠定基础)审视直方图与曝光&#xff1a;首先观察图像的直…...

MouseClick:解放双手的跨平台鼠标自动化神器,告别重复点击的烦恼

MouseClick&#xff1a;解放双手的跨平台鼠标自动化神器&#xff0c;告别重复点击的烦恼 【免费下载链接】MouseClick &#x1f5b1;️ MouseClick &#x1f5b1;️ 是一款功能强大的鼠标连点器和管理工具&#xff0c;采用 QT Widget 开发 &#xff0c;具备跨平台兼容性 。软件…...

LangChain DeepAgents 速通指南(六)—— DeepAgents SubAgent 子智能体机制

前言 上篇文章《LangChain DeepAgents 速通指南&#xff08;五&#xff09;—— 快速了解DeepAgents框架及其核心特性》介绍了 DeepAgents 在任务规划、上下文管理、子智能体并行执行等方面的强大能力&#xff0c;仅需少量代码即可构建出复杂的智能体。上篇的案例演示也展示了…...

TimescaleDB实战:5分钟搞定物联网传感器数据存储与查询(附Grafana配置)

TimescaleDB实战&#xff1a;5分钟构建物联网传感器数据存储与可视化系统 物联网设备的爆炸式增长带来了海量传感器数据的存储和分析挑战。传统关系型数据库在面对高频写入的时间序列数据时往往力不从心&#xff0c;而NoSQL方案又牺牲了SQL的灵活性和事务支持。TimescaleDB作为…...

用CodeBuddy在10分钟内搭建个人技术博客(含GitHub Pages部署教程)

用CodeBuddy在10分钟内搭建个人技术博客&#xff08;含GitHub Pages部署教程&#xff09; 在数字时代&#xff0c;拥有一个个人技术博客已成为开发者展示专业能力、分享技术见解的重要方式。本文将带你使用CodeBuddy这一智能编程助手&#xff0c;快速构建专业级技术博客&#x…...

终极Mach-O文件分析指南:使用Bloaty深度剖析苹果应用大小

终极Mach-O文件分析指南&#xff1a;使用Bloaty深度剖析苹果应用大小 【免费下载链接】bloaty Bloaty: a size profiler for binaries 项目地址: https://gitcode.com/gh_mirrors/bl/bloaty Bloaty是一个强大的二进制文件大小分析工具&#xff0c;专门用于深度剖析可执行…...

Python可视化进阶:从Matplotlib到交互式图表

Python可视化进阶&#xff1a;从Matplotlib到交互式图表一张好图胜过千言万语&#xff0c;但大多数开发者却止步于基础的折线图和柱状图在数据驱动的时代&#xff0c;将复杂数据转化为清晰直观的可视化图表已成为每位开发者的必备技能。你是否曾遇到过这样的困境&#xff1a;花…...

CSS移动端解决阴影遮挡效果_利用box-shadow设置外扩散距离

box-shadow外扩散失效主因是父容器overflow隐藏、层叠上下文触发或参数误设&#xff1b;需检查overflow/transform/filter影响&#xff0c;用translateZ(0)强制分层&#xff0c;伪元素移出阴影&#xff0c;合理组合inset与外扩&#xff0c;并控制扩散距离≤8px。box-shadow 外扩…...

Unity游戏插件加载器MelonLoader完全指南:从安装到精通

Unity游戏插件加载器MelonLoader完全指南&#xff1a;从安装到精通 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader 在Unity游戏…...

安装---Low-E玻璃采光真的很差吗?

安装---Low-E玻璃采光真的很差吗? 现如今家装门窗,玻璃在整窗的占比越来越高,大视野好采光成了业主的主流需求之一,依然有提问,说自家装了Low-E玻璃,但觉得家里暗了,可卖家说正常,没问题! 我们的上帝-消费者从来不想做选择题,在同样价格的基础上,能获得的越多越好。…...