正如 前文 提到的,Jenkins 流水线是一套插件,它支持实现和集成持续交付流水线到 Jenkins。流水线提供了一组可扩展的工具,用于通过流水线 DSL 将简单到复杂的交付流水线建模为“代码”。 [ 1 ]

本节描述了如何在 Jenkins 中开始创建你的流水线并介绍创建和存储 Jenkinsfile 的各种方式。

通过 Blue Ocean - 在 Blue Ocean 中设置一个流水线项目后,Blue Ocean UI 会帮你编写流水线的 Jenkinsfile 文件并提交到源代码管理系统。

通过经典 UI - 你可以通过经典 UI 在 Jenkins 中直接输入基本的流水线。

在源码管理系统中定义 - 你可以手动编写一个 Jenkinsfile 文件,然后提交到项目的源代码管理仓库中。 [ 3 ]

使用两种方式定义流水线的语法是相同的。尽管 Jenkins 支持在经典 UI 中直接进入流水线,但通常认为最好的实践是在 Jenkinsfile 文件中定义流水线,Jenkins 之后会直接从源代码管理系统加载。

通过 Blue Ocean

如果你刚接触 Jenkins 流水线,Blue Ocean UI 可以帮助你 设置流水线项目 ,并通过图形化流水线编辑器为你自动创建和编写流水线(即 Jenkinsfile )。

作为在 Blue Ocean 中设置流水线项目的一部分,Jenkins 给你项目的源代码管理仓库配置了一个安全的、经过身份验证的适当的连接。因此,你通过 Blue Ocean 的流水线编辑器在 Jenkinsfile 中做的任何更改都会自动的保存并提交到源代码管理系统。

了解更多 Blue Ocean 相关信息请前往 Blue Ocean 章节和 Blue Ocean 入门 页面。

通过经典 UI

使用经典 UI 创建的 Jenkinsfile 由 Jenkins 自己保存(在 Jenkins 的主目录下)。

想要通过 Jenkins 经典 UI 创建一个基本流水线:

输入一个任务名称 字段,填写你新建的流水线项目的名称。
警告: Jenkins 使用这个项目名称在磁盘上创建目录。建议不要在项目名称中使用空格,因为这样做可能会触发在脚本中不能正确处理目录路径中的空格的bug。

向下滚动并点击 流水线 ,然后点击页面底部的 确定 打开流水线配置页(已选中 General 选项)。

将你的流水线代码输入到 脚本 文本区域。
例如,复制并粘贴下面的声明式示例流水线代码(在 Jenkinsfile ( …​ ) 标题下)或者它的脚本化的版本到 脚本 文本区域。(下面的声明式示例将在整个过程的其余部分使用。)

Jenkinsfile (Declarative Pipeline)
pipeline {
    agent any (1)
    stages {
        stage('Stage 1') {
            steps {
                echo 'Hello world!' (2)
    Toggle Scripted Pipeline
    (Advanced)
    
Jenkinsfile (Scripted Pipeline)
node { (3)
    stage('Stage 1') {
        echo 'Hello World' (2)

通过经典的 UI 定义流水线可以很方便的测试流水线代码片段,也可以处理简单的或不需要从源代码仓库中检出/克隆的流水线。正如上面提到的,和通过 Blue Ocean(上面)或在版本管理系统中(下面)定义的 ``Jenkinsfile`` 不同,在流水线项目的 脚本 文本区域输入的 ``Jenkinsfile`` 由 Jenkins 自己存储在 Jenkins 主目录下。因此,为了更好地控制和扩展你的流水线,尤其是源代码管理系统中那些复杂的项目,建议使用 Blue Ocean源码管理系统来定义你的 Jenkinsfile 文件。

为简化操作,流水线的 Jenkinsfile 可以在文本编辑器或集成开发环境(IDE)中进行编写并提交到源码管理系统 [3](可选择性地与需要 Jenkins 构建的应用程序代码放在一起)。然后 Jenkins 从源代码管理系统中检出 Jenkinsfile 文件作为流水线项目构建过程的一部分并接着执行你的流水线。

要使用来自源代码管理系统的 Jenkinsfile 文件配置流水线项目:

由于流水线代码(特别是脚本式流水线)是使用类似 Groovy 的语法编写的, 如果你的IDE不能正确的使用语法高亮显示你的 Jenkinsfile,可以尝试在 Jenkinsfile 文件的顶部插入行 #!/usr/bin/env groovy 纠正这个问题。 [4] [5]

全局变量参考

对于只展示步骤的片段生成器的补充,流水线还提供了一个内置的“全局变量参考”。和片段生成器一样,它也是由插件动态添加。但和片段生成器不一样的是,全局变量参考只包含由流水线或插件提供的可用于流水线的变量文档。

流水线默认提供的变量是:

可以从脚本式流水线中访问的环境变量,例如: env.PATHenv.BUILD_ID。 访问内置的全局变量参考页面 ${YOUR_JENKINS_URL}/pipeline-syntax/globals 以获取完整的,最新的,可用于流水线的环境变量列表。

params

将为流水线定义的所有参数作为 Map,例如:params.MY_PARAM_NAME

currentBuild

可用于发现当前正在执行的流水线的信息, 比如 currentBuild.resultcurrentBuild.displayName 等属性。参考内置的全局变量参考页面 ${YOUR_JENKINS_URL}/pipeline-syntax/globals 以获取完整的,最新的,currentBuild 的属性列表。

片段生成器可以帮助生成脚本式流水线的步骤或者声明式流水线的 stage 中的 steps 代码块,但是其并没有包含用于定义声明式流水线的 section(节段)directive(指令)。声明式指令生成器(Declarative Directive Generator)这个工具可以做到这点。和 片段生成器类似,指令生成器允许你选择声明式的指令,对其以一种方式进行配置,然后生成这个指令的配置,让你将其用于声明式流水线。

要使用声明式指令生成器生成一个声明式的指令:

从已配置好的流水线导航到 Pipeline Syntax/流水线语法 链接(见上),然后点击侧栏的 Declarative Directive Generator,或直接访问 ``${YOUR_JENKINS_URL}/directive-generator``。

在下拉菜单中选择需要的指令。

使用下拉菜单下面动态生成的区域配置已选的指令。

点击 Generate Declarative Directive 生成一个能够被复制到流水线中的指令配置。

指令生成器可以生成嵌套的指令配置,比如在 when 指令内的条件,但是它不能生成流水线步骤。对于包含步骤的指令内容,比如 stage 内的 stepspost 内的条件如 alwaysfailure,指令生成器添加一个占位符注释。你仍然需要手动添加步骤到流水线中。

Jenkinsfile (Declarative Pipeline)
stage('Stage 1') {
    steps {
        // One or more steps need to be included within the steps block.