Jenkins--任务详解

一、任务类型

Jenkins的主要功能的实现是由执行任务去完成的,常用的任务类型主要有以下三种:

  1. 自由风格任务(Free Style Project): 这是Jenkins中最常用的任务类型,允许你自定义各种构建步骤和配置选项,如源码管理、构建触发器、构建环境、构建步骤和构建后操作等。
  2. Maven项目任务(Maven Project):如果需要构建的项目使用的是Maven,那么可以选择这种类型的项目。Jenkins会自动识别Maven项目,并利用你项目中的pom文件进行构建,可以大大减轻构建配置。
  3. 流水线任务(Pipeline Project): 这种任务类型适合于复杂的构建流程,它支持声明式和脚本式语法,可以跨多个节点执行,并且可以实现更高级的构建逻辑,如依赖管理和并行构建等。

二、创建任务

在Dashboard页面左侧菜单栏中点击"新建任务",然后输入任务名,选择创建的任务类型,点击下面的确定按钮。
在这里插入图片描述

三、自由风格任务配置

3.1 General

在Jenkins的自由风格任务中,"General"配置主要用于设置任务的一些全局信息。以下是一些常规项功能介绍:

  1. Throttle builds:用于控制任务构建的数量。这个选项可以帮助你管理在特定时间内可以并行执行的构建数量,从而避免因过多并行构建导致资源竞争或服务过载。
  2. 丢弃旧的构建:用于设置保留构建历史的数量。这对于管理Jenkins服务器上的存储空间非常有用,特别是当你有大量的构建任务时。通过减少保留的构建数量,你可以节省硬盘空间,并可能提高Jenkins的性能。
  3. 参数化构建过程:允许创建参数化的构建流程。这意味着你可以为构建任务定义一系列可变的参数,然后在实际构建时传入这些参数,从而实现更加灵活和动态的构建过程。
  4. 在必要的时候并发构建:允许在构建过程中并行执行多个构建任务。默认情况下,Jenkins一次只能执行一个项目的单个构建,即任何其他想要开始的构建任务都会被放入构建队列中,直到当前的构建任务完成。

在这里插入图片描述

3.2 源码管理

一般是配合Git插件来拉取Git远程仓库中的代码。
在这里插入图片描述

3.3 构建触发器

在Jenkins中配置构建触发器,可以选择多种方式来触发构建,以下是一些常见的触发器配置方法:

  1. 触发远程构建:通过发送HTTP请求来远程触发Jenkins作业的构建,需要提供一个安全令牌(Token),确保只有知道令牌的请求才能触发构建。
  2. 其他工程构建后触发:当指定的其他Jenkins任务完成构建后,当前任务就会被触发。这种方式常用于构建链的场景,即一个任务的输出是另一个任务的输入,需要保证按顺序执行。
  3. 定时构建:通过Cron表达式来配置定时构建,使得Jenkins在指定的时间自动执行构建。
  4. GitHub hook trigger for GITScm polling:对于与Git仓库集成的项目,可以配置Webhook,以便在推送代码到Git仓库时自动触发Jenkins构建。这比轮询SCM更为高效,因为它是实时的。
  5. 轮询 SCM:指Jenkins定期检查代码仓库的改动,一旦检测到新的提交,就会自动触发构建。

在这里插入图片描述

3.4 构建环境

在Jenkins中配置任务的构建环境是一个重要的步骤,因为它允许您为构建过程设置必要的参数和条件。以下是一些常见的构建环境配置选项:

  1. Delete workspace before build starts: 在构建开始前清理工作空间。这意味着每次构建都会从干净的状态开始,有助于避免因残留的旧数据而导致的潜在问题。
  2. Use secret text(s) or file(s): 使用加密的文本或文件,这些可以在构建过程中安全地传递敏感信息,如密码或API密钥。
  3. Provide Configuration files:需要提供配置文件,在构建步骤中,可以编写脚本或使用Jenkins的内置步骤来读取配置文件,并根据文件中的设置来配置环境变量、数据库连接、应用程序参数等。
  4. Send files or execute commands over SSH before the build starts:在构建开始之前向远程服务器发送文件或执行命令,通常用于准备构建环境。例如启动服务、创建目录或配置环境变量。
  5. Send files or execute commands over SSH after the build runs:在构建完成后向远程服务器发送文件或执行命令。这通常用于部署应用程序、清理构建环境或记录构建结果。
  6. Inspect build log for published build scans:在构建完成后自动检查构建日志,以便查找和分析已发布的构建扫描结果。这些扫描结果通常包含构建的元数据、依赖关系和其他重要信息,对于理解构建的成功与否以及性能瓶颈非常有帮助。
  7. Terminate a build if it’s stuck:在构建过程中如果出现长时间无响应或卡住的情况时,自动终止该构建。这有助于防止因构建卡死而占用资源或影响其他构建的执行。
  8. With Ant:在Jenkins任务中配置Ant作为构建环境。
  9. 在构建日志中添加时间戳前缀:会在构建日志中添加时间戳前缀,以便查看构建日志的执行时间。

