DevOps(七)Jenkins发布第一个流水线任务

news2024/11/26 19:40:18

Jenkins的流水线(Pipeline)是一种强大的工具,用于定义和管理持续集成和持续交付(CI/CD)过程。它允许你以代码的形式(即"Pipeline as Code")定义整个构建、测试和部署流程,使得流程可以像代码一样进行版本控制、审查和迭代。

一、流水线基础

  • 声明式流水线: 使用 Groovy DSL 语法编写的流水线脚本,结构清晰,易于阅读和维护。
  • 脚本化流水线: 使用 Groovy 脚本编写的流水线,更灵活,但需要更深入的 Groovy 知识。

二、流水线结构

  • Pipeline: 定义整个流水线的代码块。
  • Agent: 指定运行流水线的节点 (例如: any, master, 指定标签的代理)。
  • Stages: 定义流水线中的各个阶段,每个阶段包含一系列步骤。
  • Steps: 定义在每个阶段中执行的具体任务,例如执行 shell 命令、调用其他 Jenkins 任务等。
  • Post: 定义在流水线或阶段结束后执行的操作,例如发送通知、清理工作区等。

三、常用步骤

  • sh: 执行 shell 命令。
  • bat: 执行批处理命令 (Windows)。
  • git: 从 Git 仓库克隆代码。
  • maven: 构建 Maven 项目。
  • gradle: 构建 Gradle 项目。
  • docker: 构建和管理 Docker 镜像。
  • withCredentials: 安全地使用凭证,例如密码和密钥。

四、流水线特性

  • 参数化构建: 允许您在运行流水线时传递参数,例如分支名称、构建版本等。
  • 触发器: 允许您自动触发流水线,例如代码提交、定时任务等。
  • 并行执行: 允许您并行执行多个阶段或步骤,提高构建效率。
  • 条件判断: 允许您根据条件执行不同的步骤,例如根据构建结果决定是否部署。
  • 循环: 允许您重复执行一系列步骤,例如迭代构建多个项目。
  • 共享库: 允许您共享通用的流水线代码,提高代码复用性。
  • 插件: 扩展 Jenkins 流水线功能,例如与其他工具集成、添加自定义步骤等。

五、流水线优势

  • 自动化: 自动执行构建、测试和部署流程,提高效率和一致性。
  • 可视化: 流水线状态和结果清晰可见,方便跟踪和调试。
  • 可扩展性: 可根据需要添加或修改步骤,适应不同的项目需求。
  • 可维护性: 代码化配置,易于版本控制和管理。
  • 可移植性: 流水线脚本可以跨不同的 Jenkins 实例共享和重用。

六、 Groovy 脚本

Groovy是一种基于Java虚拟机(JVM)的动态脚本语言。它完全兼容Java语法,同时提供了许多额外的特性,使得编写代码更加简洁和灵活。以下是Groovy的一些关键特性和概念:

  • 动态类型:Groovy支持动态类型,即变量的类型可以在运行时确定。你可以使用def关键字声明变量,而无需显式指定类型。

  • 简化的语法:Groovy简化了许多Java的语法。例如,你可以省略分号、括号,使用字符串插值等。这使得Groovy的代码更加简洁易读。

  • 闭包(Closure):闭包是Groovy中的一等公民。它们是可以作为方法参数传递、赋值给变量以及在其他代码块中执行的代码块。闭包可以访问其定义范围内的变量。

  • 集合操作:Groovy提供了丰富的集合操作方法,如eachcollectfind等,使得处理列表和映射变得非常方便。

  • 元编程(Metaprogramming):Groovy支持元编程,允许你在运行时动态地修改类的行为。你可以通过扩展现有类、拦截方法调用等方式来实现元编程。

  • 与Java的互操作性:Groovy与Java有很好的互操作性。你可以在Groovy中无缝地使用Java类库,也可以在Java中调用Groovy代码。

  • 领域特定语言(DSL)支持:Groovy的动态特性和元编程能力使其非常适合创建领域特定语言(DSL)。你可以定义自己的语法和规则,让代码更加接近问题域。

以下是一个简单的Groovy脚本示例,展示了一些基本的语法和特性:

// 变量定义
def name = "John"
def age = 30

// 字符串插值
def message = "Hello, ${name}! You are ${age} years old."
println(message)

// 集合操作
def numbers = [1, 2, 3, 4, 5]
def evenNumbers = numbers.findAll { it % 2 == 0 }
println("Even numbers: ${evenNumbers}")

// 闭包
def greeting = { name -> "Hello, ${name}!" }
println(greeting("Alice"))

// 类定义
class Person {
    String name
    int age
    
    def sayHello() {
        println("Hello, my name is ${name} and I am ${age} years old.")
    }
}

def person = new Person(name: "Bob", age: 25)
person.sayHello()

输出结果:

Hello, John! You are 30 years old.
Even numbers: [2, 4]
Hello, Alice!
Hello, my name is Bob and I am 25 years old.

