Jenkins - 设置构建作业
Jenkins - Pipeline 基础 (Jenkinsfile)
Section titled “Jenkins - Pipeline 基础 (Jenkinsfile)”虽然 Jenkins 支持各种作业类型,但定义构建、测试和部署流程的现代标准是 Jenkins Pipeline,它使用基于 Groovy 的领域特定语言(DSL)。Pipeline 定义在一个名为 Jenkinsfile 的文本文件中。
为什么选择 Pipeline?
- Pipeline 即代码: Pipeline 定义位于版本控制中(通常与你的应用程序代码一起),提供历史记录、可评审性和弹性。
- 持久性: Pipeline 可以承受 Jenkins 控制器重启。
- 扩展性: 利用 Jenkins 插件和 Groovy 脚本的全部功能。
- 可视化: 清晰的工作流阶段视觉呈现(尤其使用 Blue Ocean 时)。
- 灵活性: 支持复杂工作流、条件执行、并行性和用户输入。
Pipeline 主要有两种语法变体:声明式 Pipeline 和脚本化 Pipeline。声明式是较新、更结构化的语法,因其简洁性和更清晰的语法而通常被推荐使用。脚本化通过原始 Groovy 脚本提供了更多的灵活性。
创建你的第一个 Pipeline 作业
Section titled “创建你的第一个 Pipeline 作业”步骤 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)。
- 分支指定符 (Branch Specifier): 指定包含 Jenkinsfile 的分支(例如,
-
- 脚本路径 (Script Path): Pipeline 文件在仓库中的路径(默认为仓库根目录下的
Jenkinsfile)。
- 脚本路径 (Script Path): Pipeline 文件在仓库中的路径(默认为仓库根目录下的
基本声明式 Jenkinsfile 结构
Section titled “基本声明式 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 失败!' // 示例:发送失败通知 } }}说明:
agent: 指定整个 Pipeline 或特定阶段应在哪里执行。agent any意味着 Jenkins 将使用任何可用的 agent。你可以指定 label(agent { label 'linux' })、Docker 镜像(agent { docker { image 'node:16' } })、Kubernetes Pod 等。stages: 包含一个或多个stage块,代表工作流的逻辑部分。stage: 定义一个不同的阶段(例如,“Build”、“Test”、“Deploy”)。阶段会在 Jenkins UI 中可视化显示。steps: 包含要在阶段内执行的实际命令。使用内置步骤(echo、用于 Shell 脚本的sh、用于 Windows 批处理的bat、git、junit等)或由插件提供的步骤(docker.build、slackSend、archiveArtifacts)。post: 定义在stages块完成后运行的操作,基于 Pipeline 的状态(always、success、failure、unstable、changed)。非常适合用于清理、通知和发布报告。
运行 Pipeline
Section titled “运行 Pipeline”步骤 4:在 Pipeline 配置页面上点击“保存”。
步骤 5:从 Pipeline 的主页面点击“立即构建”。
步骤 6:观察构建进度。你会看到:
- 构建历史 (Build History): 显示正在运行和已完成的构建。
- 阶段视图 (Stage View): (经典 UI 或 Blue Ocean)可视化显示通过已定义阶段的进度。
- 控制台输出 (Console Output): 提供所有已执行命令和步骤的详细日志。
如果构建失败,阶段视图会突出显示失败的阶段,并且控制台输出将包含错误消息。
这涵盖了创建和运行 Jenkins Pipeline 的基础知识。后续章节将探讨如何在 Jenkinsfile 结构中添加测试、部署、通知以及更高级的功能。