linux

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

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

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

1. 准备工作

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

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

注册完成后,启动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

关键概念说明

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

查看流程状态

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构建与推送):

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

常见问题排查

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

0
看了该问题的人还看了