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

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 nameint agedef 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 anystages {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.mzph.cn/bicheng/339.shtml

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

相关文章

第10章 物理安全要求

10.1 站点与设施设计的安全原则 假如没有对物理环境的控制,任何管理的、技术的或逻辑的访问控制技术都无法提供足够的安全性。 如果怀有恶意的人员获取了对设施及设备的物理访问权,那么他们几乎可以为所欲为,包括肆意破坏或窃取、更改数据。…

原来是这样的Three.js,我悟了

最近在b站上面看到up主:gamemcu的3D作品,着实让人感到非常震撼,作品中的SU7模型,利用的是Blender进行建模,利用了webGL的技术进行开发。由此启发了我对3D极大的乐趣。因此,凭借一点点🤏的前端知…

RK3588 Android13 TvSetting 中增加 Usb 模式 Host/OTG 切换

前言 电视产品,客户要求在设置中设备偏好设置子菜单下增加一个USB模式切换菜单,一开始准备直接开整。但发现在开发者选项里就已经包含了一个USB模式 菜单了,只是没有 OTG HOST 这两选项,那就把这个菜单挪出来再增加一下就完事了,开整。 客户提供对比机图 效果图 framew…

【计算机毕业设计】学习平台功能介绍——后附源码

🎉**欢迎来到我的技术世界!**🎉 📘 博主小档案: 一名来自世界500强的资深程序媛,毕业于国内知名985高校。 🔧 技术专长: 在深度学习任务中展现出卓越的能力,包括但不限于…

学习部分排序,插入排序,冒泡排序以及希尔排序

1.插入排序 <1>.首先我们举个例子 我们要把6进行前面的插入&#xff0c;那我们要进行比较&#xff0c;首先确定一个end的指针&#xff0c;然后他指向的数字就是我们需要比较的&#xff0c;如果end指向的数比我们end1 的大的话&#xff0c;那我们就往前挪一个&#xff0c…

有效Dk值提取方法的仿真分析

目录 1. TDR技术提取Dk值的方法 2. 传输线双端口Delta-L技术提取Dk值的方法 3. 传输线单端口Delta-L技术提取Dk值的方法 4. 总结 参考文献 1. TDR技术提取Dk值的方法 测试有效Dk值的一些传统而有效的方法[1][2]&#xff0c;是采用TDR阻抗测试仪测试专门设计的传输线的传播延…

我的AI数字人分身上线了!

说起AI数字人&#xff0c;大家一定不会陌生。随着全民AI时代的到来&#xff0c;许多机关单位、企业和个人&#xff0c;都纷纷制作了自己的数字人形象。 前些天&#xff0c;小灰的老东家刘强东也开始用数字人直播带货&#xff0c;瞬间引爆了全网。 这一切背后的本质是什么呢&…

抽真空规范操作

抽真空规范操作 抽真空操作中&#xff0c;一个被忽视的现象是&#xff1a;许多维修人员热衷于解决空调故障&#xff0c;却对施工过程中的规范操作敷衍了事。殊不知&#xff0c;正是这些看似微不足道的细节疏忽&#xff0c;往往诱发空调各类疑难故障&#xff0c;令售后维修陷入…

【创建型模式】原型模式

一、原型模式概述 原型&#xff08;Prototype&#xff09;模式的定义&#xff1a;用一个已经创建的实例作为原型&#xff0c;通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里&#xff0c;原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效&#xf…

吴恩达深度学习笔记:深度学习的 实践层面 (Practical aspects of Deep Learning)1.4-1.5

目录 第一门课&#xff1a;第二门课 改善深层神经网络&#xff1a;超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第一周&#xff1a;深度学习的 实践层面 (Practical aspects of Deep Learning)…

Vue接收接口返回的mp3格式数据并支持在页面播放音频

一、背景简介 在实际工作中需要开发一个转音频工具&#xff0c;并且能够在平台页面点击播放按钮播放音频 二、相关知识介绍 2.1 JS内置对象Blob Blob对象通常用于处理大量的二进制数据&#xff0c;可以读取/写入/操作文件、音视频等二进制数据流。Blob表示了一段不可变的二…

【PCL】教程alignment_prerejective.cpp 刚性物体的鲁棒位姿估计

The viewer window provides interactive commands; for help, press h or H from within the window. > Loading V:\learn\PCL\pcl\examples\test\chef.pcd [PCLVisualizer::setUseVbos] Has no effect when OpenGL version is 鈮?2 [done, 327.147 ms : 5092 points] Ava…

AI大模型量化格式介绍(GPTQ,GGML,GGUF,FP16/INT8/INT4)

在 HuggingFace 上下载模型时&#xff0c;经常会看到模型的名称会带有fp16、GPTQ&#xff0c;GGML等字样&#xff0c;对不熟悉模型量化的同学来说&#xff0c;这些字样可能会让人摸不着头脑&#xff0c;我开始也是一头雾水&#xff0c;后来通过查阅资料&#xff0c;总算有了一些…

DFS之剪枝(上交考研题目--正方形数组的数目)

题目 给定一个非负整数数组 A A A&#xff0c;如果该数组每对相邻元素之和是一个完全平方数&#xff0c;则称这一数组为正方形数组。 返回 A A A 的正方形排列的数目。 两个排列 A 1 A1 A1 和 A 2 A2 A2 不同的充要条件是存在某个索引 i i i&#xff0c;使得 A 1 [ i …

测试一下 Meta Llama3-70b-Instruct-q8

测试一下 Meta Llama3-70b-Instruct-q8 0. 引言1. 测试 Meta Llama3-70b-Instruct-q8 0. 引言 今天&#xff0c;Meta 正式介绍Meta Llama 3&#xff0c;Meta 开源大型语言模型的下一代产品。 这次发布包括具有80亿&#xff08;8B&#xff09;和700亿&#xff08;70B&#xff0…

指纹浏览器如何高效帮助TikTok账号矩阵搭建?

TikTok的账号矩阵&#xff0c;可能听起来还比较陌生&#xff0c;但随着TikTok业务已经成为吃手可热的跨境业务&#xff0c;TikTok多账号矩阵已成为流行策略。但它有什么优点呢&#xff1f;操作多个帐户会导致被禁止吗&#xff1f;如何有效地建立账户矩阵开展业务&#xff1f;这…

CANfestival 主机进入预操作态(preOperational)自动发送复位节点指令。

核心是iam_a_slave ,这个是字典生产的时候自动生成的。

【Flutter】多语言方案一:flutter_localizations 与 GetX 配合版

系列文章目录 多语言方案&#xff1a;flutter_localizations 与 GetX 配合版&#xff0c;好处&#xff1a;命令行生成多语言字符串的引用常量类&#xff0c;缺点&#xff1a;切换语言以后&#xff0c;主界面需要手动触发setState&#xff0c;重绘将最新的Locale数据设置给GetM…

使用LangChain和Llama-Index实现多重检索RAG

大家好&#xff0c;在信息检索的世界里&#xff0c;查询扩展技术正引领着一场效率革命。本文将介绍这一技术的核心多查询检索&#xff0c;以及其是如何在LangChain和Llama-Index中得到应用的。 1.查询扩展 查询扩展是一种信息检索技术&#xff0c;通过在原始查询的基础上增加…

基于Springboot的简历系统

基于SpringbootVue的简历系统的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页 简历模板 招聘会 求职论坛 系统公告 后台登录 后台首页 用户管理 简历模板 模板…