从零搭建Jenkins+GitLab持续集成环境:详细教程
文章目录
- 从零搭建Jenkins+GitLab持续集成环境:详细教程
- 从零搭建Jenkins+GitLab持续集成环境:详细教程
-
- 引言
- 一、基础理论:先搞懂核心概念
-
- [1.1 什么是持续集成(CI)?](#1.1 什么是持续集成(CI)?)
- [1.2 核心工具分工](#1.2 核心工具分工)
- [1.3 两种主流开发模型对比](#1.3 两种主流开发模型对比)
- 二、环境准备:服务器与依赖说明
-
- [2.1 服务器要求(最低配置)](#2.1 服务器要求(最低配置))
- [2.2 系统环境说明](#2.2 系统环境说明)
- 三、第一步:部署GitLab代码托管服务器
-
- [3.1 基础环境配置(必做)](#3.1 基础环境配置(必做))
-
- [3.1.1 关闭防火墙与核心防护](#3.1.1 关闭防火墙与核心防护)
- [3.1.2 安装依赖环境](#3.1.2 安装依赖环境)
- [3.2 安装GitLab](#3.2 安装GitLab)
-
- [3.2.1 上传并安装GitLab包](#3.2.1 上传并安装GitLab包)
- [3.2.2 关键配置GitLab](#3.2.2 关键配置GitLab)
- [3.3 启动GitLab并验证](#3.3 启动GitLab并验证)
- 四、第二步:GitLab项目管理实践(团队协作配置)
-
- [4.1 创建开发群组(Group)](#4.1 创建开发群组(Group))
- [4.2 创建团队用户(Member)](#4.2 创建团队用户(Member))
- [4.3 创建项目(Project)](#4.3 创建项目(Project))
- [4.4 分配项目权限](#4.4 分配项目权限)
- 五、第三步:Git代码管理操作(开发者视角)
-
- [5.1 本地Git环境配置](#5.1 本地Git环境配置)
- [5.2 克隆GitLab项目到本地](#5.2 克隆GitLab项目到本地)
- [5.3 初始化项目并提交代码](#5.3 初始化项目并提交代码)
- [5.4 SSH免密配置(避免重复输入密码)](#5.4 SSH免密配置(避免重复输入密码))
-
- [5.4.1 本地生成SSH密钥对](#5.4.1 本地生成SSH密钥对)
- [5.4.2 查看并复制公钥](#5.4.2 查看并复制公钥)
- [5.4.3 GitLab配置公钥](#5.4.3 GitLab配置公钥)
- [5.4.4 切换SSH方式推送代码](#5.4.4 切换SSH方式推送代码)
- 六、第四步:Jenkins与GitLab集成(持续集成核心)
-
- [6.1 Jenkins基础环境搭建](#6.1 Jenkins基础环境搭建)
-
- [6.1.1 安装JDK(Jenkins依赖Java)](#6.1.1 安装JDK(Jenkins依赖Java))
- [6.1.2 安装Jenkins](#6.1.2 安装Jenkins)
- [6.1.3 初始化Jenkins](#6.1.3 初始化Jenkins)
- [6.2 Jenkins配置GitLab凭证](#6.2 Jenkins配置GitLab凭证)
-
- [6.2.1 安装Git插件](#6.2.1 安装Git插件)
- [6.2.2 配置用户名密码凭证(简单易操作)](#6.2.2 配置用户名密码凭证(简单易操作))
- [6.2.3 配置SSH密钥凭证(推荐,免密)](#6.2.3 配置SSH密钥凭证(推荐,免密))
- [6.3 测试Jenkins与GitLab集成](#6.3 测试Jenkins与GitLab集成)
-
- [6.3.1 创建FreeStyle项目](#6.3.1 创建FreeStyle项目)
- [6.3.2 配置源码管理](#6.3.2 配置源码管理)
- [6.3.3 构建测试](#6.3.3 构建测试)
- 七、总结与扩展
-
- [7.1 环境价值](#7.1 环境价值)
- [7.2 后续扩展方向](#7.2 后续扩展方向)
- [7.3 常见问题排查](#7.3 常见问题排查)
从零搭建Jenkins+GitLab持续集成环境:详细教程
引言
在敏捷开发流行的今天,「持续集成(CI)」已经成为团队协作的核心支撑------它能让开发者频繁提交代码,通过自动化构建、测试快速发现问题,避免代码集成时的"灾难"。而实现持续集成的核心工具组合,正是 GitLab(代码托管)+ Jenkins(自动化构建)。
本文将从基础理论到实操落地,一步步教你搭建完整的代码管理与持续集成环境。每个命令都附带详细注释,每个步骤都说明"为什么这么做",即使是新手也能轻松跟上!
一、基础理论:先搞懂核心概念
在动手前,我们先理清几个关键概念,避免盲目操作:
1.1 什么是持续集成(CI)?
持续集成(Continuous Integration)简单说就是:开发者频繁将代码提交到主干,通过自动化测试、构建验证代码可用性,核心是"早发现、早解决问题"。
核心流程:
- 开发者提交代码到GitLab仓库
- 仓库触发自动化测试(验证代码语法、功能)
- 自动化构建(将源码编译为可运行的程序包)
- 第二轮全面测试(压力测试、集成测试)
- 部署到测试/生产服务器
- 异常时快速回滚
1.2 核心工具分工
- GitLab:代码托管平台,相当于"代码仓库",存储所有源码,支持团队协作、权限控制;
- Jenkins:持续集成服务器,相当于"自动化管家",负责拉取代码、编译、测试、打包、部署;
- Git:本地代码版本控制工具,连接开发者本地与GitLab仓库。
1.3 两种主流开发模型对比
| 开发模型 | 优势 | 劣势 |
|---|---|---|
| 瀑布模型 | 流程简单、阶段清晰,适合需求固定的项目 | 线性流程,用户末期才能看到成果,不适应需求变化 |
| 敏捷开发 | 迭代开发(拆分为小周期)、增量交付(每个版本有完整功能),降低风险 | 对团队协作要求高,需要自动化工具支撑 |
我们搭建的环境正是为了适配敏捷开发,支持快速迭代和自动化构建。
二、环境准备:服务器与依赖说明
2.1 服务器要求(最低配置)
| 服务器角色 | IP地址(示例) | 推荐配置 | 需安装软件 |
|---|---|---|---|
| 代码托管服务器(GitLab) | 192.168.10.23 | 4G内存+2核CPU | GitLab-12.4.2、SSH、Postfix(邮件服务) |
| 持续集成服务器(Jenkins) | 192.168.10.13 | 2G内存+2核CPU | Jenkins、JDK 8+、Maven、Git |
2.2 系统环境说明
- 操作系统:CentOS 7/8(兼容稳定性最好)
- 所有操作均以「root用户」执行(避免权限问题,生产环境可按需配置普通用户)
三、第一步:部署GitLab代码托管服务器
GitLab是团队协作的核心,先搭建好GitLab,才能进行后续代码管理。
3.1 基础环境配置(必做)
3.1.1 关闭防火墙与核心防护
GitLab需要多个端口通信(80、22、82等),初期关闭防火墙方便配置(生产环境需按需开放端口):
bash
# 永久关闭防火墙,并立即生效(--now表示当前生效)
systemctl disable firewalld --now
# 关闭SELinux核心防护(临时关闭,重启后失效;永久关闭需修改配置文件)
setenforce 0
3.1.2 安装依赖环境
GitLab运行需要SSH、邮件等依赖,一键安装:
bash
# 安装依赖包(policycoreutils:安全相关,openssh:SSH服务,postfix:邮件服务)
yum -y install policycoreutils openssh-server openssh-clients postfix
# 设置SSH服务开机自启,并启动SSH(Git仓库需SSH协议通信)
systemctl enable sshd && systemctl start sshd
# 设置Postfix开机自启,并启动(GitLab需要发送邮件通知,如密码重置、提交提醒)
systemctl enable postfix && systemctl start postfix
3.2 安装GitLab
3.2.1 上传并安装GitLab包
先下载GitLab安装包(推荐版本12.4.2,稳定兼容),上传到服务器/opt目录,然后安装:
bash
# 进入安装包所在目录(假设包在/opt下)
cd /opt
# 安装GitLab(-y表示自动确认安装)
yum install -y gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm
3.2.2 关键配置GitLab
GitLab的核心配置文件是/etc/gitlab/gitlab.rb,主要配置访问地址和端口:
bash
# 用vim编辑GitLab配置文件
vim /etc/gitlab/gitlab.rb
在文件中找到以下配置项,修改为自己的服务器信息(按/键搜索关键词):
ruby
# 23行左右:配置GitLab访问地址(必须带协议http/https,加端口82避免冲突)
external_url 'http://192.168.10.23:82'
# 1112行左右:配置Nginx监听端口(与external_url的端口一致)
nginx['listen_port'] = 82
保存退出vim(按Esc,输入:wq回车)。
3.3 启动GitLab并验证
bash
# 重载GitLab配置(修改配置后必须执行,让配置生效)
gitlab-ctl reconfigure
# 重启GitLab服务(确保所有组件启动)
gitlab-ctl restart
访问验证
打开浏览器,输入配置的地址http://192.168.10.23:82,会看到GitLab的密码重置页面:
- 初始用户:
root - 设置新密码(如
root@123,需包含大小写、数字、特殊字符) - 设置完成后,用
root/root@123登录GitLab。
四、第二步:GitLab项目管理实践(团队协作配置)
登录GitLab后,我们需要创建「群组-用户-项目」,模拟真实团队协作场景。
4.1 创建开发群组(Group)
群组相当于"部门",用于管理多个项目,方便权限统一分配:
- 登录GitLab后,点击顶部「Create a group」;
- 填写群组信息(示例):
- Group name:
devops(群组名称,自定义) - Group slug:
devops(群组路径,URL中显示,唯一) - Description:
devops团队项目管理(可选,说明用途) - Visibility level:
Public(公开,测试环境用;生产环境选Private)
- Group name:
- 点击「Create group」完成创建。
4.2 创建团队用户(Member)
创建普通用户,用于开发人员提交代码(避免所有人用root账号):
- 点击顶部「Admin Area」(管理员区域)→ 左侧「Users」→ 「New user」;
- 填写用户信息:
- Name:
zhangsan(用户名,真实姓名) - Username:
zhangsan(登录用户名,唯一) - Email:
zhangsan@gitlab.com(用于接收密码重置邮件)
- Name:
- 点击「Create user」创建;
- 重置用户密码:
- 进入用户详情页(Admin Area→Users→zhangsan),点击「Edit」;
- 填写新密码(如
abc@1234),确认后保存; - 该用户登录时会强制修改密码,按提示操作即可。
4.3 创建项目(Project)
项目相当于"具体的软件项目",存储源码:
- 点击顶部「New project」;
- 选择「Blank project」,填写项目信息:
- Project name:
myweb(项目名称) - Project slug:
myweb(项目路径) - Group:选择
devops(归属到之前创建的群组) - Description:
我的第一个Web项目(可选) - Visibility level:
Public(公开)
- Project name:
- 点击「Create project」完成创建。
4.4 分配项目权限
给普通用户zhangsan分配项目权限,让他能提交代码:
方式1:直接添加到项目(推荐)
- 进入项目「Settings」→ 「Members」;
- 输入用户名
zhangsan,选择权限角色:- 角色说明:
- Guest:仅能查看项目,不能提交;
- Reporter:能查看、创建issue,不能提交代码;
- Developer:能提交代码、创建分支,适合开发人员;
- Maintainer:能管理项目、合并代码,适合技术负责人;
- 角色说明:
- 选择「Maintainer」(测试环境给高权限),点击「Add to project」。
方式2:通过群组添加(批量授权)
如果多个项目都需要同一批用户,可直接给群组授权:
- 进入群组「Members」→ 「Add new member」;
- 输入
zhangsan,选择权限,点击「Add to group」; - 该用户会自动获得群组下所有项目的对应权限。
五、第三步:Git代码管理操作(开发者视角)
现在切换到开发人员zhangsan的视角,学习如何通过Git操作代码,与GitLab仓库交互。
5.1 本地Git环境配置
首先在开发者本地(或Jenkins服务器)安装Git,并配置全局信息:
bash
# 安装Git(CentOS系统,其他系统需对应命令)
yum install git -y
# 查看Git版本,验证安装成功
git --version
# 配置Git全局用户信息(提交代码时会显示该作者信息)
git config --global user.name "zhangsan" # 用户名,与GitLab用户名一致
git config --global user.email "zhangsan@gitlab.com" # 邮箱,与GitLab邮箱一致
5.2 克隆GitLab项目到本地
将GitLab上的myweb项目克隆到本地,开始开发:
bash
# 进入本地存放项目的目录(如/opt)
cd /opt
# 克隆项目(HTTP方式,URL从GitLab项目页面复制)
git clone http://192.168.10.23:82/devops/myweb.git
# 查看克隆后的项目目录(会生成myweb文件夹,包含.git版本控制文件)
ls -A myweb/
5.3 初始化项目并提交代码
在本地项目中创建文件,提交到GitLab仓库:
bash
# 进入项目目录
cd myweb/
# 创建README.md文件(项目说明文档)
touch README.md
# 将文件添加到Git暂存区(准备提交)
git add README.md
# 提交代码到本地仓库(-m后是提交说明,必须填写,说明本次修改内容)
git commit -m "初始化项目:添加README.md"
# 推送到GitLab远程仓库(-u origin master:关联远程master分支,后续可直接用git push)
git push -u origin master
执行git push后,会提示输入GitLab用户名(zhangsan)和密码(修改后的密码),验证通过后即可推送成功。
5.4 SSH免密配置(避免重复输入密码)
每次推送都输入密码很麻烦,配置SSH免密登录,一次配置永久生效:
5.4.1 本地生成SSH密钥对
bash
# 生成SSH密钥对(-t rsa:加密算法,-C:备注邮箱,-b 4096:密钥长度)
ssh-keygen -t rsa -C "zhangsan@gitlab.com" -b 4096
# 一路回车,使用默认路径(~/.ssh/)和空密码(无需设置密码)
5.4.2 查看并复制公钥
bash
# 查看公钥内容(id_rsa.pub是公钥,id_rsa是私钥,私钥不能泄露)
cat ~/.ssh/id_rsa.pub
复制输出的公钥内容(从ssh-rsa开始到邮箱结束)。
5.4.3 GitLab配置公钥
- 登录GitLab(zhangsan账号)→ 点击头像 → 「Settings」→ 「SSH Keys」;
- 在「Key」输入框粘贴复制的公钥;
- 点击「Add key」完成配置。
5.4.4 切换SSH方式推送代码
bash
# 进入项目目录
cd /opt/myweb/
# 查看当前远程仓库地址(之前是HTTP方式)
git remote show origin
# 删除原有HTTP方式的远程地址
git remote remove origin
# 添加SSH方式的远程地址(URL从GitLab项目页面复制,选择SSH方式)
git remote add origin git@192.168.10.23:devops/myweb.git
# 验证SSH连接(首次连接会提示是否信任,输入yes回车)
git remote show origin
# 测试推送(修改一个文件,推送无需输入密码)
echo "<h3>Hello GitLab!</h3>" >> index.html # 创建index.html文件
git add index.html # 添加到暂存区
git commit -m "添加index.html首页" # 提交
git push # 直接推送,无需输入密码
六、第四步:Jenkins与GitLab集成(持续集成核心)
Jenkins是自动化构建的核心,现在配置Jenkins,实现从GitLab拉取代码、自动构建。
6.1 Jenkins基础环境搭建
6.1.1 安装JDK(Jenkins依赖Java)
bash
# 安装JDK 8(Jenkins兼容最好的版本)
yum install java-1.8.0-openjdk-devel -y
# 验证JDK安装成功
java -version
6.1.2 安装Jenkins
bash
# 下载Jenkins仓库配置文件
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
# 导入Jenkins公钥(避免安装时校验失败)
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
# 安装Jenkins
yum install jenkins -y
# 启动Jenkins并设置开机自启
systemctl enable jenkins && systemctl start jenkins
# 查看Jenkins状态(确保显示active(running))
systemctl status jenkins
6.1.3 初始化Jenkins
-
浏览器访问
http://192.168.10.13:8080(Jenkins默认端口8080); -
按提示获取初始密码:
bash# 查看Jenkins初始密码 cat /var/lib/jenkins/secrets/initialAdminPassword -
粘贴密码登录,选择「Install suggested plugins」(安装推荐插件);
-
创建管理员用户(如admin/admin@123),完成初始化。
6.2 Jenkins配置GitLab凭证
Jenkins需要访问GitLab仓库,需配置凭证(用户名密码或SSH密钥)。
6.2.1 安装Git插件
- 进入Jenkins → 「Manage Jenkins」→ 「Manage Plugins」→ 「Available Plugins」;
- 搜索「Git Plugin」,勾选后点击「Install without restart」;
- 等待插件安装完成(需联网)。
6.2.2 配置用户名密码凭证(简单易操作)
- 进入Jenkins → 「Manage Jenkins」→ 「Manage Credentials」→ 「System」→ 「Global credentials」→ 「Add Credentials」;
- 选择凭证类型「Username with password」;
- 填写信息:
- Username:GitLab用户名(zhangsan)
- Password:GitLab密码(abc@1234)
- ID:gitlab-user-pass(自定义标识,方便后续选择)
- Description:GitLab用户名密码凭证(备注)
- 点击「OK」保存。
6.2.3 配置SSH密钥凭证(推荐,免密)
- 在Jenkins服务器生成SSH密钥对(步骤同5.4.1);
- 将公钥配置到GitLab(步骤同5.4.3);
- 进入Jenkins凭证管理,选择「SSH Username with private key」;
- 填写信息:
- Username:GitLab用户名(zhangsan)
- Private Key:粘贴Jenkins服务器的私钥(cat ~/.ssh/id_rsa)
- ID:gitlab-ssh-key(自定义标识)
- 点击「OK」保存。
6.3 测试Jenkins与GitLab集成
创建一个Jenkins项目,测试是否能成功拉取GitLab代码:
6.3.1 创建FreeStyle项目
- 进入Jenkins → 「New Item」;
- 输入项目名称「test01」,选择「Freestyle project」,点击「OK」。
6.3.2 配置源码管理
- 在项目配置页面,找到「Source Code Management」,选择「Git」;
- 填写GitLab项目URL:
- HTTP方式:
http://192.168.10.23:82/devops/myweb.git - SSH方式:
git@192.168.10.23:devops/myweb.git
- HTTP方式:
- 选择对应的凭证(之前配置的用户名密码或SSH密钥);
- 点击「Save」保存配置。
6.3.3 构建测试
- 进入项目页面,点击「Build Now」;
- 查看构建日志(点击构建记录后的「Console Output」);
- 若日志显示「Successfully cloned」,说明拉取代码成功,集成生效!
七、总结与扩展
7.1 环境价值
通过本文的步骤,我们搭建了一套完整的「GitLab代码管理 + Jenkins持续集成」环境,支持:
- 团队协作:通过GitLab的群组、用户、权限管理,规范代码提交;
- 自动化构建:Jenkins自动拉取代码、编译、打包,减少手动操作;
- 敏捷开发:支持快速迭代,提交代码后自动验证,早发现问题。
7.2 后续扩展方向
- 配置CI/CD流水线:使用Jenkins Pipeline,将构建、测试、部署流程写成脚本,自动化执行;
- 集成自动化测试:在Jenkins中添加单元测试、接口测试步骤,失败时自动通知;
- 部署到生产服务器:通过Jenkins将构建好的项目包,自动部署到Tomcat、Nginx等服务器;
- 配置WebHook:实现GitLab提交代码后,Jenkins自动触发构建,无需手动点击。
7.3 常见问题排查
- GitLab访问不了:检查防火墙是否关闭、external_url配置是否正确、GitLab服务是否启动;
- Jenkins拉取代码失败:检查凭证是否正确、Git插件是否安装、网络是否能连通GitLab服务器;
- SSH免密失败:检查公钥是否配置正确、私钥是否粘贴完整、文件权限是否正确(~/.ssh目录权限700)。
这套环境是团队开发的基础,后续可根据实际需求不断优化,实现更高效的自动化流程。如果在操作中遇到问题,欢迎在评论区交流!