Jenkins 流水线入门

JenkinsBeginner
立即练习

简介

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

在本实验中,你将重点学习声明式流水线(Declarative Pipeline)语法,它提供了一种结构化且用户友好的方式来创建流水线。通过本实验,你将能够:

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

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

在 Jenkins 中创建流水线项目

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

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

创建流水线项目

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

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

配置 SCM 以使用本地 Git 仓库

现在,你将配置 Jenkins 项目,使其从 Jenkins 容器内托管的本地 Git 仓库中获取流水线定义。这使得实验独立于外部网络,同时仍然使用真实的「来自 SCM 的流水线脚本」(Pipeline script from SCM)工作流。

演示仓库位于:git://localhost/pipeline-demo.git

让我们检查一下 Jenkins 将从该仓库加载的 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(仓库 URL)字段中,输入:git://localhost/pipeline-demo.git
  7. Script Path(脚本路径)字段中,输入:Jenkinsfile
  8. 点击 Save(保存)。

流水线 SCM 配置

你的项目现在已设置为执行本地 Git 仓库中定义的流水线。

运行流水线并检查输出

项目配置完成后,是时候运行流水线并查看其实际效果了。

  1. my-first-pipeline 项目页面上,点击左侧菜单中的 Build Now(立即构建)。

  2. 一个新的构建将被调度,并出现在左侧的 Build History(构建历史)面板中。在历史记录下方,Stage View(阶段视图)将显示 "Build" 阶段正在运行,并在完成后变为绿色。

    流水线项目构建历史

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

  4. 在构建的摘要页面上,点击左侧菜单中的 Console Output(控制台输出)。

    显示流水线成功执行的控制台输出

  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 会在构建通过每个阶段时可视化其进度。

    显示 Build Test Deploy 阶段的 Jenkins 阶段视图

  3. 点击阶段视图中的任何阶段,查看该特定阶段的详细日志。

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

通过使用阶段来组织流水线,你可以创建一个清晰且易于维护的工作流,便于监控。每个阶段代表 CI/CD 过程中的一个逻辑环节,这使得识别问题发生的位置以及可视化构建进度变得非常容易。

理解流水线中的环境变量

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

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

让我们检查一下环境变量是如何定义和使用的:

pipeline {
    agent any
    environment {
        DEPLOY_TARGET = 'staging'
    }
    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 中创建流水线项目。
  • 配置项目以使用托管在 Jenkins 本地 Git 仓库中的 Jenkinsfile
  • 理解包含多个阶段的声明式流水线结构。
  • 运行流水线并检查其控制台输出。
  • 观察流水线如何组织为逻辑阶段以实现清晰度和组织性。
  • 理解如何定义和使用环境变量以使流水线更具动态性。

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