一、Jenkins 安装
1.1 依赖环境:Java JDK
Jenkins 是基于 Java 开发的持续集成工具,必须安装对应版本的 JDK。
- 支持策略:Jenkins 各版本对 Java 版本有明确要求(通常 Jenkins 2.357+ 需 Java 11 或 17,旧版可用 Java 8)。请根据所选 Jenkins 版本下载匹配的 JDK。
- 下载地址:
- 官方下载:Oracle JDK 下载
- 国内镜像(推荐):清华大学开源软件镜像站 → 目录
/8/jdk/x64/windows/(以 JDK 8 为例)
建议:使用 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 包运行。
- Windows:提供 MSI 安装包,也可使用 WAR 包通过
- 初次启动:访问
http://localhost:8080(默认端口),根据提示从日志或指定文件中获取初始管理员密码,完成解锁。
1.3 初始化配置
- 创建管理员账号:按向导设置用户名、密码、邮箱。
- 安装推荐插件:首次启动会提示安装插件,建议选择“安装推荐插件”,其中包含 Git、Pipeline 等常用插件。
若网络受限,可切换至国内镜像源(在插件管理 → Advanced 中设置 Update Site 为清华大学镜像)。 - 后续插件管理:若需额外插件(如 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 风格),并拆分说明各阶段作用。
脚本关键点说明:
- 参数化构建:通过
parameters定义Target、BaseCommit、OutputZip,实现动态指定提交 ID 和输出文件名。 - 多仓库/多目录:使用
checkout的relativeTargetDir将不同版本的代码检出到独立目录(TARGET和BASE),便于对比。 - 条件执行:
when指令使 BASE 相关阶段仅在BaseCommit非空时执行,避免不必要的操作。 - 环境变量:通过
environment设置 Qt 路径并追加到PATH,确保编译工具可用。 - 后置操作:
post块根据构建结果输出提示。
2.2 远程触发构建(Webhook + 令牌)
为了实现 Git 提交后自动触发 Jenkins 构建,需要配置:
- Jenkins 端:在项目配置的“构建触发器”中勾选 “触发远程构建 (例如, 使用脚本)”,并填写 身份验证令牌(任意字符串,如
myToken)。该令牌用于区分不同任务,不作为用户认证。 - 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)
- 在仓库的 Webhook 设置中添加 Jenkins 的触发 URL,格式为:
- 安全加固:
- 使用 Jenkins 的 API Token(在用户设置中生成)替代明文密码,用于 Webhook 的认证(例如在 URL 中添加
?api_token=...)(API Token设置的值记得复制和保存,后续无法在设置中看到)。 - 在 Git 端配置 IP 白名单,允许 Jenkins 服务器的出口 IP,避免被 Git 服务拦截。
- 使用 Jenkins 的 API Token(在用户设置中生成)替代明文密码,用于 Webhook 的认证(例如在 URL 中添加
建议:远程构建时携带 Commit ID 参数,因为同一仓库的不同分支或历史版本均可通过 Commit ID 唯一标识,只需保证构建流程通用即可。
三、从节点(Agent)配置
当主节点(Master)负载较高或需要多平台(Windows/Linux/ARM)构建时,需要添加从节点(Agent)分担任务。
3.1 前置条件
- 网络互通:从节点必须能够访问主节点的 IP 和端口(默认 8080),反之主节点也需要能连接从节点(通常通过 SSH 或 JNLP 协议)。
- Java 环境:从节点同样需要安装 JDK(版本需与主节点兼容),并配置
JAVA_HOME。
3.2 添加节点的步骤(以 Web 界面操作为例)
- 进入 系统管理 → 节点管理 → 新建节点。
- 输入节点名称(如
agent-linux-arm),类型选择 “固定节点”。 - 配置关键参数:
- 执行器数量:并发构建数,根据机器性能设置。
- 远程工作目录:从节点上用于存放构建资源的路径(如
/home/jenkins/workspace)。 - 标签:非常重要,用于区分节点特性(如
linux、windows、arm64、x86_64)。在 Pipeline 中可通过agent { label 'xxx' }指定。 - 启动方式:
- 通过 SSH 启动(Linux 节点):填写主机 IP、认证凭证(用户名/密码或 SSH 密钥)。
- 通过 JNLP 启动(通用):提供
agent.jar下载链接,手动在从节点执行java -jar agent.jar -jnlpUrl ...。
- 保存后,主节点会尝试连接从节点。若使用 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 包、压缩包),便于追溯和部署。