Gitlab----Pipline流水线语法only、except、rules、workflow
作者:redrose2100   类别:    日期:2022-05-20 16:33:11    阅读:1242 次   消耗积分:0 分

一、基础语法

  • only:定义哪些分支和标签的git项目会被执行job
  • except:定义哪些分支和标签的git项目将不会被job执行
  • rules:允许按照顺序评估规则,知道匹配到并未作业动态提供属性
  • workflow
    注意:only和except逐渐被抛弃,后续推荐的是使用rules

二、实例演示

yaml文件如下:

  1. before_script:
  2. - echo "script in global before script..."
  3. after_script:
  4. - echo "script in global after script..."
  5. variables:
  6. USERNAME: redrose2100
  7. PASSWORD: admin123
  8. workflow:
  9. rules:
  10. - if: '$USERNAME == "redrose2100"'
  11. when: always
  12. - when: never
  13. stages:
  14. - build
  15. - test
  16. - release
  17. - deploy
  18. - verify
  19. setup:
  20. stage: .pre
  21. script:
  22. - echo "script in pre..."
  23. tags:
  24. - docker_in_docker_demo
  25. teardown:
  26. stage: .post
  27. script:
  28. - echo "script in post..."
  29. tags:
  30. - docker_in_docker_demo
  31. build:
  32. stage: build
  33. before_script:
  34. - echo "before script in build..."
  35. - echo $USERNAME
  36. - echo $PASSWORD
  37. script:
  38. - echo "script in build..."
  39. after_script:
  40. - echo "after script in build..."
  41. tags:
  42. - docker_in_docker_demo
  43. rules:
  44. - if: '$USERNAME == "redrose2100"'
  45. when: manual
  46. - if: '$USERNAME == "redrose2200"'
  47. when: delayed
  48. start_in: "5"
  49. - when: on_success
  50. test:
  51. stage: test
  52. before_script:
  53. - echo "before script in test..."
  54. script:
  55. - echo "script in test..."
  56. tags:
  57. - docker_in_docker_demo
  58. rules:
  59. - changes:
  60. - Dockerfile
  61. when: manual
  62. allow_failure: true
  63. parallel: 5
  64. release:
  65. stage: release
  66. script:
  67. - echo "script in release..."
  68. after_script:
  69. - echo "after in release..."
  70. only:
  71. - tags
  72. tags:
  73. - docker_in_docker_demo
  74. when: delayed
  75. start_in: "10"
  76. deploy:
  77. stage: deploy
  78. script:
  79. - echo "script in deploy..."
  80. tags:
  81. - docker_in_docker_demo
  82. when: manual
  83. verify:
  84. stage: verify
  85. script: echo "in verify"
  86. retry: 2
  87. tags:
  88. - docker_in_docker_demo
  89. verify-2:
  90. stage: verify
  91. script: echo "in verify-2"
  92. retry:
  93. max: 2
  94. when:
  95. - script_failure
  96. tags:
  97. - docker_in_docker_demo
  98. timeout: 3s
  99. only:
  100. - /^dev.*$/
  101. except:
  102. - branches

执行结果如下所示:

三、流水线语法详细解读

3.1 only

可用的关键字有,only是指定的执行

如下,将release步骤使用only指定只有打标签的时候才会执行

  1. release:
  2. stage: release
  3. script:
  4. - echo "script in release..."
  5. after_script:
  6. - echo "after in release..."
  7. only:
  8. - tags
  9. tags:
  10. - docker_in_docker_demo
  11. when: delayed
  12. start_in: "10"

当提交代码后,可以看到这里已经没有release步骤了

3.2 except

可用的关键字,except是指定的不执行,和only相反

except可以单独指定不执行的标签或分支,也可以和only一起组合使用,如下,即表示只有以dev开头的分支才会执行

  1. verify-2:
  2. stage: verify
  3. script: echo "in verify-2"
  4. retry:
  5. max: 2
  6. when:
  7. - script_failure
  8. tags:
  9. - docker_in_docker_demo
  10. timeout: 3s
  11. only:
  12. - /^dev.*$/
  13. except:
  14. - branches

这里因为只有main分支,所有不会执行此步骤,如下:

3.3 rules

rules允许按顺序评估单个规则,直到匹配并未作业动态提供属性
注意rules不能与only、except组合使用

rules可用的规则:

  • if :如果条件匹配
  • changes:指定文件发生变化
  • exists:指定文件存在

如下,使用if语句判断变量USERNAME的值,当是redrose2100时就手动执行,当是redrose2200时就延迟执行,其他情况就是默认之前步骤都成功的时候再执行

  1. build:
  2. stage: build
  3. before_script:
  4. - echo "before script in build..."
  5. - echo $USERNAME
  6. - echo $PASSWORD
  7. script:
  8. - echo "script in build..."
  9. after_script:
  10. - echo "after script in build..."
  11. tags:
  12. - docker_in_docker_demo
  13. rules:
  14. - if: '$USERNAME == "redrose2100"'
  15. when: manual
  16. - if: '$USERNAME == "redrose2200"'
  17. when: delayed
  18. start_in: "5"
  19. - when: on_success

如下为判断文件是否有修改的,判断Dockerfile是否有修改,如果有修改则手动执行,如果没有修改,则此步骤不执行

  1. test:
  2. stage: test
  3. before_script:
  4. - echo "before script in test..."
  5. script:
  6. - echo "script in test..."
  7. tags:
  8. - docker_in_docker_demo
  9. rules:
  10. - changes:
  11. - Dockerfile
  12. when: manual
  13. allow_failure: true
  14. parallel: 5

3.4 workflow

顶级workflow关键字适用于整个管道,并将确定是否创建管道
如下,当USERNAME的值为redrose2100时,此时会执行所有的Job,当USERNAME的值修改一下比如redrose2200时,此时整个工作流都不会执行,即没有任何操作,这就是workflow的作用

  1. variables:
  2. USERNAME: redrose2100
  3. PASSWORD: admin123
  4. workflow:
  5. rules:
  6. - if: '$USERNAME == "redrose2100"'
  7. when: always
  8. - when: never
始终坚持开源开放共享精神,同时感谢您的充电鼓励和支持!
版权所有,转载本站文章请注明出处:redrose2100, http://blog.redrose2100.com/article/243
个人成就
  • 2022年 : 371 篇 
  • 2023年 : 211 篇 
  • 2024年 : 31 篇 
  • 2025年 : 0 篇 
  • 博客总数: 613 
  • 阅读总量: 643119 
测试开发技术全栈公众号
DevOps技术交流微信群