在这里插入图片描述

3.5 Build Steps

在Jenkins中配置任务的Build Steps是构建自动化过程的核心部分。在增加构建步骤的下拉框中选择所需的构建步骤类型,常用的构建步骤类型有以下几种:

  1. Run with timeout:允许在构建步骤中设置一个超时时间。当步骤执行时间超过设定的时间时,Jenkins会自动停止该步骤的执行,防止因为某些原因导致的长时间阻塞。
  2. Send files or execute commands over SSH:允许通过SSH协议在构建过程中向远程服务器发送文件或者执行命令。通常是通过安装和使用名为"Publish Over SSH"的插件来实现的。
  3. 执行 Windows 批处理命令:在构建时会执行指定的Windows批处理命令。要确保Jenkins服务器有权限访问执行批处理命令的环境,并且Jenkins需要能够找到批处理文件所在的路径。
  4. 执行 shell:在构建时会执行指定的shell脚本命令。
  5. 调用顶层Maven:在构建步骤中使用Maven插件来执行Maven命令。通常用于Java项目,因为它可以帮助你自动执行Maven生命周期中的不同阶段,如clean、compile、test、package、install等。

一般选择执行Shell,然后在文本框中输入构建过程中执行的Shell命令。
在这里插入图片描述

3.6 构建后操作

在Jenkins的自由风格任务中,"构建后操作"是一个非常重要的环节,它允许你在构建流程的最后一步执行一系列的操作,以达到自动化测试、部署或其他后续工作的目的。以下是一些常见的构建后操作及其用途:

  1. Aggregate downstream test results:在构建过程中聚合所有下游任务的测试结果。这对于需要执行多个测试任务的项目特别有用,因为它可以帮助你快速地查看所有测试的结果,而不需要单独检查每一个测试任务的输出。
  2. Publish JUnit test result report:将JUnit测试框架输出的XML测试结果文件转换成易于阅读的格式,并在Jenkins界面上展示出来。这对于自动化测试来说是非常重要的,因为它可以帮助开发者和测试者快速查看测试结果,从而提高工作效率。
  3. Publish Javadoc:将Java项目的文档(javadoc)发布到一个远程位置,如Web服务器或文件存储系统。这个功能对于文档管理和共享非常重要,因为它允许开发者和其他利益相关者访问项目的API文档,以便更好地理解和使用代码。
  4. 归档成品:在构建完成后将某些文件或目录存档起来。这通常用于保存构建产生的成品,如编译后的jar文件、war文件或其他类型的文件,以便于之后的部署、测试或其他用途。
  5. 构建其他工程:允许设置一个或多个其他Jenkins任务,以便在当前任务构建成功后自动触发它们。这个功能常用于依赖关系管理,即如果一个项目依赖于另一个项目的构建成果,那么可以在依赖项目构建完成后自动启动依赖项目的构建流程。
  6. 记录文件的指纹用于追踪:允许为特定的文件生成指纹,并在后续的构建中追踪这些文件的使用情况。这对于管理和追踪软件依赖关系非常有用,因为它可以帮助你了解哪些构建使用了哪些文件,从而更好地管理项目的构建和部署过程。
  7. Git Publisher:允许在构建成功后自动推送代码到远程Git仓库。这通常用于持续集成/持续部署(CI/CD)流程中,以确保最新的代码更改能够及时地推送到仓库中。
  8. E-mail Notification:允许在构建成功或失败时自动发送电子邮件通知给指定的收件人。这是一个非常实用的功能,特别是对于那些需要即时了解构建状态的用户或者团队。
  9. Editable Email Notification:允许对发送邮件通知的过程进行更多的自定义和控制。
  10. Send build artifacts over SSH:允许通过SSH协议将构建产物(比如jar包、war包等)传输到另一台服务器或者设备上。这个功能特别适合于需要将构建成果部署到生产环境或者其他特定环境的场景。
  11. Delete workspace when build is done:在构建完成后清理工作空间。这可以帮助节省磁盘空间,特别是在构建过程中会产生大量临时文件的场合。

