编写 Jenkinsfile ¶
第一周:Jenkins 和 Jenkinsfile 的基础
目标:了解 Jenkins 的基本概念和 Jenkinsfile 的基础知识。
学习内容:
Jenkins 的介绍:了解 Jenkins 是什么,以及它是如何工作的。
Jenkinsfile 的介绍:了解 Jenkinsfile 是什么,以及它的基本结构和用途。
资源推荐:
官方 Jenkins 用户文档。
Jenkins 官方网站上的教程和指南。
第二周:Jenkinsfile 的基本语法
目标:掌握 Jenkinsfile 的基本语法和构建步骤。
学习内容:
Pipeline 的概念:了解 Pipeline 模式及其重要性。
Jenkinsfile 中使用的基本语句和结构:学习如何定义 Stages、Steps 和环境变量等。
活动建议:
编写一个简单的 Jenkinsfile,实现代码的自动拉取和构建。
第三周:高级 Jenkinsfile 技能
目标:学习 Jenkinsfile 中的高级功能,包括分支、条件判断和错误处理。
学习内容:
分支策略:学习如何在 Jenkinsfile 中处理不同的分支。
条件判断:学习如何使用条件语句来控制 Pipeline 的执行流程。
错误处理:了解如何在 Jenkinsfile 中处理错误。
活动建议:
尝试编写一个复杂一点的 Jenkinsfile,包含条件判断和错误处理等。
第四周:与其他工具的集成
目标:了解如何将 Jenkins 与其他工具和服务(如 Git、Docker 和 Kubernetes)集成。
学习内容:
Git 集成:学习如何使用 Jenkins 自动化 Git 仓库的代码拉取和更新。
Docker 集成:了解如何使用 Jenkins 自动化 Docker 镜像的构建和部署。
Kubernetes 集成:学习如何利用 Jenkins 在 Kubernetes 环境中自动化部署和管理应用。
资源推荐:
相关工具的官方文档。
在线教程和课程。
1. Jenkins 简介 ¶
Jenkins 是一个开源的自动化服务器,它用于自动化各种任务,如构建、测试和部署软件。Jenkins 能够支持持续集成(CI)和持续部署(CD)的实践,帮助开发团队高效地交付软件。
2. Jenkinsfile 简介 ¶
Jenkinsfile 是一个文本文件,它用一种描述性的编码方式定义了 Jenkins Pipeline 的配置。使用 Jenkinsfile,开发者可以代码化的方式记录整个构建流程,包括环境准备、编译构建、测试以及部署等步骤。
Jenkinsfile 支持两种书写格式:
- 声明式(Declarative):用户友好,语法简洁,易于阅读和编写。
- 脚本式(Scripted):提供更高的灵活性和控制力,适用于复杂的流程。
创建你的第一个 Jenkinsfile ¶
1. 定义了一个包含三个阶段的 Pipeline:构建(Build)、测试(Test)和部署(Deploy)
# pipeline:定义了整个自动化流程。
# agent:指定 Jenkins 如何执行这个 Pipeline。agent any 是可在 Jenkins 环境中的任意一台机器上执行。
# stages:stages 区块包含了多个 stage,将整个流程分为多个阶段,每个阶段代表流程中的一个主要活动。
# stage:stage('Build'), stage('Test'), stage('Deploy')。
# steps:定义在一个 stage 中要执行的具体步骤。echo 是 Linux 命令。
pipeline {
agent { // 代理节点
node {
label "master" // 指定运行节点的标签或名称
customWorkspace "{workspace}" // 指定运行工作目录 (按需使用)
}
}
options {
timestamps() // 日志显示执行时间,需要安装插件
skipDefaultCheckout() // 删除隐式 ckeckout scm 语句
timeout(time:1, unit: 'HOURS') // 设置流水线超时设置 1h ,防止堵塞
}
stages {
stage('Build') {
steps {
echo 'Building...'
// 添加构建的命令或脚本
}
}
stage('Test') {
steps {
echo 'Testing...'
// 添加测试的命令或脚本
}
}
stage('Deploy') {
steps {
echo 'Deploying...'
// 添加部署的命令或脚本
}
}
}
post {
always {
script{
print('always')
}
}
succes {
script{
currentBuild.description += "\n 构建成功!" // 全局变量.构建描述
}
}
failure {
script{
currentBuild.description += "\n 构建失败!"
}
}
aborted {
script{
currentBuild.description += "\n 构建取消!"
}
}
}
}
options ¶
允许从流水线内部配置用于流水线的选项,比如重试机制、和限制时间
pipeline {
options {
timestamps() // 日志显示执行时间,需要安装插件
skipDefaultCheckout() // 删除隐式 ckeckout scm 语句
timeout(time:1, unit: 'HOURS') // 设置流水线超时设置 1h ,防止堵塞
}
}
- retry:失败时、重新尝试整个流水线次数
参数化构建 ¶
丰富 Jenkinsfile ¶
1. 环境及参数化构建 ¶
1. 环境变量 (environment) 非常适用于定义构建过程中需要用到的静态数据。例如,你可以定义数据库的连接信息、要部署到的服务器地址等。
pipeline {
agent any
environment {
MY_ENV_VARIABLE = 'SomeValue'
}
stages {
stage('Example') {
steps {
script {
echo "My environment variable is: ${env.MY_ENV_VARIABLE}"
}
}
}
}
}
2. 参数化构建 (parameters) 允许你在启动构建时动态输入或选择参数,非常适合需要根据不同情况进行调整的构建。
pipeline {
agent any
parameters {
string(name: 'GREETING', defaultValue: 'Hello', description: 'The greeting you want to use')
choice(name: 'ENVIRONMENT', choices: ['Staging', 'Production'], description: 'The target environment')
}
stages {
stage('Example') {
steps {
script {
echo "${params.GREETING}, the target environment is ${params.ENVIRONMENT}"
}
}
}
}
}
2. 分支和多环境处理 ¶
2. 使用 when 指令可以让你基于各种条件(如当前分支名称)来决定是否执行某个 stage。
pipeline {
agent any
stages {
stage('Deploy to Staging') {
when {
branch 'develop'
}
steps {
echo 'Deploying to Staging...'
}
}
stage('Deploy to Production') {
when {
branch 'main'
}
steps {
echo 'Deploying to Production...'
}
}
}
}