Jenkins 流水线入门

JenkinsBeginner
立即练习

介绍

欢迎来到本 Jenkins Pipeline 基础实验。Jenkins Pipeline 是一个强大的功能,它允许你将整个构建、测试和部署过程定义为代码。这个定义存储在一个名为 Jenkinsfile 的文本文件中,该文件通常与你的应用程序源代码一起进行版本控制。这种实践被称为“Pipeline-as-Code”(即代码即流水线)。

在本实验中,你将专注于 Declarative Pipeline(声明式流水线)语法,它提供了一种结构化且用户友好的方式来创建流水线。完成本实验后,你将能够:

  • 在 Jenkins Web 界面中创建一个新的 Pipeline 项目。
  • 使用声明式语法编写一个基础的 Jenkinsfile
  • 配置一个项目以使用本地 Git 仓库中的 Jenkinsfile
  • 运行一个流水线并检查其输出。
  • 将一个流水线组织成多个阶段(stages)。
  • 使用环境变量来管理配置。

Jenkins 实例已为你运行在一个容器中。让我们开始吧。

在 Jenkins 中创建流水线项目

你的第一步是在 Jenkins 中创建一个新的流水线项目。这种项目类型专门用于执行在 Jenkinsfile 中定义的流水线。

  1. 从桌面界面打开 Firefox 浏览器。浏览器将自动打开到 http://localhost:8080,因此你无需手动输入 URL。无需登录。
  2. 在 Jenkins 仪表板(dashboard)上,点击左侧菜单中的 New Item
  3. Enter an item name 字段中,输入 my-first-pipeline
  4. 从项目类型列表中选择 Pipeline
  5. 点击页面底部的 OK 按钮。

Jenkins dashboard New Item button

  1. 你将被带到项目的配置页面。目前,我们将保持设置不变。滚动到页面底部,点击 Save

你现在已经创建了一个空的流水线项目。在下一步中,你将创建一个 Jenkinsfile 并配置此项目以使用它。

配置 SCM 使用远程仓库

现在,你将配置你的 Jenkins 项目以从远程 Git 仓库检索其流水线定义。我们将使用一个包含预配置 Jenkinsfile 和示例应用程序的演示仓库。

演示仓库位于:https://github.com/labex-labs/jenkins-demo

让我们看一下我们将在远程仓库中使用的 Jenkinsfile

pipeline {
    agent any
    environment {
        DEPLOY_TARGET = 'staging'
    }
    stages {
        stage('Build') {
            steps {
                echo 'Building the application...'
                sh 'echo "Compiling source code..."'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing the application...'
                sh 'echo "Running unit tests..."'
            }
        }
        stage('Deploy') {
            steps {
                echo "Deploying the application to ${env.DEPLOY_TARGET}..."
                sh 'echo "Application deployed successfully!"'
            }
        }
    }
}

这个声明式流水线脚本包含多个阶段,并演示了关键概念:

  • pipeline { ... }: 定义整个流水线的核心块。
  • agent any: 指示 Jenkins 在任何可用代理上运行此流水线。
  • environment { ... }: 定义可在整个流水线中使用的环境变量。
  • stages { ... }: 包含流水线中所有阶段的包装器。
  • stage('...') { ... }: 定义特定的阶段。阶段有助于可视化工作流程。
  • steps { ... }: 包含在阶段中要执行的实际命令。
  • echo '...': 一个打印消息到构建日志的步骤。
  • sh '...': 一个执行 shell 命令的步骤。

现在,配置你的 Jenkins 项目以使用此远程仓库:

  1. 在浏览器中返回 Jenkins UI,并导航到 my-first-pipeline 项目页面。
  2. 点击左侧菜单中的 Configure
  3. 向下滚动到 Pipeline 部分。
  4. Definition 下拉菜单从 "Pipeline script" 更改为 Pipeline script from SCM
  5. 在出现的 SCM 下拉菜单中,选择 Git
  6. Repository URL 字段中,输入:https://github.com/labex-labs/jenkins-demo
  7. Script Path 字段中,输入:introduction-to-pipelines/Jenkinsfile
  8. 点击 Save

Jenkins pipeline configuration for remote Git repository

你的项目现已配置为执行远程 GitHub 仓库中定义的流水线。

运行流水线并检查输出

