【CI/CD】Jenkins-持续集成(CI)和持续部署(CD)工具
Jenkins 是一个开源的持续集成(CI)和持续部署(CD)工具,用于自动化构建、测试和部署软件项目
·
Jenkins 简介
Jenkins 是一个开源的持续集成(CI)和持续部署(CD)工具,用于自动化构建、测试和部署软件项目。它支持:
- 多种版本控制系统(Git、SVN等)
- 丰富的插件生态系统(超过 1500 个插件)
- 分布式构建(跨多台机器)
- 流水线(Pipeline)可视化编排
适用于 C++ 、Java 等项目的自动化构建、单元测试、代码质量检查等场景。
安装指南(Windows/Linux)
前提条件
- Java 环境:Jenkins 需要 Java 运行环境(推荐 JDK 11 或 17)
- Windows/Linux 均需先安装 JDK
- 下载地址:Oracle JDK 或 OpenJDK
Windows 安装
-
下载安装包
访问 Jenkins 官网,下载 Windows 安装包(.msi文件)。 -
运行安装程序
- 双击
.msi文件,按向导安装 - 默认端口:
8080(可在安装过程中修改) - 服务自动注册为
Jenkins
- 双击
-
初始配置
- 浏览器访问
http://localhost:8080 - 解锁密码在
C:\Program Files\Jenkins\secrets\initialAdminPassword - 选择 “Install suggested plugins”(安装推荐插件)
- 浏览器访问
-
创建管理员账户
设置用户名和密码。
Linux 安装(Ubuntu/Debian)
# 1. 安装 Java
sudo apt update
sudo apt install openjdk-11-jdk
# 2. 添加 Jenkins 仓库
curl -fsSL https://pkg.jenkins.io/debian/jenkins.io.key | sudo tee \
/usr/share/keyrings/jenkins-keyring.asc > /dev/null
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
https://pkg.jenkins.io/debian binary/ | sudo tee \
/etc/apt/sources.list.d/jenkins.list > /dev/null
# 3. 安装 Jenkins
sudo apt update
sudo apt install jenkins
# 4. 启动服务
sudo systemctl start jenkins
sudo systemctl enable jenkins # 设置开机自启
# 5. 访问
http://<服务器IP>:8080
解锁密码路径:
/var/lib/jenkins/secrets/initialAdminPassword
Jenkins 使用指南(C++/Java 项目)
1. 基础配置
- 插件安装:
- 必需插件:Git、Pipeline、Maven Integration(Java)、CMake Plugin(C++)
- 管理路径:Manage Jenkins > Plugins
- 全局工具配置:
- Manage Jenkins > Tools 中配置:
- Java:JDK 路径
- Git:可执行文件路径
- Maven(Java):安装版本
- CMake(C++):安装路径
- Manage Jenkins > Tools 中配置:
2. Java 项目构建
场景:使用 Maven 构建 Spring Boot 应用
步骤:
- 创建新任务 → 选择 “Maven project”
- 源码管理:
- 选择 Git,填写仓库 URL(如
https://github.com/user/java-demo.git)
- 选择 Git,填写仓库 URL(如
- 构建触发器:
- 定时构建:
H/15 * * * *(每 15 分钟) - GitHub Webhook(推荐)
- 定时构建:
- Build 配置:
- Goals:
clean package
- Goals:
- 构建后操作:
- 归档 JAR 文件:
target/*.jar - 邮件通知构建结果
- 归档 JAR 文件:
3. C++ 项目构建
场景:使用 CMake 编译 C++ 项目
步骤:
- 创建新任务 → 选择 “Freestyle project”
- 源码管理:
- 配置 Git 仓库(如
https://github.com/user/cpp-demo.git)
- 配置 Git 仓库(如
- 构建环境:
- 添加构建步骤 → Execute Windows batch command(Win)或 Execute shell(Linux)
- 编译脚本示例(Linux):
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j4
- 测试集成:
- 添加构建步骤运行测试:
./build/unit_tests
- 添加构建步骤运行测试:
- 产物归档:
- 归档可执行文件:
build/app
- 归档可执行文件:
4. 流水线(Pipeline)高级用法
推荐使用 Jenkinsfile(代码化流水线):
Java 项目示例(Jenkinsfile):
pipeline {
agent any
tools {
maven 'Maven-3.8.6' // 全局工具中定义的 Maven 名称
}
stages {
stage('Checkout') {
steps {
git url: 'https://github.com/user/java-demo.git'
}
}
stage('Build') {
steps {
sh 'mvn clean package'
}
}
stage('Test') {
steps {
sh 'mvn test'
}
}
}
}
C++ 项目示例(Jenkinsfile):
pipeline {
agent any
environment {
BUILD_DIR = "build"
}
stages {
stage('Checkout') {
steps {
git branch: 'main',
url: 'https://github.com/user/cpp-demo.git'
}
}
stage('Build') {
steps {
sh "mkdir -p ${BUILD_DIR}"
dir(BUILD_DIR) {
sh 'cmake -DCMAKE_BUILD_TYPE=Release ..'
sh 'make'
}
}
}
stage('Test') {
steps {
sh "./${BUILD_DIR}/tests/run_tests"
}
}
}
}
最佳实践
- 安全配置:
- 启用 RBAC(Role-Based Access Control)
- 定期更新 Jenkins 和插件
- 构建优化:
- 使用并行阶段加速 Pipeline
- 利用缓存(如 Maven 本地仓库缓存)
- 集成扩展:
- 代码质量:集成 SonarQube
- 通知:Slack/邮件通知
- 部署:集成 Ansible 或 Docker
- 备份:
- 定期备份
JENKINS_HOME目录
- 定期备份
提示:Windows 上建议安装 Windows Agent 插件管理构建节点,Linux 使用 SSH Agent。
在 Jenkins 中实现跨平台编译(例如为 Windows、Linux、macOS 等不同平台构建应用)
通常有以下几种核心方法:
方法 1:使用多节点(主从架构)
原理:为每个目标平台配置独立的 Jenkins 代理节点(Agent),任务分发到对应节点执行本地编译。
步骤:
- 配置代理节点:
- 在目标机器(物理机/虚拟机)上安装 Java 和 Jenkins 代理。
- 在 Jenkins 管理界面添加节点:
Manage Jenkins → Manage Nodes and Clouds → New Node
设置节点名称、工作目录,并添加标签(如windows,linux,mac)。 - 通过 SSH 或 JNLP 启动代理。
- 配置任务:
- 在任务配置中勾选
Restrict where this project can be run。 - 输入目标平台标签(如
linux或windows)。
- 在任务配置中勾选
- 编写平台相关脚本:
- 在构建步骤中使用平台专属命令(如 Linux 用
sh,Windows 用bat)。
- 在构建步骤中使用平台专属命令(如 Linux 用
方法 2:使用 Docker 容器
原理:在 Jenkins 节点上运行 Docker 容器,每个容器提供不同编译环境。
步骤:
- 安装插件:
Docker和Docker Pipeline插件。 - 配置 Docker 环境:
- 在节点上安装 Docker,确保 Jenkins 用户有权限访问。
- 准备各平台的基础镜像(如
gcc、mingw、openjdk)。
- Pipeline 脚本示例(编译 Linux 和 Windows 程序):
pipeline { agent any stages { stage('Linux Build') { agent { docker { image 'gcc:latest' } } steps { sh 'gcc -o hello_linux hello.c' } } stage('Windows Build') { agent { docker { image 'mingw/w64' } // 使用 MinGW 交叉编译 } steps { sh 'x86_64-w64-mingw32-gcc -o hello.exe hello.c' } } } }
方法 3:交叉编译(Cross-Compilation)
适用场景:在单一平台(如 Linux)上生成其他平台(如 Windows)的可执行文件。
关键工具:
- C/C++:MinGW(Windows)、
aarch64-linux-gnu-gcc(ARM Linux)。 - Go:设置
GOOS和GOARCH环境变量(如GOOS=windows GOARCH=amd64)。 - Rust:
rustup target add x86_64-pc-windows-gnu。
Pipeline 示例(Go 跨平台编译):
stage('Cross-Compile') {
steps {
script {
def platforms = [
'windows': 'amd64',
'linux': 'amd64',
'darwin': 'arm64'
]
platforms.each { os, arch ->
sh "GOOS=${os} GOARCH=${arch} go build -o bin/app-${os}-${arch}"
}
}
}
}
方法 4:使用虚拟机/云环境
原理:通过插件动态创建云主机执行编译(适合无物理设备时)。
工具:
- 虚拟机:VMware 或 VirtualBox 插件。
- 云服务:AWS EC2、Azure VM、GCP 插件。
- 工具集成:HashiCorp Packer 构建镜像 + Terraform 管理资源。
最佳实践
- 标签管理:
为节点设置清晰的标签(如win-agent,mac-m1),任务通过标签匹配节点。 - 环境隔离:
优先使用 Docker 或虚拟机避免污染主机环境。 - 工具链配置:
用Jenkinsfile声明式 Pipeline 管理跨平台步骤,避免硬编码。 - 存储构建产物:
使用archiveArtifacts保存不同平台的输出文件:archiveArtifacts artifacts: 'bin/**/*'
常见问题解决
- 节点连接失败:检查防火墙、SSH 密钥或 JNLP 端口。
- 权限问题:确保 Jenkins 用户有 Docker/虚拟机操作权限。
- 依赖缺失:在 Dockerfile 或节点初始化脚本中预装编译工具。
- 路径差异:使用 Jenkins 环境变量(如
${WORKSPACE})避免绝对路径。
更多推荐
所有评论(0)