GitLab 与 Jenkins 集成的核心是:GitLab 生成 API Token + Jenkins 安装 GitLab 插件并配置全局连接 + GitLab 配置 Webhook 触发 Jenkins 构建,最终实现代码提交自动触发 CI/CD 全流程。
一、环境准备
- 已部署并可访问的 GitLab 服务(HTTP/HTTPS)
- 已部署并可访问的 Jenkins 服务(推荐 2.300+)
- 网络互通:GitLab 能访问 Jenkins 端口(默认 8080),Jenkins 能访问 GitLab 端口(默认 80/443)
- Jenkins 已安装:Git、GitLab Plugin、Pipeline(按需)
二、GitLab 侧配置(生成凭证 + 允许 Webhook)
1. 生成 GitLab API 访问令牌(用于 Jenkins 认证)
- 登录 GitLab → 右上角头像 → Edit Profile → Access Tokens
- 填写:
- Name :
jenkins-gitlab-integration - Expires at:按需设置(建议长期)
- Scopes :勾选
api(必须)、read_repository、write_repository
- Name :
- 点击 Create personal access token → 复制生成的 Token(仅显示一次,妥善保存)
2. 允许 GitLab 向本地网络发送 Webhook(内网环境必做)
- GitLab 管理员账号 → Admin Area → Settings → Network → Outbound requests
- 勾选:Allow requests to the local network from webhooks and integrations
- 保存
三、Jenkins 侧全局配置(连接 GitLab)
1. 安装 GitLab 插件
- Jenkins → Manage Jenkins → Manage Plugins → Available
- 搜索:GitLab Plugin 、Git Plugin → 安装并重启 Jenkins
2. 配置 GitLab 全局连接
- Manage Jenkins → Configure System → GitLab
- 点击 Add GitLab Server :
- Name :自定义(如
GitLab-Internal) - GitLab host URL :
http://gitlab.example.com(你的 GitLab 地址) - Credentials :点击 Add → Jenkins
- Kind :
GitLab API token - API Token:粘贴 GitLab 生成的 Token
- ID :
gitlab-api-token(自定义) - 保存
- Kind :
- 勾选:Enable authentication for '/project' end-point
- Name :自定义(如
- 点击 Test Connection → 显示 Success 即连通
- 保存系统配置
3. 配置 GitLab 代码拉取凭证(二选一)
- 方式 1:SSH 密钥(推荐)
- Jenkins 服务器生成密钥:
ssh-keygen -t ed25519 - 公钥添加到 GitLab:用户设置 → SSH Keys
- Jenkins → Manage Jenkins → Manage Credentials → 全局
- Add Credentials :Kind =
SSH Username with private key - Username :
git - Private Key:粘贴 Jenkins 服务器私钥
- ID:
gitlab-ssh
- Add Credentials :Kind =
- Jenkins 服务器生成密钥:
- 方式 2:用户名密码 / Token
- Kind =
Username with password - Username:GitLab 用户名
- Password:GitLab 访问 Token
- Kind =
四、创建 Jenkins 任务(自由风格 / Pipeline)
方案 A:自由风格项目(快速上手)
- New Item → 输入名称 → 选择 Freestyle project → OK
- 源码管理 :
- 选 Git
- Repository URL :GitLab 项目地址(
http://gitlab.example.com/group/project.git或git@gitlab.example.com:group/project.git) - Credentials:选择上面配置的 SSH / 用户名密码凭证
- 构建触发器 :
- 勾选:Build when a change is pushed to GitLab
- 复制生成的 Webhook URL (如
http://jenkins:8080/project/your-job) - 点击 Generate 生成 Secret token → 复制
- 构建步骤 :按需添加(如
echo "Build success"、mvn clean package、docker build等) - 保存任务
方案 B:Pipeline 项目(推荐企业级)
- New Item → 名称 → Pipeline → OK
- Pipeline → 选择 Pipeline script from SCM
- SCM:Git
- 填写 GitLab 仓库地址 + 凭证
- 脚本路径:
Jenkinsfile(项目根目录)
- 构建触发器:同自由风格,勾选 GitLab 触发并复制 Webhook URL + Secret token
- 保存
五、GitLab 配置 Webhook(触发 Jenkins)
- 进入 GitLab 项目 → Settings → Webhooks
- 填写:
- URL :粘贴 Jenkins 任务生成的 Webhook URL
- Secret token :粘贴 Jenkins 生成的 Secret token
- Trigger :勾选 Push events (代码推送触发)、Merge request events(合并请求触发)
- 取消勾选 Enable SSL verification(内网自签证书环境)
- 点击 Add webhook
- 测试:点击 Test → Push events → 返回 200 OK 即成功
六、编写 Jenkinsfile(Pipeline 示例)
在 GitLab 项目根目录创建 Jenkinsfile,定义 CI/CD stages:
groovy
pipeline {
agent any
stages {
stage('拉取代码') {
steps {
git url: 'http://gitlab.example.com/group/project.git',
credentialsId: 'gitlab-ssh',
branch: 'main'
}
}
stage('构建') {
steps {
sh 'mvn clean package -DskipTests'
}
}
stage('测试') {
steps {
sh 'mvn test'
}
}
stage('部署') {
steps {
// 示例:上传到服务器 / 部署到 K8s / 推送镜像
sh 'echo "Deploying to production..."'
}
}
}
post {
success {
echo 'CI/CD 流程执行成功!'
}
failure {
echo 'CI/CD 流程执行失败!'
}
}
}
七、完整 CI/CD 流程
- 开发者提交代码到 GitLab
- GitLab 发送 Webhook 到 Jenkins
- Jenkins 自动拉取最新代码
- 执行 Jenkinsfile 定义的:构建 → 测试 → 部署
- 构建结果自动回写到 GitLab(Merge Request 可见构建状态)
八、常见问题排查
- Webhook 测试失败(403/500)
- 检查 Jenkins 地址是否可从 GitLab 访问
- 确认 Secret token 一致
- 检查 GitLab 出站请求是否允许本地网络
- Jenkins 拉取代码失败
- 检查 GitLab 仓库地址与凭证是否正确
- 确认 Jenkins 服务器能解析 GitLab 域名
- 构建状态未同步到 GitLab
- 确认 GitLab Token 包含
api权限 - 检查 Jenkins 全局 GitLab 配置是否正确
- 确认 GitLab Token 包含
九、进阶优化
- 结合 SonarQube 做代码质量检测
- 结合 Nexus/Harbor 管理制品与镜像
- 多环境部署(dev/test/prod)通过分支 / 标签区分
- 构建结果通知(邮件、钉钉、企业微信)