说明:本文专为小白运维设计,全程避开复杂原理,只讲“怎么做”,所有命令可直接复制执行,步骤清晰可落地。核心目标:搭建GitLab CI/CD环境,实现代码提交后自动触发构建、测试(可选)、部署(可选),无需手动操作。
一、环境准备
1.1 服务器要求
-
系统:CentOS 7/8 或 Ubuntu 20.04(推荐CentOS 7,命令统一)
-
内存:≥4G(GitLab运行占内存,2G会卡顿)
-
硬盘:≥20G(存储代码、构建产物)
-
网络:服务器能联网(下载GitLab、依赖),开放80、443、22端口
1.2 提前安装的依赖
登录服务器(用Xshell、Putty等工具,账号密码登录),依次执行以下命令,安装必备依赖:
# 1. 更新系统软件(CentOS)
yum update -y
# 2. 安装依赖包(CentOS)
yum install -y curl policycoreutils openssh-server openssh-clients postfix
# 3. 启动postfix(GitLab发送邮件通知用,可选,小白可跳过)
systemctl start postfix
systemctl enable postfix
# 若为Ubuntu系统,替换上面2、3步为:
# apt update -y
# apt install -y curl openssh-server ca-certificates postfix
# systemctl start postfix
# systemctl enable postfix
二、GitLab 服务搭建
GitLab是CI/CD的核心(代码仓库+CI/CD调度),我们搭建社区版(免费,足够小白使用)。
2.1 安装GitLab(CentOS 7为例)
# 1. 添加GitLab官方仓库
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
# 2. 安装GitLab社区版(ce=社区版,ee=企业版,收费)
yum install -y gitlab-ce
# 3. 初始化GitLab(首次安装必须执行,会设置默认管理员密码)
gitlab-ctl reconfigure
说明:初始化过程可能需要5-10分钟,耐心等待,出现“gitlab Reconfigured!”即为成功。
2.2 配置GitLab
主要配置访问地址和端口,避免端口冲突(默认80端口,若80被占用,需修改)。
# 编辑GitLab配置文件
vim /etc/gitlab/gitlab.rb
# 找到以下2行,修改为服务器IP(比如服务器IP是192.168.1.100)
external_url 'http://192.168.1.100' # 访问GitLab的地址,不用加端口(默认80)
gitlab_rails['gitlab_port'] = 80 # 端口,默认80,若被占用(比如nginx),改为8080
# 保存退出(vim操作:按ESC,输入:wq,回车)
# 重新加载配置(修改配置后必须执行)
gitlab-ctl reconfigure
gitlab-ctl restart
2.3 验证GitLab是否搭建成功
-
打开本地浏览器,输入配置的地址:http://服务器IP(比如http://192.168.1.100)
-
首次访问会提示设置管理员密码(用户名:root,密码自定义,记住!)
-
设置完成后,登录GitLab(root+刚才设置的密码),能看到GitLab首页,即为搭建成功。
提示:若访问不了,检查服务器防火墙是否开放80端口(执行命令:firewall-cmd --permanent --add-port=80/tcp,然后firewall-cmd --reload)。
三、GitLab Runner 安装(自动提交/构建的“执行者”)
GitLab本身不执行构建/提交操作,需要安装GitLab Runner(相当于“工人”),负责接收GitLab的指令,执行自动提交、构建等任务。
3.1 安装GitLab Runner(CentOS 7为例)
# 1. 下载GitLab Runner安装脚本
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | sudo bash
# 2. 安装GitLab Runner
yum install -y gitlab-runner
# 3. 启动并设置开机自启
systemctl start gitlab-runner
systemctl enable gitlab-runner
# 4. 验证Runner是否安装成功
gitlab-runner status
出现“gitlab-runner.service - GitLab Runner”且状态为“active (running)”,即为成功。
3.2 注册Runner(关键:让Runner和GitLab关联)
注册就是告诉Runner:“你要听哪个GitLab的指挥,负责哪个项目的任务”,步骤如下(全程跟着提示走):
步骤1:获取GitLab的注册令牌(从GitLab界面获取)
-
登录GitLab(root账号),创建一个测试项目(比如test-cicd,后续用来测试自动提交)。
-
进入项目 → 左侧菜单“Settings” → “CI/CD” → 找到“Runners” → 点击“Expand”。
-
复制“Registration token”(注册令牌,一串字母+数字,后续要用)。
步骤2:执行注册命令
gitlab-runner register
执行后,会出现5个提示,依次输入以下内容(小白直接照填,括号内为说明):
1. Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
# 输入GitLab的访问地址,比如 http://192.168.1.100/ (末尾加/)
2. Please enter the gitlab-ci token for this runner:
# 粘贴刚才复制的“Registration token”(注册令牌)
3. Please enter the gitlab-ci description for this runner:
# 给Runner起个名字,随便填,比如 test-runner
4. Please enter the gitlab-ci tags for this runner (comma separated):
# 输入标签(后续CI配置会用到),填 test-tag (直接复制,不用改)
5. Please enter the executor: shell, docker+machine, docker-ssh+machine, kubernetes, custom, docker, docker-ssh, parallels, virtualbox, ssh:
# 选择执行器,小白直接输入 shell (回车,最简单,无需额外配置)
提示:出现“Runner registered successfully.”即为注册成功。
步骤3:验证Runner是否关联成功
回到GitLab项目的“CI/CD → Runners”页面,会看到“Active runners”列表中,有刚才注册的Runner(名字、标签和你填的一致),即为关联成功。
四、自动提交配置
自动提交的核心是:在GitLab项目中添加一个名为 .gitlab-ci.yml 的文件,这个文件告诉Runner“代码提交后,要执行什么操作”(比如自动拉取代码、编译、部署等)。
小白简化版:我们配置“代码提交后,自动打印提交信息、拉取最新代码”(后续可扩展为自动部署,这里先实现基础自动提交)。
4.1 新建.gitlab-ci.yml文件(项目中添加)
-
登录GitLab,进入刚才创建的test-cicd项目。
-
点击项目首页的“+”号 → “New file”。
-
文件名填写:
.gitlab-ci.yml(必须这个名字,大小写不能错)。 -
文件内容复制以下代码(小白不用改,直接复制):
`# 定义 stages(阶段),按顺序执行
stages:
-
pull # 拉取最新代码
-
commit-check # 检查提交信息
第一个任务:拉取最新代码
pull_code:
stage: pull # 关联到pull阶段
tags:
- test-tag # 必须和Runner的标签一致(之前注册时填的test-tag)
script:
-
echo "开始拉取最新代码..."
-
git pull # 拉取代码(若项目是新创建的,可忽略这行,后续提交后会自动执行)
-
echo "代码拉取完成!"
第二个任务:检查提交信息
check_commit:
stage: commit-check # 关联到commit-check阶段
tags:
- test-tag
script:
-
echo "当前提交的分支:$CI_COMMIT_BRANCH"
-
echo "当前提交的作者:$CI_COMMIT_AUTHOR"
-
echo "当前提交的信息:$CI_COMMIT_MESSAGE"
-
echo "自动提交验证成功!"`
-
点击页面底部的“Commit changes”(提交文件),填写提交信息(比如“添加CI/CD配置文件”),再点击“Commit changes”。
4.2 配置自动触发条件
默认情况下,只要代码提交(git push)到项目的任何分支,就会自动触发CI/CD任务(执行.gitlab-ci.yml里的脚本)。
若想修改触发条件(比如只在main分支提交时触发),可在.gitlab-ci.yml文件中添加:
only:
- main # 只有提交到main分支,才触发自动任务
五、测试自动提交
我们通过“本地提交代码到GitLab项目”,测试CI/CD是否自动执行。
5.1 本地准备
# 1. 本地安装Git(Windows/Mac,自行下载安装,很简单)
# 2. 克隆GitLab项目到本地(复制项目的SSH地址)
git clone http://192.168.1.100/root/test-cicd.git # 替换为你的GitLab项目地址
# 3. 进入项目目录
cd test-cicd
# 4. 新建一个测试文件,模拟代码提交
echo "test ci/cd auto commit" > test.txt
# 5. 提交代码到GitLab
git add test.txt
git commit -m "测试自动提交,添加test.txt文件"
git push origin main # 推送到main分支
5.2 查看自动任务执行结果(GitLab界面)
-
登录GitLab,进入test-cicd项目。
-
点击顶部菜单“CI/CD” → “Pipelines”(流水线)。
-
会看到一条新的流水线(状态为“Running”或“Success”),点击流水线的ID(比如#1)。
-
进入后,能看到两个任务(pull_code、check_commit),若两个任务都显示“passed”(绿色对勾),说明自动提交成功!
-
点击每个任务,可查看执行日志(比如打印的提交信息、拉取代码的过程)。
提示:若任务显示“failed”(红色叉号),点击任务查看日志,大部分是权限问题(比如Runner没有项目权限),可重新注册Runner,或检查标签是否一致。
六、小白常见问题(必看,避坑)
问题1:GitLab访问不了
解决:① 检查服务器IP是否正确;② 检查防火墙是否开放80端口(执行firewall-cmd --permanent --add-port=80/tcp,然后firewall-cmd --reload);③ 重启GitLab(gitlab-ctl restart)。
问题2:Runner注册失败,提示“connection refused”
解决:GitLab的访问地址填写错误,比如少加了末尾的“/”,或IP错误,重新执行gitlab-runner register,正确填写GitLab地址。
问题3:流水线任务失败,提示“git: command not found”
解决:服务器没有安装Git,执行yum install -y git(CentOS)或apt install -y git(Ubuntu),安装后重启Runner(systemctl restart gitlab-runner)。
问题4:提交代码后,没有触发流水线
解决:① 检查.gitlab-ci.yml文件名是否正确(必须是这个名字,大小写不能错);② 检查Runner的标签和配置文件中的tags一致;③ 检查项目“CI/CD → Runners”中,Runner是否为“Active”状态。
七、总结
小白运维搭建GitLab CI/CD核心3步:① 搭建GitLab服务;② 安装并注册GitLab Runner;③ 项目中添加.gitlab-ci.yml配置文件。