GitLab CI/CD语法三

97 阅读1分钟

only & except 限制分支标签

only和except用分支策略来限制jobs构建:

  • only定义哪些分支和标签的git项目将会被job执行
  • except定义哪些分支和标签的git项目将不会被job执行
job:
  only:
    - /^issue-.*$/  # 只对该正则表达式匹配的分支构建
  except:
    - branches

rules 构建规则

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

可用的规则:

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

rules-if-条件匹配

  • 如果DOMAIN的值匹配,则需要手动运行。
  • 不匹配on_success
  • 条件判断从上到下,匹配即停止
  • 多条件匹配可以使用 && ||
before_script:
  - echo "before script"  # 每次job运行时候会输出,

variables:
  DOMAIN: example.com
stages:
  - build

build:
  stage: build
  tags:
    - build
  script:
    - echo "build"
    - sleep 5
  rules:
    - if: '$DOMAIN == "example.com"'
      when: manual
    - if: '$DOMAIN == "ruby.com"'
      when: delayed
      start_in: '5'
    - when: on_success

image.png

rules-changes 文件变化

  • 接受文件路径数组
  • 如果提交中jenkinsfile文件发生变化则为true
before_script:
  - echo "before script"  # 每次job运行时候会输出,

variables:
  DOMAIN: example.com
stages:
  - build

build:
  stage: build
  tags:
    - build
  script:
    - echo "build"
    - sleep 5
  rules:
    - changes:
        - Dockerfile
        - README.md
      when: manual

image.png

rules-exists 文件存在

当仓库中存在指定的文件时操作

workflow-rules 管道创建

  • 顶级workflow关键字适用于整个管道,并将确定是否创建管道
  • when: 可以设置为always或never,如果未提供,则默认值always
variables:
  DOAMIN: example.com
  
workflow:
  rules:
    - if: '$DOMAIN == "example.com"'
      when: always