【Jenkins】Pipeline 简单使用

什么是Jenkins pipeline

Jenkins Pipeline是Jenkins的一个插件,它允许你以代码的方式定义和管理持续集成和交付流水线。通过Jenkins Pipeline,你可以将整个软件交付过程定义为一个可重复、可扩展和可管理的流水线。这个流水线可以包括构建、测试、部署和其他各种操作,使得软件交付过程更加自动化和可靠。Jenkins Pipeline支持使用Groovy语言编写流水线脚本,你可以通过代码的方式定义流水线的各个阶段和操作,以及它们的顺序和依赖关系。这使得流水线的定义更加灵活和可维护,同时也方便了版本控制和团队协作。

Pipeline 关键概念

以下是Jenkins Pipeline的关键概念,它们与Pipeline语法(请参阅下文概述)密切相关。

  • 管道(Pipeline):一个管道是一个用户定义的CD管道模型。管道的代码定义了整个构建过程,通常包括构建应用程序、测试应用程序以及部署应用程序的阶段。
  • 节点(Node):节点是一个属于Jenkins环境的机器,并且能够执行管道。
  • 阶段(Stage):阶段块定义了整个管道中执行的概念上不同的任务子集(例如“构建”、“测试”和“部署”阶段),许多插件使用它来可视化或呈现Jenkins Pipeline的状态/进度。
  • 步骤(Step):一个单独的任务。从根本上说,一个步骤告诉Jenkins在某个特定的时间点(或过程中的“步骤”)做什么。例如,要执行shell命令make,请使用sh步骤:sh ‘make’。当一个插件扩展Pipeline DSL时,[1] 这通常意味着该插件已经实现了一个新的步骤。

以下Pipeline代码框架说明了Declarative Pipeline语法和Scripted Pipeline语法之间的根本区别。

请注意,阶段和步骤(上文)是Declarative和Scripted Pipeline语法中都通用的元素。

Jenkins Pipeline 基础示例

Jenkins Pipeline 分声明式和脚本式两种,写法差不多。

1)声明式 Pipeline 示例

在声明式 Pipeline语法中,pipeline块定义了整个Pipeline中执行的所有工作。

pipeline {agent any // 在任何可用的代理上执行此Pipeline或其任何阶段stages {stage('Build') {steps {git branch: 'master', credentialsId: 'gitee_wlddhj', url: 'https://gitee.com/personal_practice/demo.git'}}stage('Test') {steps {sh label: '', script: '''mvn clean package  -Dmaven.test.skip=true -f pom.xml'''}}stage('Deploy') {steps {sh label: '', script: '''cp target/*.jar /data/product/deploy/'''}}}
}

2)脚本式 Pipeline 示例

在脚本式 Pipeline语法中,一个或多个node块在整个Pipeline中执行核心工作。虽然这不是脚本式 Pipeline语法的强制要求,但将Pipeline的工作限制在一个node块中可以做两件事:

  • 通过将项目添加到Jenkins队列来安排块中包含的步骤运行。一旦节点上的执行器空闲,步骤就会运行。
  • 创建一个工作区(特定于该特定Pipeline的目录),可以在其中对从源控制中检出的文件进行工作。
node {stage("pull code") {git branch: 'master', credentialsId: 'gitee_wlddhj', url: 'https://gitee.com/personal_practice/demo.git'}stage("build") {sh label: '', script: '''mvn clean package  -Dmaven.test.skip=true -f pom.xml'''}    stage("release") {sh label: '', script: '''cp target/*.jar /data/product/deploy/'''}stage("start") {ansiColor('xterm') {sh "JENKINS_NODE_COOKIE=dontKillMe   nohup java -jar /data/product/deploy/spring-demo-0.0.1-SNAPSHOT.jar  > demo.log &"}}
}

注意:在shell环境中使用nohup,并且& 某个程序后,会后台执行,退出当前链接后程序依然可以执行。 但是在Jenkins pipeline中,nohup在Jenkins编译任务结束时,运行的程序会自动退出。针对该解决办法是设置系统环境变量JENKINS_NODE_COOKIE=dontKillMe

Jenkins 环境变量

