Jenkins 简介

Jenkins 是一个开源的持续集成(CI)和持续部署(CD)工具,用于自动化构建、测试和部署软件项目。它支持:

  • 多种版本控制系统(Git、SVN等)
  • 丰富的插件生态系统(超过 1500 个插件)
  • 分布式构建(跨多台机器)
  • 流水线(Pipeline)可视化编排

适用于 C++ 、Java 等项目的自动化构建、单元测试、代码质量检查等场景。


安装指南(Windows/Linux)

前提条件
  • Java 环境:Jenkins 需要 Java 运行环境(推荐 JDK 11 或 17)

Windows 安装
  1. 下载安装包
    访问 Jenkins 官网,下载 Windows 安装包(.msi 文件)。

  2. 运行安装程序

    • 双击 .msi 文件,按向导安装
    • 默认端口:8080(可在安装过程中修改)
    • 服务自动注册为 Jenkins
  3. 初始配置

    • 浏览器访问 http://localhost:8080
    • 解锁密码在 C:\Program Files\Jenkins\secrets\initialAdminPassword
    • 选择 “Install suggested plugins”(安装推荐插件)
  4. 创建管理员账户
    设置用户名和密码。


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++):安装路径

2. Java 项目构建

场景:使用 Maven 构建 Spring Boot 应用
步骤

  1. 创建新任务 → 选择 “Maven project”
  2. 源码管理
    • 选择 Git,填写仓库 URL(如 https://github.com/user/java-demo.git
  3. 构建触发器
    • 定时构建:H/15 * * * *(每 15 分钟)
    • GitHub Webhook(推荐)
  4. Build 配置
    • Goals:clean package
  5. 构建后操作
    • 归档 JAR 文件:target/*.jar
    • 邮件通知构建结果

3. C++ 项目构建

场景:使用 CMake 编译 C++ 项目
步骤

  1. 创建新任务 → 选择 “Freestyle project”
  2. 源码管理
    • 配置 Git 仓库(如 https://github.com/user/cpp-demo.git
  3. 构建环境
    • 添加构建步骤 → Execute Windows batch command(Win)或 Execute shell(Linux)
  4. 编译脚本示例(Linux):
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j4
  1. 测试集成
    • 添加构建步骤运行测试:./build/unit_tests
  2. 产物归档
    • 归档可执行文件: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"
            }
        }
    }
}

最佳实践

  1. 安全配置
    • 启用 RBAC(Role-Based Access Control)
    • 定期更新 Jenkins 和插件
  2. 构建优化
    • 使用并行阶段加速 Pipeline
    • 利用缓存(如 Maven 本地仓库缓存)
  3. 集成扩展
    • 代码质量:集成 SonarQube
    • 通知:Slack/邮件通知
    • 部署:集成 Ansible 或 Docker
  4. 备份
    • 定期备份 JENKINS_HOME 目录

提示:Windows 上建议安装 Windows Agent 插件管理构建节点,Linux 使用 SSH Agent。

在 Jenkins 中实现跨平台编译(例如为 Windows、Linux、macOS 等不同平台构建应用)

通常有以下几种核心方法:


方法 1:使用多节点(主从架构)

原理:为每个目标平台配置独立的 Jenkins 代理节点(Agent),任务分发到对应节点执行本地编译。
步骤

  1. 配置代理节点
    • 在目标机器(物理机/虚拟机)上安装 Java 和 Jenkins 代理。
    • 在 Jenkins 管理界面添加节点:
      Manage Jenkins → Manage Nodes and Clouds → New Node
      设置节点名称、工作目录,并添加标签(如 windows, linux, mac)。
    • 通过 SSH 或 JNLP 启动代理。
  2. 配置任务
    • 在任务配置中勾选 Restrict where this project can be run
    • 输入目标平台标签(如 linuxwindows)。
  3. 编写平台相关脚本
    • 在构建步骤中使用平台专属命令(如 Linux 用 sh,Windows 用 bat)。

方法 2:使用 Docker 容器

原理:在 Jenkins 节点上运行 Docker 容器,每个容器提供不同编译环境。
步骤

  1. 安装插件
    DockerDocker Pipeline 插件。
  2. 配置 Docker 环境
    • 在节点上安装 Docker,确保 Jenkins 用户有权限访问。
    • 准备各平台的基础镜像(如 gccmingwopenjdk)。
  3. 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:设置 GOOSGOARCH 环境变量(如 GOOS=windows GOARCH=amd64)。
  • Rustrustup 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 管理资源。

最佳实践

  1. 标签管理
    为节点设置清晰的标签(如 win-agent, mac-m1),任务通过标签匹配节点。
  2. 环境隔离
    优先使用 Docker 或虚拟机避免污染主机环境。
  3. 工具链配置
    Jenkinsfile 声明式 Pipeline 管理跨平台步骤,避免硬编码。
  4. 存储构建产物
    使用 archiveArtifacts 保存不同平台的输出文件:
    archiveArtifacts artifacts: 'bin/**/*'
    

常见问题解决

  • 节点连接失败:检查防火墙、SSH 密钥或 JNLP 端口。
  • 权限问题:确保 Jenkins 用户有 Docker/虚拟机操作权限。
  • 依赖缺失:在 Dockerfile 或节点初始化脚本中预装编译工具。
  • 路径差异:使用 Jenkins 环境变量(如 ${WORKSPACE})避免绝对路径。
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