x_y
欢迎来到我的博客~
Jenkins 使用流程
Jenkins 使用流程

Jenkins 使用流程

一、Jenkins 安装

1.1 依赖环境:Java JDK

Jenkins 是基于 Java 开发的持续集成工具,必须安装对应版本的 JDK。

  • 支持策略:Jenkins 各版本对 Java 版本有明确要求(通常 Jenkins 2.357+ 需 Java 11 或 17,旧版可用 Java 8)。请根据所选 Jenkins 版本下载匹配的 JDK。
  • 下载地址

建议:使用 ZIP 包(免安装版),解压后手动配置环境变量 JAVA_HOME 并添加到 PATH,便于多版本管理。

1.2 Jenkins 本体安装

  • 下载:从 Jenkins 官网 选择对应操作系统(Windows / Linux / macOS)的稳定版(LTS)或每周更新版。
  • 安装方式
    • Windows:提供 MSI 安装包,也可使用 WAR 包通过 java -jar jenkins.war 运行。
    • Linux(以 CentOS/Ubuntu 为例):可通过 APT/YUM 源安装,或直接下载 WAR 包运行。
  • 初次启动:访问 http://localhost:8080(默认端口),根据提示从日志或指定文件中获取初始管理员密码,完成解锁。

1.3 初始化配置

  1. 创建管理员账号:按向导设置用户名、密码、邮箱。
  2. 安装推荐插件:首次启动会提示安装插件,建议选择“安装推荐插件”,其中包含 Git、Pipeline 等常用插件。
    若网络受限,可切换至国内镜像源(在插件管理 → Advanced 中设置 Update Site 为清华大学镜像)。
  3. 后续插件管理:若需额外插件(如 Git、Subversion、Docker、Slack 等),可在“系统管理 → 插件管理”中按需安装。

1.4 环境验证

  • 在 Jenkins 的“系统管理 → 系统配置”中可配置 JDK 路径(若使用全局工具),确保已正确关联。
  • 推荐安装 Git 客户端(若未自带),并在全局工具中配置 Git 可执行路径。

二、Jenkins 的使用

Jenkins 提供了两种主要的任务类型:自由风格项目(Freestyle Project) 和 流水线(Pipeline)

  • 自由风格:适合简单构建场景,通过 UI 配置源码管理、构建触发器、构建步骤(执行 Shell/Batch 命令)等,直观易上手。
  • 流水线:以代码(Jenkinsfile)定义整个构建、测试、部署流程,支持复杂逻辑、并行执行和版本控制,是现代化 CI/CD 的首选。

2.1 流水线脚本示例与解析

下面提供一个实际使用的 Pipeline 脚本(Declarative 风格),并拆分说明各阶段作用。

Jenkisn — pipeline解析

脚本关键点说明:

  • 参数化构建:通过 parameters 定义 TargetBaseCommitOutputZip,实现动态指定提交 ID 和输出文件名。
  • 多仓库/多目录:使用 checkout 的 relativeTargetDir 将不同版本的代码检出到独立目录(TARGET 和 BASE),便于对比。
  • 条件执行when 指令使 BASE 相关阶段仅在 BaseCommit 非空时执行,避免不必要的操作。
  • 环境变量:通过 environment 设置 Qt 路径并追加到 PATH,确保编译工具可用。
  • 后置操作post 块根据构建结果输出提示。

2.2 远程触发构建(Webhook + 令牌)