Jenkins Pipeline通过全局变量env来公开环境变量,在Jenkinsfile的任何地方都可以使用。完整的可在Jenkins Pipeline中访问的环境变量列表在${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
当前构建正在运行的节点的名称。对于Jenkins控制器,设置为’master’。

WORKSPACE
工作空间的绝对路径

可以像访问Groovy Map中的任何键一样引用或使用这些环境变量,例如:

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

设置环境变量

在Jenkins Pipeline中设置环境变量的方法取决于使用的是声明式Pipeline还是脚本化Pipeline。

声明式Pipeline支持environment指令,而脚本化Pipeline的用户必须使用withEnv步骤。

1)声明式Pipeline

pipeline {agent anyenvironment {CC = 'clang'}stages {stage('Example') {environment {DEBUG_FLAGS = '-g'}steps {sh 'printenv'}}}
}

2)脚本化Pipeline

node {/* .. snip .. */withEnv(["PATH+MAVEN=${tool 'M3'}/bin"]) {sh 'mvn -B verify'}
}

参考

  • https://www.jenkins.io/doc/book/pipeline/

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

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

相关文章

DRF从入门到精通二(Request源码分析、DRF之序列化组件)

文章目录 一、Request对象源码分析区分原生request和新生request新的request还能像原来的reqeust一样使用吗源码片段分析总结: 二、DRF之序列化组件序列化介绍序列化步骤序列化组件的基本使用反序列化基本使用反序列化的新增反序列化的新增删除单条 反序列化的校验 …

mangokit:golang web项目管理工具,使用proto定义http路由和错误

文章目录 前言1、mangokit介绍1.1 根据proto文件生成http路由1.2 根据proto文件生成响应码1.3 使用wire来管理依赖注入 2、mangokit实现2.1 protobuf插件开发2.2 mangokit工具 3、使用示例3.1 创建新项目3.2 添加新的proto文件3.3 代码生成 前言 在使用gin框架开发web应用时&a…

51单片机基于时间片轮转的简单rtos

早就想写写这个了,正好赶上有点时间,写了一下基于51单片机的时间片轮转调度系统,简单的rtos,呵呵。直接上代码。 //基于51单片机时间片轮转的简单rtos。 #include"reg52.h" sbit led1 P2^7; sbit led2 P2^0; sbit key…

Linux学习(1)——初识Linux

目录 一、Linux的哲学思想 1.1 基础知识 1.2 根目录下的文件夹 二、Shell 1、Shell的定义 2、Shell的作用 三、Linux命令行 1、Linux通用命令行使用格式 四、Linux命令的分类 1、内部命令和外部命令的理解 2、内部命令和外部命令的区别 3、命令的执行过程 五、编辑…

[每周一更]-(第31期):Mysql安装汇总

写自:20230204 23:25 一. mysql rpm二进制包 rpm -Uvh http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm yum install mysql-community-server service mysqld start set password password(“123456”)二. mysql yum安装 1、安装查看有没有安装…

面试题总结(十二)【Qt】【华清远见西安中心】

Qt是什么? Qt是一个跨平台的应用程序开发框架,最初由挪威的Trolltech公司开发。它提供了一套丰富的工具和类库,用于开发图形用户界面(GUI)应用程序、网络应用程序和嵌入式应用程序等。 Qt框架基于C语言编写&#xff0c…

DRF-流量控制-配置: 实现可以使用1/5m等限制规则,drf配置流量控制,drf重写流量控制类

一、base/throttle.py 在drf原生的流量控制中,只能支持1/m,1/s,1/h,1/d 等控制规则,不能实现1/5m,1/10s 等更加精细的控制。要是5分钟访问一次或多次,只能是通过12/h 这种来控制,不太友好。 重写SimpleRateThrottle 类的parse_r…

开源高星精选,10个2023企业级Python测试项目,再不学习今年没了

