GitLab CI使用YAML文件(.gitlab-ci.yml)来管理项目配置。该文件存放于项目仓库的根目录,它定义该项目如何构建。

本章主要简单解释.gitlab-ci.yml中的关键命令

script
执行脚本

build1:
  script:
    - echo "Do your build here"
    - uname -a

image
指定docker镜像,仅运行于docker服务

image: apline:latest

services:
指定docker镜像服务,仅运行于docker服务

services: 
  - postgres

beforce_scripts
用于定义在所有作业之前需要执行的命令,比如更新代码、安装依赖、打印调试信息之类的事情

before_script:
  - echo "Before script section"
  - echo "For example you might run an update here or install a build dependency"
  - echo "Or perhaps you might print out some debugging details"

after_script
用于定义在所有作业(即使失败)之后需要执行的命令,比如清空工作空间

after_script:
  - echo "After script section"
  - echo "For example you might do some cleanup here"

stages
定义流水线全局可使用的阶段,段元素的排序定义了作业执行的顺序

stages:
  - build
  - test
  - deploy

stage
定义流水线中每个作业所处的阶段,处于相同阶段的作业并行执行

stage: test

only和except
only 和 except 用于在创建作业时对作业的限制策略。
only 定义了哪些分支或标签(branches and tags)的作业会运行
except 定义了哪些分支或标签(branches and tags)的作业不会运行

job:
  only:
    - [email protected]/gitlab-ce
  except:
    - [email protected]/gitlab-ce
    - /^release/.*$/@gitlab-org/gitlab-ce

#Job将会在所有分支执行,但 不会在 master主干以及以release/开头的分支上执行

tags
指定使用哪一个Runner执行作业

job:
  tags:
    - ruby
    - postgres
#只有运行器注册时定义了 ruby 和 postgres 两个标签的运行器才能执行作业

allow_failure
允许失败的作业失败了,则相应的作业会显示一个黄色的警告,但对流水线成功与否不产生影响

job1:
  stage: test
  script:
  - execute_script_that_will_fail
  allow_failure: true

job2:
  stage: test
  script:
  - execute_script_that_will_succeed

job3:
  stage: deploy
  script:
  - deploy_to_staging
#job1和job2将会并列进行,如果job1失败了,它也不会影响进行中的下一个阶段,但是如果job2执行失败,那么job3则会受到影响而不会执行

when
用于实现在作业失败时或发生故障时运行的作业
可选值:
on_success :只有前面的阶段的所有作业都成功时才执行,这是默认值。
on_failure :当前面阶段的作业至少有一个失败时才执行。
always : 无论前面的作业是否成功,一直执行本作业。
manual :手动执行作业,作业不会自动执行,需要人工手动点击启动作业。
delayed : 延迟执行作业

stages:
  - build
  - cleanup_build
  - test
  - deploy
  - cleanup

build_job:
  stage: build
  script:
    - make build

cleanup_build_job:
  stage: cleanup_build
  script:
    - cleanup build when failed
  when: on_failure

test_job:
  stage: test
  script:
    - make test

deploy_job:
  stage: deploy
  script:
    - make deploy
  when: manual

cleanup_job:
  stage: cleanup
  script:
    - cleanup after jobs
  when: always

#在上一个作业完成后30分钟后执行作业,如果你点击"Unschedule"按钮可以取消一个激活的计时器,你也可以点击"Play"按钮,立即执行延时作业

timed rollout 10%:
  stage: deploy
  script: echo 'Rolling out 10% ...'
  when: delayed
  start_in: 30 minutes

environment
用于定义作业部署到特殊的环境中

deploy to production:
  stage: deploy
  script: git push production HEAD:master
  environment:
    name: production

retry
重试关键字用于配置当作业失败时可以重新执行的次数,值只能是0、1、2三个整数

test:
  script: rspec
  retry: 2

variables
定义变量

variables:
  SQLALCHEMY_ECHO: "True"

参考:
https://meigit.readthedocs.io/en/latest/gitlab_ci_.gitlab-ci.yml_detail.html