四、Maven项目任务配置

Maven项目任务的配置与自由风格任务的配置基本相同,下面主要看下不同点。

4.1 Pre Steps

允许在构建流程开始之前执行一系列预处理步骤。这些预处理步骤可以是准备构建环境的命令、获取依赖关系、初始化数据库等。可以添加的步骤与自由风格任务的Build Steps一样。
在这里插入图片描述

4.2 Build

Build设置是非常关键的一部分,它决定了Jenkins如何运行Maven构建。主要由以下两部分组成:

  • Root POM:Maven项目的pom.xml文件的路径,是相对于Jenkins工作区的路径,而不是相对于你的项目源代码仓库的路径。如果你的项目是从版本控制系统中获取的,那么Jenkins会在每次构建之前自动从版本控制系统中拉取最新的代码,并将它们放在工作区内。所以这里Root POM指向的是工作区内的pom.xml文件,让Jenkins知道在哪里找到pom.xml文件,从而能够正确地执行Maven构建。
  • Goals and options:指定Maven构建过程中需要执行的目标(goals)和相关的选项(options)。一般就是clean package -DskipTests,清除 打包 跳过单元测试。

在这里插入图片描述

4.3 Post Steps

在构建流程的最后阶段执行一系列的操作。这些操作可以是清理工作区、部署应用到服务器、发送通知等。可以添加的步骤也是跟自由风格任务的Build Steps一样,只不过这里有三种触发条件可以选择。

  • Run only if build succeeds:仅在构建成功时运行。
  • Run only if build succeeds or is unstable:仅在构建成功或不稳定时运行。
  • Run regardless of build result:无论构建结果如何都运行,这将确保后置步骤在构建成功、失败或者被中止时都会执行。

在这里插入图片描述

五、流水线任务配置

4.1 流水线

流水线任务配置中最关键的就是pipeline脚本的编写,用于定义Jenkins流水线任务的Groovy脚本,它包含了构建、测试、部署等步骤的定义,以及如何执行这些步骤的详细说明。Pipeline Script中常用的几个部分组成:

  1. Pipeline Block:这是Pipeline Script的基础,所有的其他组件都应该包含在这个block中。它通常包括pipeline { ... }语法,并且是整个脚本的根节点。
  2. Agent:这部分指定了Pipeline Script将在哪台机器或容器中执行。它可以定义在Pipeline Block的顶层,也可以在Stage中重新定义。
  3. Stages:这是Pipeline Script的核心部分,它包含了多个阶段(Stage),每个阶段又包含了多个步骤(Step)。每个阶段可以有自己的Agent定义,这意味着不同的阶段可以在不同的环境中执行。
  4. Steps:每个阶段包含了一系列的步骤,这些步骤定义了在该阶段需要执行的具体操作,如获取代码、编译代码、运行测试、构建文档等。

在这里插入图片描述

4.2 流水线语法

jenkins可以根据相关的配置生成具体的流水线的执行语法,从而完成流水线任务的具体操作。例如:使用git拉取代码、使用maven进行代码构建等语法。流水线语法中用到最多的就是片段生成器,可以帮助你快速生成流水线脚本中的特定部分。下面是流水线语法的页面:
在这里插入图片描述

4.3 简单示例

假设现在有个项目的构建需要经历以下几步:拉取代码、构建两部分。现在看下如何使用流水线来完成这两部分流水线脚本的编写。这里我们先使用jenkins流水线自带的样式来生成一个大致的脚本轮廓,然后将具体的操作再填充到这个轮廓中。
在这里插入图片描述

  • 拉取代码
    (1)通过git从远程仓库去拉取代码。具体的语法可以使用jenkins自带的流水线语法去生成,点击流水线配置中的流水线语法。
    在这里插入图片描述
    (2)点击片段生成器,在示例步骤中选择git,然后输入git代码仓地址相关信息后,点击生成流水线脚本,就会生成对于的拉取git仓代码的流水线脚本,复制该生成的脚本到整个流水线的步骤中
    在这里插入图片描述

  • 构建
    这里使用在全局工具配置里面配好的Maven进行构建,直接使用shell 命令来执行mvn的构建命令:sh "mvn clean package -Dmaven.test.skip=true"

得到最终的流水线脚本如下:

