美文网首页
.gitlab-ci.yml

.gitlab-ci.yml

作者: 苍老师的眼泪 | 来源:发表于2022-05-26 18:49 被阅读0次
# 指定流水线将运行的 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

相关文章

网友评论

      本文标题:.gitlab-ci.yml

      本文链接:https://www.haomeiwen.com/subject/jobuprtx.html