在 Ubuntu 上设置 Jenkins 自动构建
一 环境准备与安装
- 安装 Java 17(推荐):sudo apt update && sudo apt install -y openjdk-17-jdk
- 导入 Jenkins 仓库并安装:
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c ‘echo deb https://pkg.jenkins.io/debian/ binary/ > /etc/apt/sources.list.d/jenkins.list’
sudo apt update && sudo apt install -y jenkins
- 启动并设置开机自启:sudo systemctl enable --now jenkins
- 查看初始管理员密码:sudo cat /var/lib/jenkins/secrets/initialAdminPassword
- 访问控制台:打开浏览器进入 http://<服务器IP>:8080,完成解锁与插件安装。
二 全局工具与插件配置
- 插件建议:安装 Git、Pipeline、JUnit、HTML Publisher 等常用插件(Manage Jenkins → Manage Plugins)。
- 全局工具路径:Manage Jenkins → Global Tool Configuration,添加并设置 JDK 17、Git、Maven(或 Node.js)路径,便于任务直接调用。
三 创建任务与自动触发方式
- 新建任务:New Item → 选择 Freestyle project 或 Pipeline。
- 源码管理:选择 Git,填写仓库 URL 与凭据,指定分支(如 main)。
- 构建触发器(常用三种):
- 定时轮询 SCM:Build periodically,示例 **H/5 * * * *** 表示每 5 分钟检查一次变更并触发构建。
- GitHub Webhook:项目中勾选 Build when a change is pushed to GitHub;在 GitHub 仓库 Settings → Webhooks 添加 Payload URL:http://:8080/github-webhook/,事件选 Just the push event。
- GitLab Webhook:项目中勾选 GitLab webhook,在 GitLab 项目设置 Webhook 指向 Jenkins 对应任务(需保持网络可达与 CSRF 配置一致)。
- 构建步骤:Add build step → Execute shell,示例命令:
- Java/Maven:sh ‘mvn clean package’
- Node.js/npm:sh ‘npm ci && npm run build’
- 构建后操作(可选):Archive the artifacts(如 target/*.jar)、Publish JUnit reports、HTML Publisher、邮件通知等。
四 Pipeline 方式示例
- 在代码根目录放置 Jenkinsfile,示例:
pipeline {
agent any
tools {
maven ‘Maven’
jdk ‘JDK17’
}
stages {
stage(‘Checkout’) { steps { git ‘https://github.com/username/myapp.git’ } }
stage(‘Build’) { steps { sh ‘mvn clean package -DskipTests’ } }
stage(‘Test’) { steps { sh ‘mvn test’ } }
stage(‘Archive’) { steps { archiveArtifacts artifacts: ‘target/*.jar’, fingerprint: true } }
}
}
- 任务类型选择 Pipeline,在配置中指向该仓库与分支(或直接在 Jenkinsfile 中定义 SCM)。
五 常见问题与排查
- 构建权限问题:在 Execute shell 中避免使用 sudo;如必须使用,请配置 Jenkins 用户免密或采用合适的权限提升策略。
- Webhook 未触发:确认 Jenkins URL 可达、端口 8080 对外开放、CSRF 保护配置与 Webhook 类型匹配;GitHub/GitLab 仓库的 Payload URL 与事件选择正确。
- 轮询不生效:检查 SCM 轮询 表达式(如 **H/5 * * * ***)与分支匹配;确保 Jenkins 能访问 Git 仓库(凭据与网络可达)。
- 工具未找到:在 Global Tool Configuration 正确设置 JDK/Git/Maven/Node.js 路径,并在任务中引用相同名称。