纸上得来终觉浅,光学习理论知识是不够的。 想要学好软件测试必须要结合实战项目深入掌握,今天给大家分享十个2023最新企业级Python软件测试项目: ▌Rank 1:Requests-HTML v0.9(7385 stars on Github,来自K…

Python-基于fastapi实现SSE流式返回(类似GPT)

最近在做大模型对话相关功能,需要将对话内容流式返回给前端页面(类似GPT的效果)。下面直接说下如何实现: 1.首先导入fastapi和sse流式返回所需要的包 from fastapi import APIRouter, Response, status from sse_starlette.sse …

Vue2+Vue3组件间通信方式汇总(1)------props

目录 一、props (父传子&#xff0c;子传父) ------Vue2 ------Vue3 从Vue2(组合式API)和Vue3&#xff08;选择式API&#xff09;两个版本对每个组件间通信方式进行讲解&#xff1a; 一、props (父传子&#xff0c;子传父) ------Vue2 父组件&#xff1a; <template>&…

以太网的数据速率、互连介质和物理层规范

以太网协议连接已经广泛应用于我们周围的大量事物或设备中。过去&#xff0c;以太网用在局域网 (LAN) 和城域网 (MAN) 中&#xff0c;而如今&#xff0c;由于以太网的普及和多种优势&#xff0c;例如巨大的生态体系和日益增长的规模经济&#xff0c;它越来越多地用在存储和汽车…

鉴赏 tcp vegas

优秀的 vegas 之后&#xff0c;再鉴赏一下迄今唯一像那么回事的拥塞控制算法 vegas。 从下图可看出所有的(对&#xff0c;所有的) aimd 都毫无伸缩性(z:吞吐&#xff0c;x:rtt&#xff0c;y:丢包率&#xff0c;由 buffer_size 直接决定)&#xff1a; 一下就可看出 rtt 和 bu…

JavaSE 内部类

目录 1 实例内部类2 静态内部类3 匿名内部类4 本地内部类 1 实例内部类 内部类&#xff1a; 外部类有一个…或外部类是由什么什么组成的。 实例内部类: 定义在类的内部的一个类。 如何实例化内部类对象&#xff1f; OuterClass.InnerClass innerClass2 out.new InnerClass()…

(四)pytorch图像识别实战之用resnet18实现花朵分类(代码+详细注解)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、关于这个实战的一些知识点Q1&#xff1a;图像识别实战常用模块解读Q2:数据增强Q3:迁移学习Q4&#xff1a;平均全局池化Q5&#xff1a;设置哪些层需要训练时…

大一C语言查缺补漏1 12.2

学习方向非C语言方向&#xff0c;但是专业是。。 仅供参考&#xff0c;&#xff0c;祝大家期末考试顺利。 对于二维数组定义&#xff0c;要给出明确的定义 eg&#xff1a;double a [21][4] int a [ ][3] {1,2,3,4,5,6} 不可以是&#xff1a;int a [ ][3]&#xff1b; 在c…

Unity3d C#利用Editor编辑器拓展实现配置UI背景样式一键设置UI背景样式功能(含源码)

前言 在开发UI滚动列表的时候&#xff0c;经常会有每项的背景图不统一的情况&#xff0c;会间隔重复的情况居多。这种情况下&#xff0c;手动去设置间隔一行的背景图或者颜色是比较麻烦的。在此背景下&#xff0c;笔者尝试写个小工具&#xff0c;在搭建UI时配置一下循环背景的…

《数据结构、算法与应用C++语言描述》- 最小赢者树模板的C++实现

赢者树 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_30winnerTree 比赛规则 假定有 n 个选手参加一次网球比赛。比赛规则是“突然死亡法”(sudden-death mode)&#xff1a;一名选手只要输掉一场球&#xff0c;就被淘汰。一对一对…

fill-in-the-middle(FIM) 实现与简单应用

1 背景 传统训练的 GPT 模型只能根据前文内容预测后文内容&#xff0c;但有些应用比如代码生成器&#xff0c;需要我们给出上文和下文&#xff0c;使模型可以预测中间的内容&#xff0c;传统训练的 GPT 就不能完成这类任务。 传统训练的 GPT 只能根据上文预测下文 使用 FIM…

vue-element安装富文本编辑器vue-quill-editor教程

在vue ui面板中安装vue-quill-editor依赖 命令安装 npm install vue-quill-editor --save # or yarn add vue-quill-editor 使用方法 在main.js导入富文本编辑器 import VueQuillEditor from vue-quill-editor import quill/dist/quill.core.css // import styles import…

技术博客:市面上加密混淆软件的比较和推荐

技术博客&#xff1a;市面上加密混淆软件的比较和推荐 引言 市面上有许多加密混淆软件可供开发者使用&#xff0c;但哪些软件是最好用的&#xff1f;哪些软件受到开发者的喜爱&#xff1f;本文将根据一次在CSDN上的投票结果&#xff0c;为大家介绍几款在程序员中普及度较高的…