# 指定流水线将运行的 stage 和 stage 的运行顺序
# 一个 stage 里面可以包含多个 job
# 同一 stage 的 job 并行执行(可能要设置 /etc/gitlab-runner/config.toml 里面的 concurrent 大于 1,自动加载无需重启),不同 stage 的 job 按序执行
stages:
- build
- test
- debug
- deploy
# 定义变量
variables:
NAME: edison
AGE: 26
# 特殊的 stage: .pre 和 .post
# .pre 始终是整个管道的第一个 stage
# .post 始终是整个管道的最后一个 stage
# 用户定义的 stage 都在以上两者之间运行
# 如果管道仅包含 .pre 或 .post 阶段的 job, 则不会创建管道
debug_pre:
stage: .pre
tags:
- tag1
script:
- echo "$NAME" >> /www/log.txt
debug_post:
stage: .post
tags:
- tag1
script:
- echo "$AGE" >> /www/log.txt
# before_script 定义一个在每个 job 之前运行的 script,必须是一个数组,该 script 的内容与主脚本中指定的任何 job 的 script 串联在一起,并在单个 shell 中执行
# before_script 失败将导致整个 job 失败,后续的 job 将不再执行,但是不影响 after_script 执行
# 如果 job 里面又定义 before_script,覆盖了全局定义的 before_script
before_script:
- echo '开始执行 job' >> /www/log.txt
# after_script 定义一个在每个 job(包括失败的 job)之后运行的 script,必须是一个数组,该 script 在一个 单独的 shell 中执行
# 与任何 before_script 和 script 脚本分开执行
# 如果 job 里面又定义 after_script,覆盖了全局定义的 after_script
after_script:
- echo 'job 执行结束' >> /www/log.txt
# 一个 stage 可以有多个 job
build1:
stage: build
# 同时拥有 tag1 和 tag3 的 runner 才可以执行当前 job
# 假如 runner 只有 tag1 没有 tag3, 则属性同一个 stage 的且拥有 tag1 的其它 job 可以照常执行
# 但是由于当前 job 被阻塞,所有当前 stage 无法完成,后续的 stage 也就不会执行
tags:
- tag1
- tag3
script:
- echo 'start building 1' >> /www/log.txt
- echo 'building 1 success' >> /www/log.txt
debug_job:
stage: debug
script:
- echo 'a or b was changed' >> /www/log.txt
tags:
- tag1
rules:
# 只要 changes 数组中任意一个文件发生改变则会出发相应条件
- changes:
- a
- b
when: on_success
- when: manual
build2:
# before_script 跟 script 执行的 shell 是同一个,也就是说 before_script 的命令执行出错,
# 则会影响本 job 中 script 的执行
before_script:
- echo 'before build2' >> /www/log.txt
stage: build
tags:
- tag1
script:
- echo 'start building 2' >> /www/log.txt
- echo 'building 2 success' >> /www/log.txt
# after_script 跟 script 执行的 shell 是分开的,也就是说即使 script 的命令执行出错,
# 也不影响本 job 中 after_script 的执行
after_script:
- echo 'build2 end' >> /www/log.txt
# 超时
# job 级别的超时可以超过 project 里面设定的超时,但不能超过 runner 设定的超时
timeout: 2h 30m 20s
testing:
stage: test
tags:
- tag1
script:
- echo 'test success' >> /www/log.txt
# 运行当前 job 执行出错后会被当成成功执行,所以依旧会执行后续的作业,即使是设置了重试也不会等待重试后再执行后续
allow_failure: true
# 重试次数,值大于等于零,小于2(最多重试两次,总共运行三次)
retry: 2
# 创建并行运行 job 的实例数大于2小于50
parallel: 3
# when 指定指定方式:
# on_success: 只有在前面的任务成功后才会执行
# on_failure: 只有在前面的任务失败后才会执行
# always: 无论成功还是失败都会执行
# manual: 需要手动点击执行,但不会阻塞后续的 job
# delayed: 需要搭配 start_in 指定延迟的时间,后阻塞后续的 job
deploying:
stage: deploy
tags:
- tag1
when: delayed
start_in: '10'
script:
- echo 'deploy success delayed 10 seconds' >> /www/log.txt
实战配置:
stages:
- pull
- install
- build
git_pull:
stage: pull
script:
- cd /www/wwwroot/hahaha
- git pull
yarn_install:
stage: install
script:
- cd /www/wwwroot/hahaha
- yarn
only:
changes:
- package.json
build_for_dist:
stage: build
script:
- cd /www/wwwroot/hahaha
- yarn build
网友评论