jenkins流水线(pipline)实例

news2024/11/27 14:52:04

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 any
    
    options {
        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 any
    stages {
        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 any
    stages {
        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.coloradmin.cn/o/1257212.html

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

相关文章

独乐乐不如众乐乐(二)-某汽车零部件厂商IC EMC企业规范

前言:该汽车零部件厂商关于IC EMC的规范可能是小编看过的企业标准里要求最明确的一份企业标准了,充分说明了标准方法不是死的,可以灵活应用。 先看看这份规范的抬头: 与其他企业规范一样,该汽车零部件厂商的IC EMC规范…

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

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

Java PriorityQueue

一般情况下, 我们使用队列是为了能够建造队列的先进先出 (First-In-First-Out) 模式的, 达到一种资源的公平分配, 先到达的任务 (元素) 先处理, 但有时需要在队列中基于优先级处理对象。 存入队列中的任务 (元素) 具有优先级, 需要根据优先级修复里面的数据。而在 JDK 1.5 引入…

python爬虫进阶篇(异步)

学习完前面的基础知识后,我们会发现这些爬虫的效率实在是太低了。那么我们需要学习一些新的爬虫方式来进行信息的获取。 异步 使用python3.7后的版本中的异步进行爬取,多线程虽然快,但是异步才是爬虫真爱。 基本概念讲解 1.什么是异步&…

光线追踪-Peter Shirley的RayTracing In One Weekend系列教程(book1-book3)代码分章节整理

自己码完了一遍了,把代码分章节整理了一下,可以按章节独立编译,运行, 也可以直接下载编译好的release版本直接运行。 项目地址: Github: https://github.com/disini/RayTracingInOneWeekendChaptByChapt ​ ​ ​ ​

【赠书第8期】工程效能十日谈

文章目录 前言 1 工程效能十日谈 1.1 制定清晰的目标和计划 1.2 引入先进的技术和工具 1.3 建立有效的沟通机制 1.4 灵活应对变化 1.5 确保资源充足 1.6 进行有效的风险管理 1.7 进行持续的监控和评估 1.8 优化团队合作 1.9 注重质量管理 1.10 进行项目总结和反思 …

【Amazon】安装Cloudwatch代理监控EC2

文章目录 一、实验概要二、实验操作步骤2.1 创建 CloudWatch 代理运行角色2.2 安装 CloudWatch 代理软件包2.3 使用 CloudWatch代理收集指标2.4 CloudWatch指标收集确认 三、参考链接 一、实验概要 使用 CloudWatch 代理从 Amazon EC2 实例和本地服务器中收集指标、日志和跟踪信…

NetSuite 应用性能管理器(APM)

前段时间,我们发过一个文章谈系统健康检查。 NetSuite ERP系统健康检查-CSDN博客文章浏览阅读119次。“健康检查”本质上是属于信息化持续改善的组成部分。如果说信息化是一个持续不断的过程的话,那么“健康检查”就是持续不断的PDCA中的Check那一环。h…

pygame加载图像,并让小球做平抛运动

文章目录 load转换和存储自由落体 在游戏设计中,图像显示是必不可少的功能,pygame中的image模块便用于加载图像。 load 通过load函数,可以加载多种图像格式,如下表所示 旧版本bmp, gpeg, png, pcx, tiff, xpmc, lbm(以及pbm, p…

CountDownLatch实战应用——批量数据多线程协调异步处理(主线程执行事务回滚)

😊 作者: 一恍过去 💖 主页: https://blog.csdn.net/zhuocailing3390 🎊 社区: Java技术栈交流 🎉 主题: CountDownLatch实战应用——批量数据多线程协调异步处理(主线程执行事务…

MIT 6.824 -- MapReduce Lab

MIT 6.824 -- MapReduce Lab 环境准备实验背景实验要求测试说明流程说明 实验实现GoLand 配置代码实现对象介绍协调器启动工作线程启动Map阶段分配任务执行任务 Reduce 阶段分配任务执行任务 终止阶段 崩溃恢复 注意事项并发安全文件转换golang 知识点 测试 环境准备 从官方gi…

nginx配置文件的简单结构

nginx的配置文件(nginx.conf)整体上可分为三个部分:全局块、events块、http块 区域职责全局块配置和nginx运行相关的全局配置events块配置和网络连接相关的配置http块配置代理、缓存、日志记录、虚拟主机等配置在http块中,可以包含…

Linux的基本指令(四)

目录 前言 时间相关的指令 date指令 时间戳 日志 时间戳转化为具体的时间 cal指令 find指令(十分重要) grep指令(行文本过滤工具) 学前补充 什么是打包和压缩? 为什么要打包和压缩? 怎么打包和…

【洛谷算法题】P5715-三位数排序【入门2分支结构】

👨‍💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5715-三位数排序【入门2分支结构】🌏题目描述🌏输入格式…

基于OGG实现MySQL实时同步

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

常见树种(贵州省):020女贞、异叶梁王茶、掌叶梁王茶、鹅掌柴、楤木、柞木、华重阳木、马蹄荷、山桐子、刺楸

摘要:本专栏树种介绍图片来源于PPBC中国植物图像库(下附网址),本文整理仅做交流学习使用,同时便于查找,如有侵权请联系删除。 图片网址:PPBC中国植物图像库——最大的植物分类图片库 一、女贞 …

我的创作纪念日-五周年

机缘 5年前,作为一名技术人员,平时利用CSDN作为学习平台工具,帮助解决工作中遇到的问题。随着30、35中年危机渐行渐近,回过头来发现平时虽然也有记录整理学习笔记的习惯,但还没有一个可以持续鞭笞自己和记录自己学习的…

C#,数值计算——插值和外推,RBF_fn 与 RBF_gauss 的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public interface RBF_fn { double rbf(double r); } } ---------------------------------------------- using System; namespace Legalsoft.Truffer { public class RBF_gauss : RBF…

transformers pipeline出现ConnectionResetError的解决方案

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

上海亚商投顾:北证50指数大涨 逾百只北交所个股涨超10%

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指11月24日震荡调整,深成指、创业板指盘中跌超1%。北证50指数大涨超6%,北交所个股持…