跳转至

编写 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...'
            }
        }
    }
}