jenkins流水线(pipline)实例

1、pipline 语法介绍

声明式的pipeline语法格式
1. 所有的声明都必须包含在pipeline{}中
2. 块只能有节段,指令,步骤或者赋值语句组成
3. 阶段:agent,stages,post,steps
4. 指令:environment,options,parameters,triggers,stage,input,tool,when

2、阶段

agent: 该指令用于指定构建代理的配置。agent any 表示在任何可用的构建代理上执行流水线。可以使用其他选项如 agent none(不在任何代理上执行)、agent {label 'label-name'}(在具有特定标签的代理上执行)等。
# jenkins 添加节点 stages: stages 指令用于定义流水线中的阶段。阶段是流水线的主要分组单元,用于将构建过程分解为不同的步骤。每个阶段可以包含一个或多个步骤。steps: steps 指令用于定义流水线中某个阶段的步骤。步骤是构建过程中的具体操作,可以是 shell 脚本、构建命令、插件调用等。post: post 指令用于定义在所有阶段完成后执行的操作。可以使用不同的条件来指定执行操作的时机,如 always(无论构建结果如何始终执行)、success(仅在构建成功时执行)等。在 post 指令内部,可以定义多个操作,如发送电子邮件通知、触发其他构建等。

3、指令

environment: environment 指令用于定义流水线中的环境变量。可以在流水线的任何阶段或步骤中使用这些环境变量。它们可以用于存储和传递配置信息、凭据、版本号等。options: options 指令用于定义全局选项和配置。可以使用不同的选项来控制流水线的行为,如超时设置、并行执行、跳过失败的阶段等。parameters: parameters 指令用于定义流水线的参数。参数可以用于接收用户输入,从而自定义构建过程。可以定义不同类型的参数,如字符串、布尔值、选择列表等。triggers: triggers 指令用于定义触发流水线执行的条件或事件。可以使用不同的触发器来实现自动触发流水线,如定时触发、代码推送触发、其他流水线完成触发等。stage: stage 指令用于定义流水线中的阶段。阶段是流水线的主要分组单元,用于将构建过程分解为不同的步骤。每个阶段可以包含一个或多个步骤。input: input 指令用于在流水线的执行过程中暂停并等待用户输入。可以定义一个或多个输入步骤,以便用户提供必要的确认或参数输入,然后流水线继续执行。tool: tool 指令用于在流水线中配置和使用工具。可以指定使用特定版本的构建工具、测试工具等。when: when 指令用于根据条件来控制流水线中某个步骤或阶段的执行。可以使用不同的条件表达式来判断是否执行特定的步骤或阶段,如构建参数的值、环境变量的状态等。

4、示例

# 以下示例结合了部分常用的指令及阶段pipeline {agent anyoptions {timeout(time: 1, unit: 'HOURS')disableConcurrentBuilds()}parameters {string(name: 'TARGET_ENV', defaultValue: 'dev', description: 'Target environment for deployment')booleanParam(name: 'RUN_TESTS', defaultValue: true, description: 'Run tests during the build')}triggers {cron('0 0 * * *') // 每天午夜触发upstream(upstreamProjects: 'my-other-pipeline', threshold: hudson.model.Result.SUCCESS)}stages {stage('Checkout') {steps {git branch: 'main', credentialsId: 'my-git-credentials', url: 'https://github.com/my-repo.git'}}stage('Build') {steps {sh 'mvn clean package'}}stage('Test') {when {expression { params.RUN_TESTS == true }}steps {sh 'mvn test'}}stage('Deploy') {when {environment name: 'TARGET_ENV', value: 'prod'}steps {sh 'deploy-to-prod.sh'}}}post {always {emailext (subject: 'Jenkins Pipeline - Build Status',body: '''构建完成''',to: 'my-email@example.com',attachLog: true) }}
}#使用 agent any 指定在任何可用的代理上运行流水线。
#使用 options 指令设置了超时时间和禁用并发构建。
#使用 parameters 指令定义了两个参数,用于接收目标环境和是否运行测试的用户输入。
#使用 triggers 指令设置了每天午夜触发和上游流水线成功触发的条件。
#使用 stages 指令定义了几个阶段,包括代码检出、构建、测试和部署。
#使用 when 指令在测试和部署阶段根据条件进行了控制。
#使用 post 指令定义了 always 块,在流水线执行结束后发送电子邮件通知构建状态,并附带构建日志。

