1. 仓库配置

根目录下增加 .gitlab-ci.yml文件,示例:

stages:          # 作业分组列表及分组执行顺序
  - build
  - test
  - deploy

build-job:
  stage: build   # 这个作业运行在build分组
  script:
    - cd /home && ls -la
    - whoami
    - echo "Compiling the code..."
    - echo "Compile complete."

unit-test-job:
  stage: test   # 这个作业运行在test分组,只有build分组执行成功后才能执行
  script:
    - echo "Running unit tests... This will take about 60 seconds."
    - sleep 60
    - echo "Code coverage is 90%"

lint-test-job:
  stage: test    # 这个作业运行也在test分组,配置了多个runner或单个runner的concurrent>1时可与unit-test-job作业并行执行
  script:
    - echo "Linting code... This will take about 10 seconds."
    - sleep 10
    - echo "No lint issues found."

deploy-job:
  stage: deploy  # 这个作业运行在deploy分组,只有test分组执行成功后才能执行
  environment: production
  script:
    - echo "Deploying application..."
    - echo "Application successfully deployed."

常用字段:

  • stages:定义所有可用的作业分组(阶段),分组内的作业并行执行(需多个Runner),各分组顺序执行。 常用stage有:.pre(特殊阶段,在所有阶段之前运行)、buildtestdeploy.post(特殊阶段,在所有阶段之后运行)。
  • deploy-doc-job:一条作业

    • stage:作业所属的分组,如果作业没有指定 stage,它会被分配到 test 分组
    • variables:作业级变量,将覆盖全局变量
    • script:作业要执行的命令或脚本,除了“触发作业”之外的所有作业都需要一个script
    • dependencies:作业依赖的其他作业的
    • timeout:作业的超时时间
    • tags:运行作业的 Runner(见下文)标签
    • rules:指定何时运行或跳过作业,过时的onlyexcept仍受支持,但不能在同一作业中与rules一起使用

更详细的说明见官方文档

2. Gitlab创建Runner

GitLab Runner 是 GitLab CI/CD 的核心组件之一,负责执行 GitLab CI/CD 流水线中的作业。

  1. 网页中打开仓库,设置-->CI/CD-->Runner-->新建项目Runner
  2. 选择Runner平台(Linux为例)等信息

    注意运行未打标签的作业选项未启用时,Runner只能够执行标签*选项中配置的作业,无标签或标签不在列表中的作业将无法执行。

  3. 确认后转入runner配置页面,包含安装、注册Runner的方法。

2.1 安装Runner服务

首次安装可参考如何安装 Runner?中的提示在运行脚本的Linux主机上安装Runner,主要步骤:

# 下载gitlab-runner
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

# 赋予执行权限(确保/usr/local/bin在PATH中)
sudo chmod +x /usr/local/bin/gitlab-runner

# 创建gitlab-runner用户
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

# 安装并启动gitlab-runner服务
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start
gitlab-runner help 可查看帮助

根据官方文档,需要检查 /home/gitlab-runner/.bash_logout,如果该文件存在且其中含有如下脚本时:

if [ "$SHLVL" = 1 ]; then
    [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
fi

将其注释掉,否则在执行shell作业时会报错(Job failed: prepare environment: exit status 1.)。

2.2 注册Runner

同样在该主机上,执行网页中的提供注册命令。推荐使用sudo执行,以普通用户注册的需要手动运行 gitlab-runner run并保持运行,否则作业无法执行;以root用户注册的runner自动由系统服务执行。

sudo gitlab-runner register  --url http://xx.xx.xx.xx:25153  --token xx-xxx--xx-

根据提示,输入Runner的参数,其中 Enter an executor使用shell

配置完成后配置信息存储在 config.toml 中,以普通用户注册的路径为 ~/.gitlab-runner/config.toml,root用户为 /etc/gitlab-runner/config.toml

命令执行完成后,gitlab网页中将显示注册成功信息,并可在Runner页查看到状态:

Runner状态

绿色圆形标识代表Runner注册正确,下方为该runner处理的任务标签列表。

3. 执行作业

至此,Gitlab即可执行 gitlab-ci.yml中定义的作业,作业在流水线中执行:

  • 推送后自动执行,分支、标签等,可在yml中定义更多规则
  • 手动执行:项目-->构建-->流水线-->运行流水线

可通过项目-->构建-->作业查看作业状态。

作业执行日志