项目配置完成后,是时候运行流水线并查看其运行情况了。

  1. my-first-pipeline 项目页面上,点击左侧菜单中的 Build Now

  2. 将会安排一个新的构建,并显示在左侧的 Build History 面板中。在历史记录下方,Stage View 将显示 "Build" 阶段正在运行,并在完成后变为绿色。

    Pipeline stage view showing build progress

  3. 要查看详细输出,请点击 Build History 中的构建编号(例如 #1)。

  4. 在构建的摘要页面上,点击左侧菜单中的 Console Output

    Console output showing successful pipeline execution

  5. 滚动查看日志。你将找到流水线步骤中的消息,确认你的流水线已成功执行。

...
[Pipeline] { (Build)
[Pipeline] echo
Building the application...
[Pipeline] sh
+ echo Compiling source code...
Compiling source code...
[Pipeline] } // stage
[Pipeline] { (Test)
[Pipeline] echo
Testing the application...
[Pipeline] sh
+ echo Running unit tests...
Running unit tests...
[Pipeline] } // stage
[Pipeline] { (Deploy)
[Pipeline] echo
Deploying the application to staging...
[Pipeline] sh
+ echo Application deployed successfully!
Application deployed successfully!
[Pipeline] } // stage
...
Finished: SUCCESS

你已成功运行了你的第一个流水线并验证了其输出。请注意,流水线如何自动执行了远程仓库 Jenkinsfile 中定义的三个阶段(Build、Test、Deploy)。

理解流水线中的多个阶段

实际的流水线由多个阶段组成,例如构建、测试和部署应用程序。远程仓库中的 Jenkinsfile 已经包含了这些不同的阶段,演示了这一重要概念。

让我们看看流水线是如何通过多个阶段来组织的:

stages {
    stage('Build') {
        steps {
            echo 'Building the application...'
            sh 'echo "Compiling source code..."'
        }
    }
    stage('Test') {
        steps {
            echo 'Testing the application...'
            sh 'echo "Running unit tests..."'
        }
    }
    stage('Deploy') {
        steps {
            echo "Deploying the application to ${env.DEPLOY_TARGET}..."
            sh 'echo "Application deployed successfully!"'
        }
    }
}
  1. 返回 my-first-pipeline 项目的 Jenkins UI,如果尚未运行,请点击 Build Now 再次运行流水线。

  2. 观察项目仪表板上的 Stage View。你将看到代表你的 "Build"、"Test" 和 "Deploy" 阶段的三列。Jenkins 会在你构建通过每个阶段时可视化其进度。

    Jenkins Stage View showing Build Test Deploy stages

  3. 点击 Stage View 中的任何一个阶段,即可查看该特定阶段的详细日志。

  4. 注意每个阶段是如何按顺序执行的——Jenkins 会等待一个阶段成功完成后再进入下一个阶段。

通过为流水线设置阶段结构,你可以创建清晰且易于维护的工作流程,方便进行监控。每个阶段代表了你的 CI/CD 流程中的一个逻辑阶段,使得识别问题发生的位置和可视化构建进度变得容易。

理解流水线中的环境变量

在最后一步,你将学习环境变量。environment 指令允许你定义可在整个流水线中使用的变量,这非常适合管理配置设置,而无需在步骤中硬编码它们。

远程仓库中的 Jenkinsfile 已经通过一个指定部署目标的变量演示了这一概念。

让我们看看环境变量是如何定义和使用的:

pipeline {
    agent any
    environment {
        DEPLOY_TARGET = 'staging'
    }
    stages {
        // ... other stages ...
        stage('Deploy') {
            steps {
                echo "Deploying the application to ${env.DEPLOY_TARGET}..."
                sh 'echo "Application deployed successfully!"'
            }
        }
    }
}

关于 Jenkins 流水线中环境变量的关键点:

  • environment { ... } 块定义了在整个流水线中可用的变量。
  • 变量使用 ${env.VARIABLE_NAME} 语法访问。
  • 对于包含变量插值的字符串,必须使用双引号 ("),因为 Groovy 的变量插值仅在双引号字符串内有效。
  • 环境变量使你的流水线更加灵活且易于维护。
  1. 如果你还没有这样做,请点击 Build Now 在 Jenkins 中触发一个新的构建。

  2. 构建完成后,检查构建的 Console Output。在 "Deploy" 阶段的日志中,你将看到变量已被正确替换:

...
[Pipeline] { (Deploy)
[Pipeline] echo
Deploying the application to staging...
[Pipeline] sh
+ echo Application deployed successfully!
Application deployed successfully!
[Pipeline] } // stage
...
Finished: SUCCESS
  1. 注意 DEPLOY_TARGET 环境变量的值 staging 如何自动替换到 echo 语句中。

环境变量对于创建灵活的流水线至关重要,这些流水线可以轻松地为不同的环境(开发、暂存、生产)进行配置,而无需修改流水线代码本身。

总结

恭喜!你已成功完成了本 Jenkins 流水线入门教程。你已经掌握了将 CI/CD 工作流定义为代码的核心概念。

在本实验中,你已实践了如何:

  • 在 Jenkins UI 中创建 Pipeline 项目。
  • 配置项目以使用远程 Git 仓库(SCM)中的 Jenkinsfile
  • 理解具有多个阶段的声明式流水线(Declarative Pipeline)的结构。
  • 运行流水线并检查其控制台输出。
  • 观察流水线如何组织成逻辑阶段以实现清晰和条理。
  • 理解环境变量的定义和使用方式,以使流水线更具动态性。

这些基础技能对于构建复杂的自动化流水线至关重要。你现在已准备好探索更高级的主题,例如使用参数、管理凭据以及与各种构建和部署工具集成。