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"

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

bash 复制代码
pipeline {
    agent any

    stages {
        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 '代码构建成功'
            }
        }
    }
}
相关推荐
get_money_15 分钟前
代码随想录Day52 101. 孤岛的总面积,102. 沉没孤岛,103. 水流问题,104.建造最大岛屿。
java·开发语言·笔记·算法·深度优先·图论
理想青年宁兴星28 分钟前
【SpringBoot】Java中isEmpty使用不当报错空指针
java·spring boot·后端
硕风和炜32 分钟前
【LeetCode: 3159. 查询数组中元素的出现位置 + 统计下标】
java·算法·leetcode
jioulongzi1 小时前
jdk17+springboot3项目加密部署
java
阿泽不想掉光头发1 小时前
C#实现调用DLL 套壳读卡程序(桌面程序开发)
java·开发语言·后端·websocket·http·c#
bglmmz1 小时前
JPA查询部分字段的最佳实践
java·开发语言
一写代码就开心2 小时前
DBeaver 咋手动配置sqlite 驱动
java
小小药2 小时前
011-spring-整合三方框架的命名空间原理(重要)
java·数据库·spring
forestsea2 小时前
【深度学习】Java DL4J基于 CNN 构建车辆识别与跟踪模型
java·人工智能·深度学习·cnn·deep learning
tealcwu2 小时前
【游戏设计原理】32 - 消费者剩余
java·开发语言·游戏