温馨提示×

Linux下GitLab的CI/CD流程如何搭建

小樊
110
2025-11-02 15:48:19
栏目: 智能运维

Linux下GitLab CI/CD流程搭建步骤

1. 准备工作

在开始前,需确保已具备以下环境:

  • 一台运行Linux的服务器(如Ubuntu、CentOS);
  • 已部署GitLab项目(本地或GitLab.com);
  • 项目代码已推送到GitLab仓库。

2. 安装GitLab Runner

GitLab Runner是执行CI/CD任务的代理,需先安装并注册到GitLab实例。

2.1 安装GitLab Runner

以Ubuntu为例,通过包管理器安装:

# 更新包列表
sudo apt-get update

# 安装依赖项
sudo apt-get install -y curl openssh-server ca-certificates tzdata perl

# 添加GitLab Runner官方GPG密钥和软件源
curl -L --output /etc/apt/trusted.gpg.d/gitlab.asc https://packages.gitlab.com/install/repositories/gitlab/gitlab-runner/script.deb.sh | sudo bash
echo "deb https://packages.gitlab.com/gitlab/gitlab-runner/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gitlab-runner.list

# 安装GitLab Runner
sudo apt-get update
sudo apt-get install gitlab-runner -y
2.2 注册GitLab Runner

运行注册命令,按提示输入GitLab实例URL和注册Token(可在GitLab项目→Settings→CI/CD→Runners中获取):

sudo gitlab-runner register
  • 关键参数说明
    • --executor:选择执行器(推荐shell(简单任务)或docker(隔离环境));
    • --tag-list:设置Runner标签(如ci,deploy),用于匹配项目中的tags规则;
    • --run-untagged:是否运行未打标签的Job(默认false)。

注册完成后,启动Runner服务:

sudo systemctl start gitlab-runner
sudo systemctl enable gitlab-runner

3. 创建.gitlab-ci.yml配置文件

在项目根目录下创建.gitlab-ci.yml文件,定义CI/CD流程的核心逻辑(YAML格式)。以下是一个基础示例:

# 定义CI/CD阶段(按顺序执行)
stages:
  - build    # 构建阶段
  - test     # 测试阶段
  - deploy   # 部署阶段

# 构建任务(属于build阶段)
build_job:
  stage: build
  script:
    - echo "Building the project..."
    - mkdir -p build
    - cd build && cmake .. && make  # 示例:C++项目构建
  artifacts:  # 传递构建产物到后续Job
    paths:
      - build/
    expire_in: 1 hour  # 产物有效期

# 测试任务(属于test阶段,依赖build_job的产物)
test_job:
  stage: test
  script:
    - echo "Running tests..."
    - cd build && ctest  # 示例:C++项目测试
  rules:
    - when: always  # 无论build是否成功都运行(可根据需求调整)

# 部署任务(属于deploy阶段,仅master分支触发)
deploy_job:
  stage: deploy
  script:
    - echo "Deploying to production server..."
    - scp -r build/* user@remote-server:/var/www/html/  # 示例:SCP部署
  only:
    - master  # 仅master分支触发部署
  tags:
    - deploy  # 匹配Runner的tag-list

关键概念说明

  • stages:定义流程阶段(如build→test→deploy),Job按阶段顺序执行;
  • Job:具体任务(如build_job),包含script(执行命令)、artifacts(传递产物)、rules(触发条件)等;
  • artifacts:用于跨Job传递文件(如构建产物),避免重复执行;
  • only/except:控制Job触发条件(如仅特定分支、标签);
  • tags:匹配Runner的tag-list,确保任务由指定Runner执行。

4. 配置CI/CD变量(可选但推荐)

敏感信息(如服务器密码、Docker凭证)不应硬编码在.gitlab-ci.yml中,需通过GitLab的CI/CD变量管理:

  1. 进入项目→Settings→CI/CD→Variables;
  2. 点击“Add variable”,输入:
    • Key:变量名(如DEPLOY_SERVERDOCKER_PASSWORD);
    • Value:敏感值(如服务器IP、Docker Hub密码);
    • Mask variable:勾选(隐藏日志中的变量值);
    • Protect variable:勾选(仅Protected分支可访问)。

.gitlab-ci.yml中通过$变量名引用(如ssh user@$DEPLOY_SERVER)。

5. 触发CI/CD流程

.gitlab-ci.yml文件提交到GitLab仓库的目标分支(如master),GitLab Runner会自动检测并触发流水线:

git add .gitlab-ci.yml
git commit -m "Add GitLab CI/CD configuration"
git push origin master

查看流程状态

  • 进入GitLab项目→CI/CD→Pipelines,可查看流水线的运行状态(成功/失败)、日志(详细输出)和Job详情

6. 进阶配置(按需扩展)

根据项目需求,可优化CI/CD流程:

6.1 缓存依赖(加速构建)

通过cache指令缓存依赖目录(如node_modules~/.m2),减少重复下载:

build_job:
  stage: build
  script:
    - echo "Installing dependencies..."
    - npm install  # 示例:Node.js项目
  cache:
    paths:
      - node_modules/  # 缓存目录
    policy: pull-push  # 拉取缓存→执行任务→推送缓存
6.2 多阶段并行任务

通过parallel指令并行运行多个Job(如同时运行单元测试和集成测试):

test_unit:
  stage: test
  script:
    - echo "Running unit tests..."
  parallel: 2  # 并行运行2个实例

test_integration:
  stage: test
  script:
    - echo "Running integration tests..."
  parallel: 2
6.3 集成Docker与Kubernetes
  • Docker构建与推送:使用docker镜像和docker:dind(Docker-in-Docker)构建镜像并推送到Registry;
  • Kubernetes部署:通过kubectl命令或Helm Charts将镜像部署到K8s集群(需配置KUBECONFIG变量)。

示例(Docker构建与推送):

build_image:
  stage: build
  image: docker:latest
  variables:
    DOCKER_HOST: tcp://docker:2375/
    DOCKER_TLS_CERTDIR: ""  # 禁用TLS(仅测试环境)
  services:
    - docker:dind  # 启动Docker-in-Docker服务
  script:
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA

常见问题排查

  • Runner未触发:检查Runner是否注册成功(项目→Settings→CI/CD→Runners中是否有Runner);确认.gitlab-ci.yml文件是否在项目根目录;
  • Job失败:查看GitLab Pipelines中的Job日志,定位错误原因(如命令不存在、权限不足);
  • 权限问题:确保Runner有权限访问项目代码和部署目标(如SSH密钥配置正确)。

通过以上步骤,即可在Linux环境下搭建GitLab CI/CD流程,实现代码的自动化构建、测试和部署。根据项目需求,可进一步扩展和优化流程(如添加代码质量检查、通知机制等)。

0