为了实现 Git 提交后自动触发 Jenkins 构建,需要配置:

  1. Jenkins 端:在项目配置的“构建触发器”中勾选 “触发远程构建 (例如, 使用脚本)”,并填写 身份验证令牌(任意字符串,如 myToken)。该令牌用于区分不同任务,不作为用户认证。
  2. Git 服务端(如 GitLab/GitHub):(配置webhook的账号需要管理员权限)
    • 在仓库的 Webhook 设置中添加 Jenkins 的触发 URL,格式为:
      http://<JENKINS_URL>/job/<JOB_NAME>/build?token=<TOKEN>
    • 若需传递参数(如 Commit ID),可使用 ?token=<TOKEN>&cause=...&Target=<COMMIT>,但参数传递需结合 Jenkins 的 Build With Parameters 插件或通过 JSON 体发送。(建议传递commit id,即40位的MD5)
  3. 安全加固
    • 使用 Jenkins 的 API Token(在用户设置中生成)替代明文密码,用于 Webhook 的认证(例如在 URL 中添加 ?api_token=...)(API Token设置的值记得复制和保存,后续无法在设置中看到)。
    • 在 Git 端配置 IP 白名单,允许 Jenkins 服务器的出口 IP,避免被 Git 服务拦截。

建议:远程构建时携带 Commit ID 参数,因为同一仓库的不同分支或历史版本均可通过 Commit ID 唯一标识,只需保证构建流程通用即可。


三、从节点(Agent)配置

当主节点(Master)负载较高或需要多平台(Windows/Linux/ARM)构建时,需要添加从节点(Agent)分担任务。

3.1 前置条件

  • 网络互通:从节点必须能够访问主节点的 IP 和端口(默认 8080),反之主节点也需要能连接从节点(通常通过 SSH 或 JNLP 协议)。
  • Java 环境:从节点同样需要安装 JDK(版本需与主节点兼容),并配置 JAVA_HOME

3.2 添加节点的步骤(以 Web 界面操作为例)

  1. 进入 系统管理 → 节点管理 → 新建节点
  2. 输入节点名称(如 agent-linux-arm),类型选择 “固定节点”
  3. 配置关键参数:
    • 执行器数量:并发构建数,根据机器性能设置。
    • 远程工作目录:从节点上用于存放构建资源的路径(如 /home/jenkins/workspace)。
    • 标签非常重要,用于区分节点特性(如 linuxwindowsarm64x86_64)。在 Pipeline 中可通过 agent { label 'xxx' } 指定。
    • 启动方式
      • 通过 SSH 启动(Linux 节点):填写主机 IP、认证凭证(用户名/密码或 SSH 密钥)。
      • 通过 JNLP 启动(通用):提供 agent.jar 下载链接,手动在从节点执行 java -jar agent.jar -jnlpUrl ...
  4. 保存后,主节点会尝试连接从节点。若使用 JNLP,需在从节点手工运行命令(或作为服务启动)。
    # 1. 下载 agent.jar(从 Jenkins 主节点获取)
    curl -O http://<JENKINS_URL>/jnlpJars/agent.jar
    # 2. 执行连接命令(将 URL 和 Secret 替换为实际值) java -jar agent.jar -jnlpUrl http://<JENKINS_URL>/computer/<NODE_NAME>/agent.jnlp -secret <SECRET> -workDir “/path/to/workdir”

3.3 从节点标签的使用

在 Pipeline 中,通过 agent { label 'kylin-arm' } 即可将构建任务调度到匹配标签的节点。
若同时存在多个节点,可组合标签(如 label 'linux && arm64')实现更精细的调度。

3.4 注意事项

  • 环境一致性:确保从节点上所有构建工具(编译器、库、脚本)与主节点(或其他节点)保持一致,或通过 Pipeline 脚本动态安装。
  • 权限控制:从节点上的 Jenkins 工作目录需有读写权限,执行构建的用户需具备必要的 sudo 权限(若脚本需要)。
  • 节点维护:定期清理从节点上的工作空间(可在构建后通过 cleanWs() 或 dir 内删除),避免磁盘空间耗尽。

补充建议

  • 构建后清理:在 Pipeline 的 post 块中加入 cleanWs() 可自动删除当前工作空间,防止旧文件影响下次构建。
  • 参数默认值:为参数提供合理的默认值(如示例中的 OutputZip),减少手动输入。
  • 日志归档:使用 archiveArtifacts 保存关键产物(如 deb 包、压缩包),便于追溯和部署。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注