注意:

pipeline:代表整条流水线,包含整条流水线的逻辑
agent:指定流水线的执行器 (在节点上)和工作区
stages:封装了用于定义流水线主体和逻辑的所有单个阶段定义

至少包含一个stage
 stage:代表流水线的阶段,每个阶段都必须有名称

5、实战演练

准备:以下服务器防火墙与selinux均需关闭

192.168.58.140        部署gitlab            详细参照:http://t.csdnimg.cn/Sb1uz

192.168.58.153        部署Jenkins        详细参照:http://t.csdnimg.cn/HxYPt

192.168.58.156        安装好nginx tomcat   详细参照:http://t.csdnimg.cn/CmLUg

以下操作在jenkins页面进行

1.新建流水线任务

简单文本完成后,开始构建,并查看是否步骤是否成功。 

 2.拉取代码进行测试

在gitlab项目端获取仓库源 :git@192.168.58.140:root/easy-springmvc-maven.git

 在jenkins页面端的pipeline中进行如下操作:

 将复制的脚本粘贴至相应位置,应用保存。

 构建并查看相应的执行信息

 继续添加步骤测试是否构建成功

 3.测试:能不能从错误的地方开始重新执行

将NO.3步改错,保存并构建

将错误的地方改正确,保存但不开始构建

 若没有Blue Ocean,则需要下列步骤安装下载,有此软件则跳过此步。

 打开 Blue Ocean

点击未运行成功的那条记录 

 重新启动两次失败,说明不可以以此种方式重启,则选择重新构建。

构建成功。

代码总结:

pipeline {agent anystages {stage('NO.1') {steps {echo "你好 世界"}}stage("NO.2"){steps {echo "I want you to make her happy ^_^"}}stage("NO.3"){steps {git credentialsId: '1f5adfa6-af28-4f62-8785-38d2774c3196', url: 'git@192.168.58.140:root/easy-springmvc-maven.git'}}stage("NO.4"){steps {echo "World peace, Our hope !!!"}}}
}
4.打包代码的流水线

准备:

从gitlab上拉一个java的小项目

jdk用的11版本的(/usr/local/java11)

maven用的3.8.5(/usr/local/maven/bin/mvn)

第一步:拉取代码

还是在配置页面,点击流水线语法,选择git,然后拉取一个java的小项目、

填好url,认证凭据,分支后点击生成流水线脚本,复制一下,填入pipeline脚本中

stage('NO.1 :拉取代码') {steps {git credentialsId: '1f5adfa6-af28-4f62-8785-38d2774c3196', url: 'git@192.168.58.140:root/easy-springmvc-maven.git'}}

 第二步:打包后端代码

stage("NO.2 : 打包代码"){steps {sh "/usr/local/maven/bin/mvn package"}}

第三步:后端代码上线

获取tomcat页面ip

在流水线语法中生成流水线脚本,并复制粘贴到指定位置

stage("NO.3 :上传项目"){steps {deploy adapters: [tomcat8(credentialsId: 'cecf8ea2-e03d-4a07-a041-7763e8ca1cb9', path: '', url: 'http://192.168.58.156:8080/')], contextPath: null, war: 'target/easy-springmvc-maven.war'}}

保存并开始构建。

代码如下

pipeline {agent anystages {stage('NO.1 :拉取代码') {steps {git credentialsId: '1f5adfa6-af28-4f62-8785-38d2774c3196', url: 'git@192.168.58.140:root/easy-springmvc-maven.git'}}stage("NO.2 : 打包代码"){steps {sh "/usr/local/maven/bin/mvn package"}}stage("NO.3 : 上传项目"){steps {deploy adapters: [tomcat8(credentialsId: 'cecf8ea2-e03d-4a07-a041-7763e8ca1cb9', path: '', url: 'http://192.168.58.156:8080/')], contextPath: null, war: 'target/easy-springmvc-maven.war'}}}
}

