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 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的深入了解,你可以创建更复杂和自动化的构建任务。后续我们会增加更多的实例来进行讲解,敬请期待。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UE4 拍摄、保存并浏览相册

效果: 1.新建CameraActor类 2.修改截图保存路径 3.编写BP_Camera蓝图 注意路径 Save Image函数要在执行拍照和BeginPlay事件执行一次 按钮执行拍摄事件 3.编写UMG蓝图 技巧:让Index加1、减1循环赋值 4.把BP_Camera挂在玩家上

《QT实用小工具·三十》基于QT开发的访客管理平台demo

1、概述 源码放在文章末尾 该项目为访客管理平台demo,包含主界面、系统设置、警情查询、调试帮助、用户退出功能。 项目部分代码如下: #ifndef QTHELPER_H #define QTHELPER_H#include "head.h"class QtHelper { public://获取所有屏幕区域…

从Linux角度具体理解程序翻译过程-----预处理、编译、汇编、链接

前言: 在C语言中,我们知道程序从我们所写的代码到可执行执行的过程中经历了以下过程 1.预处理 2.编译 3.汇编 4.链接 可以通过下图来理解 翻译过程 1.预处理 该过程主要进行以下操作: (1)头文件的包含 (2)define定义符号的替换&#xff…

怎样实现opc采集数据后传给web后端

现在很多老工厂要进行数字化改造,现场生产的各种数据需要传到web后端,很多工厂现场原有的自动监控系统已经采集了现场的各种数据,只是没有形成联网。如果前端自动化系统全部废除,重新做数字化控制系统,成本投入太大&am…

docker服务无法启动

背景:断电重启经常会导致磁盘io错误,甚至出现磁盘坏块 这时可以使用xfs_repair来修复磁盘,但是修复过程可能会导致部分数据丢失 xfs_repair -f -L /dev/sdc问题一: Apr 15 19:27:15 Centos7.6 systemd[1]: Unit docker.service e…

Java入门(JDK安装)

安装 JDK 下载 Java Downloads | Oracle 安装 下一步直接安装安装过程中,需要确定自己的安装位置 参考:D:\Java\jdk1.8.0_281_x64 演示位置 校验 终端输入 java -version 配置 1)删除默认 javapath 默认情况下,可以在cm…

【C++题解】1607. 两位数运算

问题:1607. 两位数运算 类型:基本运算、拆位求解 题目描述: 小丽在编程课上学会了拆位运算,她已经可以拆出一个两位整数的十位和个位了,她想知道这个整数的十位 / 个位的结果是多少,请编程帮她实现&#…

VulnHub靶机 DC-5 打靶 渗透测试详情过程

VulnHub靶机 DC-5 打靶 详细渗透测试过程 目录 VulnHub靶机 DC-5 打靶 详细渗透测试过程一、将靶机导入到虚拟机当中二、渗透流程主机发现端口扫描目录爆破文件包含getshell反弹shell提权 一、将靶机导入到虚拟机当中 靶机地址: https://download.vulnhub.com/dc/…

【论文阅读】YOLO-World | 开集目标检测

Date:2024.02.22,Tencent AI Lab,华中科技大学Paper:https://arxiv.org/pdf/2401.17270.pdfGithub:https://github.com/AILab-CVC/YOLO-World 论文解决的问题: 通过视觉语言建模和大规模数据集上的预训练来…

HTTP/HTTPS详解

HTTP/HTTPS详解 1. HTTP1.1 HTTP基础知识1.2 HTTP建立和断开连接 2. HTTPS 1. HTTP 1.1 HTTP基础知识 HTTP是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用 于从WWW服务器传输超文本到本…

学习一下选择排序,快速排序

1.选择排序 我们可以根据这动图看到,就是在这个数组里面我们选出最小的放进第一个位置,然后再选除了第一个位置最小的,剩下的数里面最小的放到第二个位置,是不是非常简单呢。 void SelectSort2(int* arr, int n) {int begin 0;…

Stable Diffusion 3 API 发布!超越Midjourney v6和DALL-E 3

Stable Diffusion 3 于 2 月首次宣布作为预览版发布。而今天,StabilityAI 正式推出了 Stable Diffusion 3 和 Stable Diffusion 3 Turbo API 的API接口服务。 Stability AI 称仍在持续改进该模型,并没有说明发布日期。模型还没发布,但API先来…

安装importlib_resources库的方法最终解答!_Python库

安装Python库importlib_resources 我的环境:Window10,Python3.7,Anaconda3,Pycharm2023.1.3 importlib_resources importlib_resources是一个用于访问Python包中非代码资源(如文本、图片等)的库&#xff…

neo4j使用详解(终章、neo4j的java driver使用模板及工具类——<可用于生产>)

Neo4j系列导航: neo4j安装及简单实践 cypher语法基础 cypher插入语法 cypher插入语法 cypher查询语法 cypher通用语法 cypher函数语法 neo4j索引及调优 neo4j java Driver等更多 1. 简介 本文主要是java使用neo4j driver操作neo4j的模板项目及非常有用的工具类,主要包括: 图…

yolov7模型输出层预测方法解读

本文从代码的角度分析模型训练阶段输出层的预测包括以下几个方面: 标注数据(下文统称targets)的正样本分配策略,代码实现位于find_3_positive。候选框的生成,会介绍输出层的预测值、GT、grid、 anchor之间的联系损失函…

【原创】springboot+mysql疫苗预约管理系统设计与实现

个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…

《Kubernetes部署篇:基于Kylin V10+ARM架构CPU+外部etcd使用containerd部署K8S 1.26.15容器版集群(多主多从)》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:企业级K8s集群运维实战 1、在当前实验环境中安装K8S1.25.14版本,出现了一个问题,就是在pod中访问百度网站,大…

ollama大语言模型

查看已经安装的大语言模型 ollama list运行大语言模型 ollama run llama2:latest

【EI会议征稿通知】2024年图像处理、机器学习与模式识别国际学术会议(IPMLP 2024)

2024年图像处理、机器学习与模式识别国际学术会议(IPMLP 2024) 2024 International Conference on Image Processing, Machine Learning and Pattern Recognition 重要信息 大会官网:www.ipmlp.net(点击参会/投稿/了解会议详情)…

Elasticsearch:简化 KNN 搜索

作者:来自 Elastic Panagiotis Bailis 在这篇博客文章中,我们将深入探讨我们为了使 KNN 搜索的入门体验变得更加简单而做出的努力! 向量搜索 向量搜索通过在 Elasticsearch 中引入一种新的专有的 KNN 搜索类型,已经可以使用一段…