这只是Groovy的一小部分功能和语法示例。Groovy还提供了许多其他特性,如异常处理、文件操作、XML处理、数据库访问等,使其成为一种功能强大且灵活的脚本语言。

在Jenkins流水线中,你可以使用Groovy编写流水线脚本(即Jenkinsfile),利用其动态性和表现力来定义和管理CI/CD过程。Groovy的简洁语法和丰富的特性使得编写和维护复杂的流水线变得更加容易。

七、第一个流水线任务

学习了流水线和Groovy脚本以后,今天我们完成Jenkins的第一个流水线任务,使用流水线打印Hello World。具体步骤如下:

1、新建任务

在Jenkins主页,点击 "New Item" 或 "创建新任务"。

2、选择任务类型

在创建任务界面,输入任务名称”HelloWorld“,然后在下面的任务类型中选择流水线,最后点选”确定“按钮。

3、填写任务脚本

打开任务的本置界面以后,看到下图所示界面

鼠标滚轮向下翻页,直到看到”流水线“区域。

填写在脚本,打印Hello World

pipeline {
    agent any

    stages {
        stage('Hello') {
            steps {
                echo 'Hello World'
            }
        }
    }
}

这是一个基本的Jenkins声明式流水线(Declarative Pipeline)脚本。让我们逐行解析这段脚本:

pipeline {
  • pipeline是声明式流水线的关键字,表示这是一个流水线的定义。
    agent any
  • agent指定了流水线的执行环境。在这里,any表示流水线可以在Jenkins环境中的任何可用代理(agent)上运行。
    stages {
  • stages块定义了流水线中的所有阶段。阶段(stage)是流水线的基本构建块,表示流水线中的一个逻辑分组。
        stage('Hello') {
  • stage定义了一个名为'Hello'的阶段。每个阶段都有一个名称,用于标识该阶段的目的。

            steps {
  • steps块包含了在该阶段内要执行的一系列步骤。步骤(step)是在阶段内执行的最小单位。
                echo 'Hello World'
  • echo是一个内置的步骤,用于在控制台输出中打印一条消息。在这里,它会打印出'Hello World'。
            }
        }
    }
}
  • 最后的几行用于关闭之前打开的块(stepsstagestagespipeline)。

总结起来,这个流水线脚本定义了一个简单的流水线,其中只有一个名为'Hello'的阶段。在该阶段中,流水线会在控制台输出中打印'Hello World'。

4、保存后立即构建

5、构建完成以后看到阶段视图和构建历史

6、选择构建的历史点进去,看到构建的情况。

7、选择Console Output ,就可以看到这次构建的日志,看到打印出来的”Hello World“

以上就是在Jenkins中创建和配置第一个构建流水任务的基本流程。你可以根据你的项目需求,添加更多的配置选项,如参数化构建、构建环境设置等。随着对Jenkins的深入了解,你可以创建更复杂和自动化的构建任务。后续我们会增加更多的实例来进行讲解,敬请期待。

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

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

相关文章

Linux中用户通过系统调用实现硬件驱动全流程