pipeline {agent anystages {stage('拉取代码') {steps {git credentialsId: '0', url: 'https://gitee.com/njhsmile/web_demo_freestyle.git'echo '代码拉取成功'}}stage('构建') {steps {sh "mvn clean package -Dmaven.test.skip=true"echo '代码构建成功'}}}
}

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

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

相关文章

3.java openCV4.x 入门-数据类型(CvType)与Scalar

专栏简介 💒个人主页 📰专栏目录 点击上方查看更多内容 📖心灵鸡汤📖我们唯一拥有的就是今天,唯一能把握的也是今天 🧭文章导航🧭 ⬆️ 2.hello openCV ⬇️ 4.待更新 数据类型&#xff…

蓝牙BLE开发——如何实时监听蓝牙适配器状态变化及回调

uniapp 监听蓝牙适配器状态变化事件 近年来开发项目中接触比较多的与硬件设备对接,通过蓝牙与设备通讯;开发 App、微信小程序,今天分享其中如何监听蓝牙适配;近期比较忙,不定时更新,有时间会分享 uniapp开发…

【浅谈面向过程和面向对象的区别】

面向对象和面向过程是两种不同的编程范式,它们在处理问题和构建软件时有着显著的区别。 一、面向过程 1、基本概念 面向过程编程是一种早期的程序设计范型,它以事件为中心,主要关注“怎么做”,即完成任务的具体步骤。它将问题分…

用于无人机小型化设计的高精度温补晶振

用于无人机小型化设计的高精度温补晶振:TG2016SMN和TG2520SMN。无人机的发展可以说是非常的迅速,在安防,农业,交通,电力,直播等领域经常能看到无人机大显身手。无人机的应用场最是非常的广泛,功能更强&…

每日面经分享(python part1)

Python中的深拷贝和浅拷贝的区别是什么? a. 浅拷贝创建一个新的对象,但其中的可变元素仍然共享引用。只有对象的第一层被复制,而更深层次的嵌套对象仍然是引用。更改其中一个对象的属性会影响到其他对象。 b. 深拷贝创建一个完全独立的新对象…

C++——异常机制

目录 一,背景 1.1 C语言处理错误的方式 1.2 C异常概念 二,异常的使用 2.1 异常的简单使用 2.2 异常的匹配原则 2.3 异常抛对象 2.4 异常的重新抛出 2.5 异常安全 三,自定义异常体系 四,异常优缺点 4.1 优点 4.2 缺点 …

对【AI技术创业】有哪些机会进行分析和引导

文章目录 方向一:行业解决方案,以下是一些常见的行业解决方案:方向二:智能产品和服务,以下是一些智能产品和服务的示例:方向三:教育和培训 1.智能客户服务: 利用自然语言处理(NLP)和…

day10 java封装性

封装性 为什么有封装性? 为了保护数据不被随意修改,隐藏类的实现细节。增强了代码的安全性和可维护性。 该隐藏隐藏 该暴露暴露 封装性的实现? 让调用者只能通过方法操作属性。可以在方法中加入一些限制条件或数据检查的操作。 封装性的直…

局域网与城域网(练习题)

局域网与城域网 ⭐️⭐️⭐️⭐️ 红色标记为答案⭐️⭐️⭐️⭐️ ⭐️⭐️⭐️ 蓝色标记为要点解析⭐️⭐️⭐️ 1.以下关于VLAN标记的说法中,错误的是()。 A.交换机根据目标地址和VLAN标记进行转发决策 B.进入目的网段时,交换机…

ansible-自动化工具

一、ansible概述 不是C/S架构,就是一种工具 1:linux自动化运维 编写程序实现运维自动化:shell python 工具模式自动化: ①OS Provisioning: RedHat satellite;PXE(可实现dhcp和tftp&#…

moment.js 产出未知格式的时间,可能的原因

moment.js 产出未知格式的时间,可能的原因 有个问题困扰我好久了,在项目中使用格式化时间的时候会产出一些千奇百怪的格式,产出的文字我都不认识。 百思不得其解,终于今天在看代码的时候发现了这个问题。 它的表现是这样的&…

pygame--坦克大战(一)

项目搭建 本游戏主要分为两个对象,分别是我方坦克和敌方坦克。用户可以通过控制我方的坦克来摧毁敌方的坦克保护自己的“家”,把所有的敌方坦克消灭完达到胜利。敌方的坦克在初始的时候是默认5个的(这可以自己设置),当然,如果我方坦克被敌方坦克的子弹打中,游戏结束。从…