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