至此, pipeline语法以及相关的使用详解完毕。

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

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

相关文章

RedLock底层源码分析

RedLock底层源码分析 一、Redlock红锁算法 https://redis.io/docs/manual/patterns/distributed-locks/官网说明 1、为什么要学习这个?怎么产生的? ​ 一个很直接的问题,当我使用redis锁的那台机器挂了,出现了单点故障了&#…

transformers pipeline出现ConnectionResetError的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

案例030:基于微信小程序的英语学习交流平台

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

PTA-7-53 身份证排序

题目: 输入n,然后连续输入n个身份证号。 将每个身份证的年月日抽取出来,按年-月-日格式组装,然后对组装后的年-月-日升序输出。 根据题目要求,代码实现如下: import java.util.Scanner; import java.uti…

MUI框架从新手入门【webapp开发教程】

文章目录 MUI -最接近原生APP体验的高性能前端框架APP开发3.25 开发记录miu框架介绍头部/搜索框:身体>轮播图轮播图设置数据自动跳转:九宫格图片九宫格图文列表底部选项卡按钮选择器手机模拟器 心得与总结:MUI框架在移动应用开发中的应用M…

设计模式精讲:掌握单例模式的实现与优化

掌握单例模式的实现与优化 一、引言:如何学习设计模式?二、前置知识:对象的创建的销毁2.1、拷贝构造2.2、拷贝赋值构造2.3、移动构造2.4、移动赋值构造 三、单例模式的定义四、单例模式的实现与优化4.1、版本一4.2、版本二4.3、版本三4.4、版…

手把手教会你--github的学习--持续更新

有什么问题,请尽情问博主,QQ群796141573 前言1.1 使用过程(1) 进入某个项目(2) 点击某个文件(3) 在源码区域下面(4) 源码区的头顶上 1.2 作者的其他项目1.3 搜索1.4 复制别人的代码(即项目)到自己的空间内1.5 上传自己的Bugs(bushi1.6 在线修改文件1.7 评…

【数据中台】开源项目(2)-Moonbox计算服务平台

Moonbox是一个DVtaaS(Data Virtualization as a Service)平台解决方案。 Moonbox基于数据虚拟化设计思想,致力于提供批量计算服务解决方案。Moonbox负责屏蔽底层数据源的物理和使用细节,为用户带来虚拟数据库般使用体验&#xff0…

Linux的基本指令(三)

目录 前言 echo指令&#xff08;简述&#xff09; Linux的设计理念 输出重定向操作符 > 追加输出重定向操作符 >> 输入重定向操作符 < 补充知识 学前补充 more指令 less指令 head指令 tail指令 查看文件中间的内容 利用输出重定向实现 利用管道“ |…

Linux进程管理,用户管理,文件压缩命令

gcc与g区别(补充了解): 比如有两个文件:main.c,mainc.cpp(分别用C语言和C语言写的)如果要用gcc编译呢? gcc -o mainc main.c gcc -o mainc mainc.cpp -lstdc 指明用c的标准库; 区别一: gcc默认只链接C库,并不会链接C的库;g会默认链接c标准库. 区别二: gcc编译.c文件,则按照C语…

防火墙命令行基础配置实验(H3C模拟器)

嘿&#xff0c;这里是目录&#xff01; ⭐ H3C模拟器资源链接1. 实验示意图2. 要求3. 当前配置3.1 PC配置3.2 FW配置&#xff08;防火墙&#xff09;[^7][^8]3.2.1 FW1配置3.2.2 FW2配置 3.3 R配置3.3.1 R1配置3.3.2 R2配置 3.4 SW配置3.4.1 SW1配置3.4.2 SW2配置3.4.3 SW3配置…

【Python】使用globals()函数成功解决tkinter多个新窗口问题

我在近期的一个项目&#xff08;tkinter复刻记事本&#xff09;里遇到一个棘手的问题&#xff1a;如何在创建多个新窗口后&#xff0c;每个窗口还能独立运行。当时我尝试如何去解决&#xff0c;但是无果&#xff0c;于是觉得非要使用线程不可&#xff0c;便留了一个坑。直到今天…