Jenkins自动化流程

前言

在公司开发游戏项目时,有配合测试工程师来部署Jenkins打包Unity的Android项目。了解到了Jenkins自动打包的流程,所以写篇博客来记录一下。

一、Jenkins是什么

Jenkins是一个开源软件项目,是基于Java开发的一个持续集成工具(CI),具有友好的操作界面,主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。通常与版本管理工具(SCM)、构建工具结合适用。

二、Jenkins的下载与安装

  • java环境安装:

    由于Jenkins是根据java开发的,所有运行jenkins需要java环境(JDK),安装JDK可看另一个博客:JDK安装

  • Jenkin下载安装:

    进入Jenkins官网,点击Download后选择对应的平台和版本进行下载。

    image-20240723161457784

    然后再双击jenkins安装包文件,执行安装。

    1. 设置安装路径,选择电脑比较大的内存盘:

    image-20240723162417484

    1. 选择Run service as LocalSystem使用本地系统账号

    image-20240723162359656

    1. 选择未被占用的端口

    image-20240723162214021

    1. 一直点击下一步,直到安装完成。
    2. 在浏览器中访问http://localhost:8080(端口号),则会打开如下界面则表示jenkins安装完成。

    image-20240723162503608

  • Jenkins命令行指令:

    1. net stop jenkins:关闭jenkins进程
    2. net start jenkins:开启jenkins进程
    3. jenkins start:开启jenkins进行(必须进入jenkins的安装路径)
    4. jenkins restart:重启jenkins进行(必须进入jenkins的安装路径)

三、Jenkinsfile语法

编写Pipeline Script:

pipeline {
    agent any
    parameters {
        // 字符串参数
        string(name: 'WorkPath', defaultValue: 'dev', description: '工作路径') 
        // 下拉选择参数
        choice(name: 'Channel', choices: ['huawei', 'xiaomi', 'vivo'], description: '渠道包')
        // 布尔参数
        booleanParam(name: 'AB', defaultValue: false, description: '是否打包AB')
        // 文本参数(多行文本)
        text(name: 'CUSTOM_CONFIG', defaultValue: '', description: '自定义配置')
    }
    stages {
        stage('Build AB') {
            steps {
                script {
                    if (params.AB) {
                        echo "开始打ab包"
                    }
                }
            }
        }
        stage('Build') {
            steps {
                script {
                    // 通过 params.参数名 访问参数
                    echo "WorkPath:${params.WorkPath}"
                    echo "渠道包:${params.Channel}"
                }
            }
        }
    }
}
  • pipeline:表示一个流水线步骤

  • agent:指定了整个流水线或特定的部分, 将会在Jenkins环境中执行的位置,这取决于 agent 区域的位置。该部分必须在 pipeline 块的顶层被定义。

    1. agent any:在任何可用的代理上执行流水线或阶段。

    2. agent none: 当在 pipeline 块的顶部没有全局代理, 该参数将会被分配到整个流水线的运行中并且每个 stage 部分都需要包含他自己的 agent 部分。

    3. agent label:在提供了标签的 Jenkins 环境中可用的代理上执行流水线或阶段

  • stages:包含一系列一个或多个 stage 指令, stages 部分是流水线描述的大部分"work" 的位置。 建议 stages 至少包含一个 stage 指令用于连续交付过程的每个离散部分,比如构建, 测试, 和部署。

  • steps:steps 部分在给定的 stage 指令中执行的定义了一系列的一个或多个steps。

  • post:流水线阶段完成状态后进行。

    1. always:无论流水线或阶段的完成状态如何。

    2. changed:只有当前流水线或阶段的完成状态与它之前的运行不同时执行。

    3. failure:只有当前流水线或阶段的完成状态为失败时执行。

    4. success:只有当前流水线或阶段的完成状态为成功时执行。

    5. aborted:只有当前流水线或阶段的完成状态为打断时执行。

  • parameters:供了一个用户在触发流水线时应该提供的参数列表。这些用户指定参数的值可通过 params 对象提供给流水线步骤。

    1. string类型:字符串类型的参数, 例如: parameters { string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '') }
    2. booleanParam类型:布尔参数, 例如: parameters { booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '') }
    3. choice类型:选项参数,例如:parameters { choice(name: 'DEBUG_BUILD',choice:['ios','android','windows'], description: '') }
  • options:

    1. buildDiscarder:为最近的流水线运行的特定数量保存组件和控制台输出
    2. disableConcurrentBuilds:不允许同时执行流水线,例如: options { disableConcurrentBuilds() }
    3. timeout:设置流水线运行的超时时间, 在此之后,Jenkins将中止流水线。例如: options { timeout(time: 1, unit: 'HOURS') }
  • environment:制定一个 键-值对序列,该序列将被定义为所有步骤的环境变量。