测试开发技术网站
博客
设计
设计
开发
Python
测试
unittest
运维
Linux基础应用
CI/CD
CI/CD
数据库
数据库
云计算
云计算
云原生
云原生
爬虫
爬虫
数据分析
数据分析
人工智能
人工智能
登录
注册
Gitlab----Pipline流水线语法only、except、rules、workflow
收藏本文
作者:redrose2100 类别: 日期:2022-05-20 16:33:11 阅读:1072 次 消耗积分:0 分
# 一、基础语法 * only:定义哪些分支和标签的git项目会被执行job * except:定义哪些分支和标签的git项目将不会被job执行 * rules:允许按照顺序评估规则,知道匹配到并未作业动态提供属性 * workflow 注意:only和except逐渐被抛弃,后续推荐的是使用rules # 二、实例演示 yaml文件如下: ```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 ``` 执行结果如下所示: ![](/static/upload/20220520_163135.png) # 三、流水线语法详细解读 ## 3.1 only 可用的关键字有,only是指定的执行 ![](/static/upload/20220520_163154.png) 如下,将release步骤使用only指定只有打标签的时候才会执行 ```yaml 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步骤了 ![](/static/upload/20220520_163218.png) ## 3.2 except 可用的关键字,except是指定的不执行,和only相反 ![](/static/upload/20220520_163237.png) except可以单独指定不执行的标签或分支,也可以和only一起组合使用,如下,即表示只有以dev开头的分支才会执行 ```yanl 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分支,所有不会执行此步骤,如下: ![](/static/upload/20220520_163255.png) ## 3.3 rules rules允许按顺序评估单个规则,直到匹配并未作业动态提供属性 注意rules不能与only、except组合使用 rules可用的规则: * if :如果条件匹配 * changes:指定文件发生变化 * exists:指定文件存在 如下,使用if语句判断变量USERNAME的值,当是redrose2100时就手动执行,当是redrose2200时就延迟执行,其他情况就是默认之前步骤都成功的时候再执行 ```yaml 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是否有修改,如果有修改则手动执行,如果没有修改,则此步骤不执行 ```yaml 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的作用 ```yaml variables: USERNAME: redrose2100 PASSWORD: admin123 workflow: rules: - if: '$USERNAME == "redrose2100"' when: always - when: never ```
始终坚持开源开放共享精神,同时感谢您的充电鼓励和支持!
版权所有,转载本站文章请注明出处:redrose2100, http://blog.redrose2100.com/article/243
上一篇:
Gitlab----Pipline流水线语法tags、allow_failure、when、timeout、retry、parallel
下一篇:
ElasticStack----ElasticStack简介
搜索
个人成就
出版书籍
《Pytest企业级应用实战》
测试开发技术全栈公众号
测试开发技术全栈公众号
DevOps技术交流微信群
加微信邀请进群
常用网站链接
开源软件洞察
云原生技术栈全景图
Python语言官方文档
Golang官方文档
Docker官方文档
Jenkins中文用户手册
Scrapy官方文档
VUE官方文档
Harbor官方文档
openQA官方文档
云原生开源社区
开源中国
Kubernetes中文文档
Markdown语法官方教程
Kubernetes中文社区
Kubersphere官方文档
BootStrap中文网站
JavaScript中文网
NumPy官方文档
Pandas官方文档
GitLink确实开源网站
数据库排名网站
编程语言排名网站
SEO综合查询网站
数学加减法练习自动生成网站
Kickstart Generator
文章分类
最新文章
最多阅读
特别推荐
×
Close
登录
注册
找回密码
登录邮箱:
登录密码:
图片验证码:
注册邮箱:
注册密码:
邮箱验证码:
发送邮件
注册邮箱:
新的密码:
邮箱验证码:
发送邮件