运维-gitlab-CICD-语法3

156 阅读1分钟

语法1:only & except

explain

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

  • only定义哪些分支和标签的git项目将会被job执行。
  • except定义哪些分支和标签的git项目将不会被job执行。

example

排除掉所有的分支,只允许以issue-开头的分支


job:
    only:
    - /^issue-.*$/
    except:
    - branches

image.png

语法2:rules

explain

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

可用的规则:

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

example

  • 如果DOMAIN的值匹配,则需要手动运行。
  • 不匹配on_success。
  • 条件判断从上到下,匹配即停止。
  • 多条件匹配可以使用&& ||。
variables:
    DOMAIN: aexample.com

stages:
  - deploy
    
deploy:
  stage: deploy
  tags:
    - deploy
  script:
    - echo "hello deploy!"
  rules:
    - if: '$DOMAIN == "example.com"'
      when: manual
    - if: '$DOMAIN == "aexample.com"'
      when: delayed
      start_in : '5'
    - when: on_success

指定的文件存在change,exist类似

deploy:
  stage: deploy
  tags:
    - deploy
  script:
    - echo "hello deploy!"
  rules:
    - changes:
      - Dockerfile
      when: manual
    - when: on_success

语法3 使用rules_allow_failure:true

explain

在不停止管道本身的情况下允许作业失败手动作业等待操作。

example

variables:
    DOMAIN: example.com

stages:
  - build
  - deploy
  
build:
  stage: build
  tags:
    - build
  script:
    - echo "mvn clean"
    - echo "mvn install"
    
deploy:
  stage: deploy
  tags:
    - deploy
  script:
    - ech "hello deploy"
  rules:
    - if: '$DOMAIN == "example.com"'
      when: manual
      allow_failure: true
    - if: '$DOMAIN == "aexample.com"'
    - when: on_success

image.png

语法4 workflow-rules-管道创建

explain

  • 顶级workf1ow关键字适用于整个管道,并将确定是否创建管道。
  • when:可以设置为always或never,如果未提供,则默认值always。

example

variables:
    DOMAIN: example.com
    
workflow:
  rules:
    - if: '$DOMAIN == "aexample.com"'
      when: always

stages:
  - build
  - deploy
  
build:
  stage: build
  tags:
    - build
  script:
    - echo "mvn clean"
    - echo "mvn install"
    
deploy:
  stage: deploy
  tags:
    - deploy
  script:
    - ech "hello deploy"
  rules:
    - if: '$DOMAIN == "example.com"'
      allow_failure: true
    - if: '$DOMAIN == "aexample.com"'
    - when: on_success