如何在Ubuntu上集成GitLab与Jenkins
导读:在 Ubuntu 上集成 GitLab 与 Jenkins 的完整步骤 一 环境准备与端口规划 准备两台或同一台 Ubuntu 22.04/24.04 主机,安装 Docker 与 Docker Compose(可选),并确保内存与磁盘...
在 Ubuntu 上集成 GitLab 与 Jenkins 的完整步骤
一 环境准备与端口规划
- 准备两台或同一台 Ubuntu 22.04/24.04 主机,安装 Docker 与 Docker Compose(可选),并确保内存与磁盘充足(GitLab 资源占用相对较高)。
- 端口规划建议:为避免冲突,可将 GitLab 改为 11000/11001/11002,保留 Jenkins 8080;若同机部署,请提前修改 GitLab 配置并生效。
- 快速安装 Docker(如未安装):
- sudo apt update & & sudo apt install -y docker.io docker-compose
- sudo systemctl start docker & & sudo systemctl enable docker
- 说明:下文同时给出本机部署与 Docker 部署两种路径,按需选择。
二 安装 GitLab 与 Jenkins
- 方式 A 本机安装(示例命令,按实际版本调整)
- GitLab 依赖与安装:
- sudo apt-get install -y curl openssh-server ca-certificates postfix
- curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
- sudo apt-get install -y gitlab-ee
- 修改端口(避免与 Jenkins 8080 冲突):编辑 /etc/gitlab/gitlab.rb
- external_url ‘http://< 你的IP或域名> :11000’
- unicorn[‘port’] = 11001
- prometheus[‘listen_address’] = ‘localhost:11002’
- 生效:sudo gitlab-ctl reconfigure
- Jenkins 安装:可使用官方 Debian 仓库或下载 .deb 包安装,安装后访问 http://:8080 完成初始化。
- GitLab 依赖与安装:
- 方式 B Docker 部署(更简洁,便于隔离与迁移)
- 启动 GitLab:
- docker run --detach --hostname gitlab.example.com --publish 443:443 --publish 80:80 --publish 22:22 --name gitlab --restart always --volume /srv/gitlab/config:/etc/gitlab --volume /srv/gitlab/logs:/var/log/gitlab --volume /srv/gitlab/data:/var/opt/gitlab gitlab/gitlab-ee:latest
- 启动 Jenkins:
- docker run -itd -p 8080:8080 -p 50000:50000 --restart=always --name jenkins -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts
- 可选:使用 docker-compose.yml 统一管理两服务(定义两个 service、持久化卷与端口映射)。
- 启动 GitLab:
三 在 GitLab 与 Jenkins 之间建立安全连接
- 在 GitLab 生成 Personal Access Token(具有 API 权限):User Settings → Access Tokens → 生成 Token(保存备用)。
- 在 Jenkins 安装插件:Manage Jenkins → Manage Plugins → 搜索并安装 GitLab Plugin。
- 在 Jenkins 配置 GitLab 连接:Manage Jenkins → Configure System → GitLab → 添加 GitLab 实例 URL 与 API Token,点击 Test Connection,应返回 Success。
四 配置触发与构建流水线
- 在 Jenkins 创建 Pipeline 项目:
- 在 “Build Triggers” 勾选 Build when a change is pushed to GitLab. GitLab CI Service URL,点击 Generate 生成 Secret token(保存备用)。
- 在 Pipeline 脚本中使用 GitLab 插件提供的 updateGitlabCommitStatus 将阶段状态回写到 GitLab 提交/合并请求,便于在 GitLab 流水线视图查看构建进度与结果:
- pipeline {
agent any
stages {
stage(‘pull code’) {
steps {
script {
try {
updateGitlabCommitStatus name: ‘code-checkout’, state: ‘running’
git branch: ‘master’, credentialsId: ‘gitlab’, url: ‘http:///group/project.git’
updateGitlabCommitStatus name: ‘code-checkout’, state: ‘success’
} catch (e) {
updateGitlabCommitStatus name: ‘code-checkout’, state: ‘failed’
}
}
}
}
stage(‘build’) {
steps {
script {
try {
updateGitlabCommitStatus name: ‘code-build’, state: ‘running’
sh ‘make build || true’
updateGitlabCommitStatus name: ‘code-build’, state: ‘success’
} catch (e) {
updateGitlabCommitStatus name: ‘code-build’, state: ‘failed’
}
}
}
}
}
}
- pipeline {
- 在 GitLab 项目设置 Webhook:Settings → Webhooks → 添加
- URL:http://:8080/project/
- Secret Token:填入上一步 Jenkins 生成的 Secret token
- 触发事件:建议勾选 Push events、Merge request events 等
- 点击 Test 验证,返回 200/201 表示连通。
五 代码拉取认证与常见问题排查
- 代码拉取认证方式
- HTTPS:在 Jenkins 的 “Credentials” 中添加 Username with password 或 GitLab Personal Access Token,在 Pipeline 的 git 指令中使用该 credentialsId。
- SSH:在 Jenkins 服务器生成 SSH 密钥对,将公钥添加到 GitLab(User Settings → SSH Keys),Jenkins 凭据选择 SSH Username with private key;Pipeline 使用 git@:/.git。
- 常见问题与要点
- 端口冲突:同机部署时务必调整 GitLab 端口(如 11000/11001/11002),或调整 Jenkins 端口,确保两者不冲突。
- Webhook 403/404:确认 Secret token 一致、Jenkins 项目名正确、CSRF 保护策略允许来自 GitLab 的请求(如使用 “Build when a change is pushed to GitLab” 触发器可避免部分 CSRF 问题)。
- 构建状态回写失败:确保 GitLab Plugin 已安装,且在 Pipeline 中正确调用 updateGitlabCommitStatus,并为每个阶段设置不同的 name。
- 首次构建失败:若仓库为空(无分支),请先在 GitLab 仓库提交一次代码再触发构建。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在Ubuntu上集成GitLab与Jenkins
本文地址: https://pptw.com/jishu/750939.html
