Gitlab----Pipline流水线语法only、except、rules、workflow

简介: Gitlab----Pipline流水线语法only、except、rules、workflow

一、基础语法

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

注意:only和except逐渐被抛弃,后续推荐的是使用rules

二、实例演示

yaml文件如下:

before_script:
  - echo "script in global before script..."

after_script:
  - echo "script in global after script..."

variables:
  USERNAME: redrose2100
  PASSWORD: admin123

workflow:
  rules:
    - if: '$USERNAME == "redrose2100"'
      when: always
    - when: never


stages:
  - build
  - test
  - release
  - deploy
  - verify

setup:
  stage: .pre
  script:
    - echo "script in pre..."
  tags:
    - docker_in_docker_demo

teardown:
  stage: .post
  script:
    - echo "script in post..."
  tags:
    - docker_in_docker_demo

build:
  stage: build
  before_script:
    - echo "before script in build..."
    - echo $USERNAME
    - echo $PASSWORD
  script:
    - echo "script in build..."
  after_script:
    - echo "after script in build..."
  tags:
    - docker_in_docker_demo
  rules:
    - if: '$USERNAME == "redrose2100"'
      when: manual
    - if: '$USERNAME == "redrose2200"'
      when: delayed
      start_in: "5"
    - when: on_success

test:
  stage: test
  before_script:
    - echo "before script in test..."
  script:
    - echo "script in test..."
  tags:
    - docker_in_docker_demo
  rules:
    - changes:
        - Dockerfile
      when: manual
  allow_failure: true
  parallel: 5


release:
  stage: release
  script:
    - echo "script in release..."
  after_script:
    - echo "after in release..."
  only:
    - tags
  tags:
    - docker_in_docker_demo
  when: delayed
  start_in: "10"

deploy:
  stage: deploy
  script:
    - echo "script in deploy..."
  tags:
    - docker_in_docker_demo
  when: manual

verify:
  stage: verify
  script: echo "in verify"
  retry: 2
  tags:
    - docker_in_docker_demo

verify-2:
  stage: verify
  script: echo "in verify-2"
  retry:
    max: 2
    when:
      - script_failure
  tags:
    - docker_in_docker_demo
  timeout: 3s
  only:
    - /^dev.*$/
  except:
    - branches

执行结果如下所示:
在这里插入图片描述

三、流水线语法详细解读

3.1 only

可用的关键字有,only是指定的执行
在这里插入图片描述
如下,将release步骤使用only指定只有打标签的时候才会执行

release:
  stage: release
  script:
    - echo "script in release..."
  after_script:
    - echo "after in release..."
  only:
    - tags
  tags:
    - docker_in_docker_demo
  when: delayed
  start_in: "10"

当提交代码后,可以看到这里已经没有release步骤了
在这里插入图片描述

3.2 except

可用的关键字,except是指定的不执行,和only相反
在这里插入图片描述
except可以单独指定不执行的标签或分支,也可以和only一起组合使用,如下,即表示只有以dev开头的分支才会执行

verify-2:
  stage: verify
  script: echo "in verify-2"
  retry:
    max: 2
    when:
      - script_failure
  tags:
    - docker_in_docker_demo
  timeout: 3s
  only:
    - /^dev.*$/
  except:
    - branches

这里因为只有main分支,所有不会执行此步骤,如下:
在这里插入图片描述

3.3 rules

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

rules可用的规则:

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

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

build:
  stage: build
  before_script:
    - echo "before script in build..."
    - echo $USERNAME
    - echo $PASSWORD
  script:
    - echo "script in build..."
  after_script:
    - echo "after script in build..."
  tags:
    - docker_in_docker_demo
  rules:
    - if: '$USERNAME == "redrose2100"'
      when: manual
    - if: '$USERNAME == "redrose2200"'
      when: delayed
      start_in: "5"
    - when: on_success

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

test:
  stage: test
  before_script:
    - echo "before script in test..."
  script:
    - echo "script in test..."
  tags:
    - docker_in_docker_demo
  rules:
    - changes:
        - Dockerfile
      when: manual
  allow_failure: true
  parallel: 5

3.4 workflow

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

variables:
  USERNAME: redrose2100
  PASSWORD: admin123

workflow:
  rules:
    - if: '$USERNAME == "redrose2100"'
      when: always
    - when: never
目录
相关文章
|
7月前
|
jenkins 持续交付 开发工具
jenkins学习笔记之一:流水线基础语法
jenkins学习笔记之一:流水线基础语法
|
6月前
|
JSON API 数据格式
1api触发gitlab流水线
1api触发gitlab流水线
6-14|gitlab的runner的流水线怎么看
6-14|gitlab的runner的流水线怎么看
|
7月前
|
jenkins 持续交付 API
enkins学习笔记之十一:优化Gitlab提交流水线
enkins学习笔记之十一:优化Gitlab提交流水线
enkins学习笔记之十一:优化Gitlab提交流水线
|
7月前
|
jenkins Devops Java
jenkins学习笔记之十:配置Gitlab提交流水线
jenkins学习笔记之十:配置Gitlab提交流水线
|
9月前
|
敏捷开发 缓存 安全
阿里云云效产品使用问题之手动触发流水线的YAML语法该怎么写
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
开发工具 git
gitlab--workflow、rules
gitlab--workflow、rules
|
存储
gitlab--运行流水线、设置 tags、设置 pipeline 状态、添加徽章
gitlab--运行流水线、设置 tags、设置 pipeline 状态、添加徽章
|
域名解析 Cloud Native jenkins
【Drone-初识篇】Drone借助GitLab构建CICD环境、以及编写 .drone.yaml 流水线
【Drone-初识篇】Drone借助GitLab构建CICD环境、以及编写 .drone.yaml 流水线
1093 0
|
监控 测试技术 持续交付
构建自动化部署流水线:GitLab CI/CD的实践指南
在现代软件开发中,快速且可靠地交付软件是至关重要的。为了实现这一目标,构建自动化部署流水线成为一种常见的实践方法。本文将介绍如何使用GitLab CI/CD来构建自动化部署流水线,以提高开发团队的效率和软件交付质量。
2101 0

热门文章

最新文章