驱动全流程: 以基于设备树、Pinctrl、gpio子系统,打开一个字符设备为例: 1、通过系统调用open进入内核 当我们在用户空间调用open之后,应用程序会使用系统调用指令(在上图中可看到,ARM架构中软中断汇编指…

浏览器工作原理与实践--浏览上下文组:如何计算Chrome中渲染进程的个数

经常有朋友问到如何计算Chrome中渲染进程个数的问题,那么今天就来完整地解答这个问题。 在前面“04 | 导航流程”这一讲中我们介绍过了,在默认情况下,如果打开一个标签页,那么浏览器会默认为其创建一个渲染进程。不过我们在“04 |…

搜维尔科技:【工业仿真】煤矿机械安全事故VR警示教育系统

产品概述 搜维尔科技 煤矿机械安全事故VR警示教育系统 系统内容: 系统采用虚拟现实技术模拟矿井井下机械安全技术及事故,展现井下常见机械伤害事故,表现伤害事故的隐患点,能够模拟事故发生和发展过程;营造井下灾害发…

C#基于SSE传递消息给Vue前端实现即时单向通讯

一、简述 通常前端调用后端的API,调用到了,等待执行完,拿到返回的数据,进行渲染,流程就完事了。如果想要即时怎么办?如果你想问什么场景非要即时通讯,那可就很多了,比如在线聊天、实…

HQL,SQL刷题,尚硅谷(中级)

目录 相关表结构: 1、order_info表 2、order_detail表 题目及思路解析: 第一题,查询各品类销售商品的种类数及销量最高的商品 第二题 查询用户的累计消费金额及VIP等级 第三题 查询首次下单后第二天连续下单的用户比率 总结归纳&#xff1a…

C#版Facefusion:让你的脸与世界融为一体!-02 获取人脸关键点

C#版Facefusion:让你的脸与世界融为一体!-02 获取人脸关键点 目录 说明 效果 模型信息 项目 代码 下载 说明 C#版Facefusion一共有如下5个步骤: 1、使用yoloface_8n.onnx进行人脸检测 2、使用2dfan4.onnx获取人脸关键点 3、使用arcfa…

【MATLAB源码-第36期】matlab基于BD,SVD,ZF,MMSE,MF,SLNR预编码的MIMO系统误码率分析。

操作环境: MATLAB 2022a 1、算法描述 1. MIMO (多输入多输出):这是一个无线通信系统中使用的技术,其中有多个发送和接收天线。通过同时发送和接收多个数据流,MIMO可以增加数据速率和系统容量,同时提高信号的可靠性。…

算法1: 素数个数统计

统计n以内的素数个数 素数:只能被1和自身整除的自然数,0和1除外; 举例: 输入:100 输出:25 import java.util.*; class Test1{public static void main(String[] args){int a 100; //输入数字//…

41、二叉树-二叉树的层序遍历

思路: 层序遍历就是从左到右依次遍历。这个时候就可以使用队列的方式。例如先把头节点入队,然后遍历开始,首先计算队列长度,第一层,长度为了,遍历一次,依次出队,头结点出队&#xff…

Redis的RedisObject和对外可见的5种数据结构

目录 RedisObject Redis的编码方式 对外可见的5种数据结构 1.string string结构的源码 为什么是小于44字节会采用embstr编码? embstr和raw区别 2.list list结构的源码 3.set set结构的源码 4.zset zset结构的源码 5.hash hash结构的源码 Redis中…

淘宝客订单产品设计:连接商家与推广者的智能桥梁

随着电商行业的迅速发展,淘宝客作为一种常见的推广方式,为商家引流、提升销量发挥了重要作用。而淘宝客订单产品的设计,则是连接商家与推广者的智能桥梁,本文将对其进行探讨与分析。 ### 1. 淘宝客订单产品的定义 淘宝客订单产品…

梯度提升树(Gradient Boosting Trees)

通过5个条件判定一件事情是否会发生,5个条件对这件事情是否发生的影响力不同,计算每个条件对这件事情发生的影响力多大,写一个梯度提升树(Gradient Boosting Trees)模型程序,最后打印5个条件分别的影响力。 示例一 梯…

【目标检测】Focal Loss

Focal Loss用来解决正负样本不平衡问题,并提升训练过程对困难样本的关注。 在一阶段目标检测算法中,以YOLO v3为例,计算置信度损失(图中第3、4项)时有目标的点少,无目标的点多,两者可能相差百倍…

WSL(Ubuntu)、PC物理机,linux开发板三个设备通讯,镜像模式

文章目录 一、前言二、使用2.1 需要的系统信息2.2 添加 .wslconfig 文件 三、如何从局域网访问WSL中的服务 一、前言 最近在使用Linux开发板的环境下,由于使用的 WSL的子系统,并不是虚拟机,导致 网络传输 这方面不是很方便,由于 W…

AGM AG32 MCU在汽车UWB应用方案

AG32的汽车UWB应用方案 汽车电子产品的日益成熟,包括ADAS和车载信息娱乐,正在推动对CPLD的需求。例如,利用安装在车上的各种传感器(如雷达、摄像头和激光雷达等)来感知周围环境,实现实时监测和数据处理。这…

docker容器技术篇:数据卷的常用操作

Docker数据卷的使用 在docker中,为了方便查看容器内产生的数据或者将多个容器中的数据实现共享,就涉及到容器数据卷管理,那什么是数据卷呢,往下看!!! 1 数据卷概念 数据卷是一个共给容器使用…

一款挺不错网站维护页面HTML源码

一款挺不错网站维护页面源码,单HTML不需要数据库,上传到你的虚拟机就可以用做维护页面还不错,用处多。。 源码下载 一款挺不错网站维护页面源码

C# - 反射动态添加/删除Attribute特性

API: TypeDescriptor.AddAttributes TypeDescriptor.GetAttributes 注意:TypeDescriptor.AddAttributes添加的特性需要使用 TypeDescriptor.GetAttributes获取 根据api可以看到,该接口不仅可以给指定类(Type)添加特性&#xf…

设计模式——模版模式21

模板方法模式在超类中定义了一个事务流程的框架, 允许子类在不修改结构的情况下重写其中一个或者多个特定步骤。下面以ggbond的校招礼盒发放为例。 设计模式,一定要敲代码理解 模版抽象 /*** author ggbond* date 2024年04月18日 17:32* 发送奖品*/ p…

华为框式交换机S12700E系列配置CSS集群

搭建集群环境 a.为两台交换机上电&#xff0c;按照数据规划分别对两台框式交换机进行配置 <HUAWEI> system-view [HUAWEI] sysname Switch1 [Switch1] set css id 1 [Switch1] set css priority 150 //框1的集群优先级配置为150 [Switch1] interface css-port 1 [Sw…