1. 准备工作:安装GitLab(若未部署)
若你的Linux服务器尚未部署GitLab,需先完成安装。以Ubuntu为例,步骤如下:
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates tzdata perl
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
sudo apt-get install gitlab-ce
/etc/gitlab/gitlab.rb
中的external_url
(如http://your-server-ip
),然后执行sudo gitlab-ctl reconfigure
和sudo gitlab-ctl start
。2. 安装GitLab Runner(CI/CD执行代理)
GitLab Runner是执行.gitlab-ci.yml
中任务的必要组件,需在Linux服务器上安装:
curl -L --output /etc/apt/trusted.gpg.d/gitlab.asc https://packages.gitlab.com/gitlab/gitlab-runner/gpgkey
,并执行echo "deb https://packages.gitlab.com/gitlab/gitlab-runner/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gitlab-runner.list
;更新仓库后安装:sudo apt-get update && sudo apt-get install gitlab-ci-multi-runner -y
。docker run -d --name gitlab-runner --restart always --env TZ=Asia/Shanghai -v /home/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest
。3. 注册GitLab Runner
Runner需注册到GitLab项目才能接收任务:
sudo gitlab-runner register
(包管理器安装)或docker exec -it gitlab-runner gitlab-runner register
(Docker安装)。https://gitlab.com
或你的自托管GitLab地址);tags
设置);shell
(直接在服务器执行)或docker
(容器化执行),根据项目需求选择)。4. 创建.gitlab-ci.yml配置文件
在项目根目录下创建.gitlab-ci.yml
,定义CI/CD流程(核心配置)。示例如下:
stages:
- build # 构建阶段
- test # 测试阶段
- deploy # 部署阶段
variables: # 定义变量(可选)
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
build_job:
stage: build
image: maven:3.8.7-openjdk-11 # 使用Maven镜像
script:
- echo "Building project..."
- mvn clean package -DskipTests # 编译打包(跳过测试)
artifacts: # 传递产物给后续Job
paths:
- target/*.jar
expire_in: 1 hour # 产物有效期
test_job:
stage: test
image: maven:3.8.7-openjdk-11
script:
- echo "Running tests..."
- mvn test # 执行单元测试
deploy_job:
stage: deploy
image: alpine:latest # 使用轻量级镜像
before_script:
- apk add --no-cache openssh # 安装SSH客户端(用于部署)
script:
- echo "Deploying to production server..."
- scp -o StrictHostKeyChecking=no target/*.jar user@your-server-ip:/opt/app/ # 复制产物到服务器
only: # 触发条件
- master # 仅master分支推送时触发
说明:
stages
:定义流水线阶段顺序(从上到下执行);jobs
:每个阶段可包含多个Job(如build_job
、test_job
);image
:指定Job运行的Docker镜像(需包含所需工具,如Maven、Node.js);script
:Job执行的具体命令;artifacts
:将当前Job的产物(如编译后的JAR)传递给后续Job;only
:设置触发条件(如仅master
分支变更时触发)。5. 配置Runner与项目关联
注册Runner时,需确保其关联到目标GitLab项目。若未自动关联,可通过GitLab项目→Settings→CI/CD→Runners页面,点击“Expand”查看Runner的注册令牌,重新执行gitlab-runner register
并输入正确令牌。
6. 触发CI/CD流水线
将.gitlab-ci.yml
文件提交到GitLab仓库并推送,Runner会自动检测并执行流水线:
git add .gitlab-ci.yml
git commit -m "Add GitLab CI/CD configuration"
git push origin master
推送后,可在GitLab项目→CI/CD→Pipelines页面查看流水线状态(如“running”“success”“failed”),点击Job可查看详细日志。
7. 高级配置(可选)
.gitlab-ci.yml
中指定image
(如node:16
),Runner会自动拉取镜像并运行Job;cache
指令缓存依赖(如Maven的.m2
目录),加速后续构建:cache:
paths:
- .m2/repository/
.gitlab-ci.yml
中;rules
或only/except
设置更灵活的触发条件(如特定分支、标签或定时触发)。注意事项
.gitlab-ci.yml
文件需放在项目根目录,且语法正确(可通过GitLab的CI Lint工具验证);docker:dind
(Docker-in-Docker)或kubernetes
执行器,提升隔离性和可扩展性。