Skip to content

Jenkins - 设置构建作业

虽然 Jenkins 支持各种作业类型,但定义构建、测试和部署流程的现代标准是 Jenkins Pipeline,它使用基于 Groovy 的领域特定语言(DSL)。Pipeline 定义在一个名为 Jenkinsfile 的文本文件中。

为什么选择 Pipeline?

  • Pipeline 即代码: Pipeline 定义位于版本控制中(通常与你的应用程序代码一起),提供历史记录、可评审性和弹性。
  • 持久性: Pipeline 可以承受 Jenkins 控制器重启。
  • 扩展性: 利用 Jenkins 插件和 Groovy 脚本的全部功能。
  • 可视化: 清晰的工作流阶段视觉呈现(尤其使用 Blue Ocean 时)。
  • 灵活性: 支持复杂工作流、条件执行、并行性和用户输入。

Pipeline 主要有两种语法变体:声明式 Pipeline 和脚本化 Pipeline。声明式是较新、更结构化的语法,因其简洁性和更清晰的语法而通常被推荐使用。脚本化通过原始 Groovy 脚本提供了更多的灵活性。

步骤 1:前往 Jenkins 控制面板(dashboard),点击“新建项目”。

步骤 2:输入项目名称(例如,my-first-pipeline)。选择“Pipeline”选项。点击“确定”。

步骤 3:在配置页面上,向下滚动到“Pipeline”部分。在这里,你定义你的 Jenkinsfile 来自哪里:

  • 选项 A: Pipeline 脚本 (内联): (适合简单的测试/演示)直接在 Jenkins UI 中提供的文本框中编写你的 Pipeline 脚本。
  • 选项 B: 从 SCM 加载 Pipeline 脚本 (推荐): 选择此项以从源代码管理(SCM)系统(如 Git)拉取 Jenkinsfile。这是实际项目的标准做法。
    • SCM: 选择“Git”。
    • 仓库 URL (Repository URL): 输入你的 Git 仓库的 URL。
    • 凭据 (Credentials): 如果仓库是私有的,选择凭据。
    • 分支指定符 (Branch Specifier): 指定包含 Jenkinsfile 的分支(例如,*/main)。
    • 脚本路径 (Script Path): Pipeline 文件在仓库中的路径(默认为仓库根目录下的 Jenkinsfile)。

一个简单的声明式 Jenkinsfile 如下所示:

pipeline {
agent any // 1. 定义 Pipeline 运行的位置
stages { // 2. 定义工作流阶段
stage('Checkout') { // 3. 定义一个特定阶段
steps { // 4. 定义阶段内的操作
echo '正在检出代码...'
// 示例:git url: '...', branch: '...', credentialsId: '...'
// 如果使用“从 SCM 加载 Pipeline 脚本”,检出会自动发生
}
}
stage('Build') {
steps {
echo '正在构建项目...'
// Maven 示例:
// sh 'mvn clean package'
// Node.js 示例:
// sh 'npm install'
// sh 'npm run build'
// Windows 示例:
// bat 'msbuild MySolution.sln /p:Configuration=Release'
}
}
stage('Test') {
steps {
echo '正在运行测试...'
// Maven 示例:
// sh 'mvn test'
// Node.js 示例:
// sh 'npm test'
}
}
}
post { // 5. 定义阶段完成后执行的操作
always {
echo 'Pipeline 已完成。'
// 示例:清理工作区
// cleanWs()
// 示例:发布测试结果
// junit '**/target/surefire-reports/*.xml'
}
success {
echo 'Pipeline 成功!'
// 示例:发送成功通知
}
failure {
echo 'Pipeline 失败!'
// 示例:发送失败通知
}
}
}

说明:

  1. agent: 指定整个 Pipeline 或特定阶段应在哪里执行。agent any 意味着 Jenkins 将使用任何可用的 agent。你可以指定 label(agent { label 'linux' })、Docker 镜像(agent { docker { image 'node:16' } })、Kubernetes Pod 等。
  2. stages: 包含一个或多个 stage 块,代表工作流的逻辑部分。
  3. stage: 定义一个不同的阶段(例如,“Build”、“Test”、“Deploy”)。阶段会在 Jenkins UI 中可视化显示。
  4. steps: 包含要在阶段内执行的实际命令。使用内置步骤(echo、用于 Shell 脚本的 sh、用于 Windows 批处理的 bat、git、junit 等)或由插件提供的步骤(docker.build、slackSend、archiveArtifacts)。
  5. post: 定义在 stages 块完成后运行的操作,基于 Pipeline 的状态(always、success、failure、unstable、changed)。非常适合用于清理、通知和发布报告。

步骤 4:在 Pipeline 配置页面上点击“保存”。

步骤 5:从 Pipeline 的主页面点击“立即构建”。

步骤 6:观察构建进度。你会看到:

  • 构建历史 (Build History): 显示正在运行和已完成的构建。
  • 阶段视图 (Stage View): (经典 UI 或 Blue Ocean)可视化显示通过已定义阶段的进度。
  • 控制台输出 (Console Output): 提供所有已执行命令和步骤的详细日志。

如果构建失败,阶段视图会突出显示失败的阶段,并且控制台输出将包含错误消息。

这涵盖了创建和运行 Jenkins Pipeline 的基础知识。后续章节将探讨如何在 Jenkinsfile 结构中添加测试、部署、通知以及更高级的功能。