GitLab CI/CD 是 GitLab 提供的持续集成与持续部署工具,允许你在代码提交后自动运行构建、测试和部署等任务。要配置 GitLab CI/CD,你需要在仓库根目录下创建一个 .gitlab-ci.yml 文件,其中包含一系列的作业(Jobs)定义。

GitLab CI/CD 配置说明

下面是官方提供的一个入门例子:

build-job:
  stage: build
  script:
    - echo "Hello, $GITLAB_USER_LOGIN!"

test-job1:
  stage: test
  script:
    - echo "This job tests something"

test-job2:
  stage: test
  script:
    - echo "This job tests something, but takes more time than test-job1."
    - echo "After the echo commands complete, it runs the sleep command for 20 seconds"
    - echo "which simulates a test that runs 20 seconds longer than test-job1"
    - sleep 20

deploy-prod:
  stage: deploy
  script:
    - echo "This job deploys something from the $CI_COMMIT_BRANCH branch."
  environment: production

上面定义了四个任务,build-jobtest-job1test-job2deploy-prod。使用了 bash script 来执行,还可以在 script 里面使用 gitlab 内置的变量,例如 $GITLAB_USER_LOGIN$CI_COMMIT_BRANCH,更多的内置变量可以查阅:predefined_variables

常用配置项

image

image 指定docker镜像为构建环境,可以配置全局或者局部镜像。

image: node:18.0.0 # 使用 node 18

stages:
  - build

build_job:
  stage: build
  image: node:20.0.0 # build stage 使用 node 20版本
  script:
    - npm install
    - npm run build

variables

前端构建离不开环境变量,在gitlab的runner里也可以根据不同的构建阶段配置不同的环境变量。

variables:
  NODE_ENV: 18.0.0 # 全局环境变量
job1:
  stage: test
  script:
    - echo "执行测试"
  variables:
    NODE_ENV: 20.0.0 # 局部环境变量
    URL: "https://kelen.cc"

before_script和after_script

  • before_script: 在每个任务的脚本执行前运行的脚本。
  • after_script: 在每个任务的脚本执行后运行的脚本。

可以在构建前做一些初始化工作脚本,构建后做一些清理脚本。

before_script:
  - echo "设置环境变量"
  - whoami  # 打印当前用户,用于调试
  - echo $PROJECT_NAME

after_script:
  - echo "清理构建产物"

条件构建

有时候需要根据条件触发构建,例如根据合并分支名,根据 tag 格式来触发。可以通过 rules 的 if 来进行判断

根据源分支和目标分支触发构建

只有当合并请求的源分支是 develop 或者 feature/* 并且目标分支是 main 或 master 时,构建才会被触发。

build_job:
  script: 
    - echo "构建中..."
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
      when: on_success
      changes:
        - main|master
      source_branches:
        - develop
        - feature/*

根据标签格式触发构建

当打tag的格式是 v1.2.3 时触发,正则表达式是 ^v\d+\.\d+\.\d+$

build_job:
  script:
    - echo "发布的版本tag: $CI_COMMIT_TAG"
  only:
    refs:
      - tags
  variables:
    - '$CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/' # 匹配 v1.2.3 的 tag

验证配置

有两种验证方式,分别是:

  1. Gitlab官方提供了一个lint在线工具,可以检测配置语法是否正确。在项目仓库选择 Build > Pipeline editor. 即可进入 gitlab-ci.yml 编辑器。
https://static.kelen.cc/images/6cec28ec-3b4e-406b-ae17-830fb01927b0.png
lint在线工具
  1. 第二种方式可以通过Gitlab提供的vscode插件,Gitlab Workflow来校验,该插件还可以自动完成内置的环境变量,非常方便。
https://static.kelen.cc/images/d31be907-4ffa-4777-9891-773cdef29f11.png
lint在线工具