Ubuntu环境下GitLab持续集成(CI)实施方法
在配置CI之前,需确保Ubuntu服务器上已安装并运行GitLab。若未安装,可通过以下命令快速部署(以Ubuntu 22.04为例):
# 更新系统并安装依赖
sudo apt update && sudo apt install -y curl openssh-server ca-certificates tzdata perl
# 添加GitLab官方仓库并安装
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
sudo apt install -y gitlab-ce
# 配置GitLab外部URL(替换为你的服务器IP或域名)
sudo vim /etc/gitlab/gitlab.rb
# 修改以下行(取消注释并替换URL)
external_url 'http://your_server_ip'
# 重新配置并启动GitLab
sudo gitlab-ctl reconfigure
sudo gitlab-ctl start
访问http://your_server_ip登录GitLab,完成初始设置。
GitLab Runner是负责执行.gitlab-ci.yml中定义任务的组件,需单独安装并注册到GitLab实例。
推荐使用Docker安装(轻量且易管理):
# 拉取GitLab Runner镜像并启动容器
docker run -d --name gitlab-runner \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \ # 允许Runner使用Docker
-v /srv/gitlab-runner/config:/etc/gitlab-runner \ # 持久化配置
gitlab/gitlab-runner:latest
验证容器运行状态:
docker ps
# 应看到名为"gitlab-runner"的容器处于"Up"状态
Settings → CI/CD → Runners,复制URL和Token(如https://gitlab.com和b6ac044b57cbb22073b95dd384e517)。docker exec -it gitlab-runner gitlab-runner register \
--non-interactive \
--executor "docker" \ # 使用Docker作为执行器(适合隔离环境)
--docker-image alpine:latest \ # 默认镜像(可根据项目需求修改,如`node:18`、`python:3.9`)
--url "http://gitlab.com" \ # 替换为你的GitLab实例URL
--registration-token "YOUR_REGISTRATION_TOKEN" \ # 粘贴复制的Token
--description "ubuntu-docker-runner" \ # Runner名称(自定义)
--tag-list "ubuntu,docker" \ # 标签(用于筛选Runner)
--run-untagged="true" \ # 允许执行未打标签的Job
--locked="false" # 不锁定Runner(允许其他项目使用)
注册成功后,Runner会出现在GitLab项目的Runners页面,状态为Active。
.gitlab-ci.yml文件(CI/CD流程定义).gitlab-ci.yml是GitLab CI的核心配置文件,位于项目根目录,用于定义阶段(Stages)、**任务(Jobs)**及执行逻辑。
以下是一个涵盖构建→测试→部署的基础配置(以Node.js项目为例):
stages:
- build # 构建阶段:编译代码、安装依赖
- test # 测试阶段:运行单元测试、集成测试
- deploy # 部署阶段:将应用发布到服务器
# 构建任务
build_job:
stage: build
script:
- echo "Installing dependencies..."
- npm install
- echo "Building project..."
- npm run build
artifacts: # 定义产物(供后续Job使用)
paths:
- node_modules/
- build/
# 测试任务(依赖build_job的产物)
test_job:
stage: test
script:
- echo "Running unit tests..."
- npm test
- echo "Running lint check..."
- npm run lint
rules:
- if: $CI_COMMIT_BRANCH == "master" # 仅在master分支触发
# 部署任务(仅master分支触发)
deploy_job:
stage: deploy
script:
- echo "Deploying to production server..."
- scp -r build/* user@remote_server:/var/www/html # 将构建产物复制到远程服务器
only:
- master # 限制触发分支
node_modules):cache:
paths:
- node_modules/
Settings → CI/CD → Variables中,在YAML中通过$VAR_NAME引用。rules或only/except控制Job触发条件(如仅在特定分支、标签或MR时运行)。将.gitlab-ci.yml文件提交到GitLab仓库,Runner会自动检测并执行流水线:
# 添加文件到本地仓库
git add .gitlab-ci.yml
# 提交并推送至远程仓库(如master分支)
git commit -m "Add GitLab CI configuration"
git push origin master
流水线状态可在GitLab项目页面的CI/CD → Pipelines查看,点击具体流水线可查看每个Job的日志和详情。
CI/CD → Pipelines查看所有流水线的运行状态(成功/失败/挂起)。build_job),可查看实时日志和错误信息(用于快速定位问题)。CI/CD → Pipelines页面点击Run pipeline,可选择分支或提交,手动触发流水线(适合测试或紧急发布)。通过以上步骤,即可在Ubuntu环境下实现GitLab的持续集成,自动化完成代码构建、测试和部署流程。根据项目需求,可进一步扩展.gitlab-ci.yml的功能(如集成Docker镜像构建、通知系统等)。