首页 > 其他分享 >gitlab--Stages、job、.pre 、.post 、before_script、after_script、variables 环境变量

gitlab--Stages、job、.pre 、.post 、before_script、after_script、variables 环境变量

时间:2023-04-16 21:23:11浏览次数:42  
标签:pre script after echo job test 运行 stage

Stages 和 job

在 pipeline 中,有几个名词需要知道,Stages、job、stage、before_script、after_script 等

Stages:一个流水线可以包含若干个阶段,一个阶段可以包含若干个作业

stages 用于定义作业可以使用的阶段,并且是全局定义的。同一阶段的作业并行运行,不同阶段按顺序执行。

这里定义了三个阶段,首先 Build 阶段运行,然后 Deploy 阶段运行,最后 Test 阶段并行运行。Test 阶段运行成功后将提交状态标记为 passed 状态。如果任何一个阶段运行失败,最后提交状态为 failed

全局定义的 stages 是来自于每个job。如果 job 没有定义 stage 则默认是 test 阶段。如果全局未定义 stages, 则按 yaml 文件里的顺序运行

job:作业是具体要执行的任务,命令脚本语句的集合

在每个项目中,使用名为 .gitlab-ci.yml 的 yaml 文件配置中,可以定义一个或多个作业(job)。每个 job 必须具有唯一的名称(不能使用关键字),每个 job 是独立运行的,job 定义了在约束条件下进行的相关操作,每个 job 至少要包含一个 script

.pre 和 .post

  • .pre:在流水线运行之前运行
  • .post:在流水线运行之后运行

.pre 和 .post 是 stage 的名称,不需要在 stages 里指定,就会运行

.pre 始终是整个流水线的第一个运行阶段,.post 始终是整个流水线的最后一个运行阶段。 用户定义的阶段都在两者之间运行。.pre.post的顺序无法更改。如果管道仅包含.pre.post阶段的作业,则不会创建流水线

stages: # 指定运行的步骤,pre 和 post 不需要指定
  - build
  - test
  - deploy

ciinit: # job 的名称
  tags: 
    - k8s
  stage: .pre # pipeline 运行之前运行
  script:
    - echo "pipeline init first job"

ciend: # job 的名称
  tags: 
    - k8s
  stage: .post # pipeline 运行之后运行
  script:
    - echo "pipeline end job"

build1: # job 的名称
  tags: # 指定要运行的 runner,指定的是 runner 的 tag
    - k8s
  stage: build
  script:
    - echo "Do your build here"

test1:  # 没有指定要运行的 runner,就在可以运行的 runner 上选择一台运行
  stage: test
  script:
    - echo "Do a test here"
    - echo "For example run a test suite"

test2: # job 的名称
  stage: test
  script:
    - echo "Do another parallel test here"
    - echo "For example run a lint test"

deploy1: # job 的名称
  tags: # 指定要运行的 runner,指定的是 runner 的 tag
    - k8s
  stage: deploy
  script:
    - echo "Do your deploy here"

可以看到运行的步骤为

如果两个或者多个 job,指向同一个阶段名称,则该阶段下的所有 job  都并行运行。如果不能并行运行,需要检查 runner 的配置文件中的 concurrent 的值是不是大于 1。

例如上面的 Test 阶段,有两个 job,test1 和 test2。如果 runner 的配置文件中的 concurrent 为 2 ,则两个 job 会并行运行

before_script 和 after_script

before_script

用于定义一个命令,该命令在每个作业之前运行。必须是一个数组。指定的script与主脚本中指定的任何脚本串联在一起,并在单个 shell 中一起执行

after_script

用于定义将在每个作业(包括失败的作业)之后运行的命令。这必须是一个数组。指定的脚本在新的 shell 中执行,与任何before_scriptscript脚本分开。

可以在全局定义,也可以在 job 中定义。在 job 中定义会覆盖全局。

before_script 失败导致整个作业失败,其他作业将不再执行。作业失败不会影响 after_script 运行。哪怕 job 失败了,after-script 也会执行

before_script: # 在流水线之前运行
  - echo "我是在流水线运行之前运行"

variables: # 设置了一个全局的环境变量
  DOMAIN: example.com

stages: # 指定运行的顺序
  - test
  - build
  - deploy


build: # job 名称
  before_script: # 在 job 运行 script 之前运行
    - echo "job 中的 job 运行之前运行"
  stage: build
  script:
    - echo "mvn clean "
    - echo "mvn install"
  after_script: # 在 job 运行 script 之后运行
    - echo "job 中的 job 运行之后运行"


deploy:
  stage: deploy
  script:
    - echo "我是部署阶段"
  
test:
  stage: test
  script:
    - echo "我是测试阶段"

after_script: # 所有的 job 运行完成之后运行
  - echo "我是在流水线运行之后运行"

运行流水线,查看阶段

查看 test job 的信息

在来查看 build 的 job

在来查看 deploy 的 job

variables 环境变量

变量可以分为全局变量和局部变量,全局变量是整个流水线都可以使用的,局部变量是只在 job 中生效的

stages:
  - build
  - test
  - deploy

variables: # 全局变量
  VERSIONS: "1.32.1"

deploy2:
  tags: # 指定要运行的 runner,指定的是 runner 的 tag
    - k8s
  variables: # 局部变量
    VERSIONS: "6.78.9"
  stage: deploy
  script:
    - echo "${VERSIONS}" # 局部变量的优先级大于全局变量的


build1:
  tags: # 指定要运行的 runner,指定的是 runner 的 tag
    - k8s
  stage: build
  script:
    - echo "${VERSIONS}" # 打印的是全局变量

test1:  # 没有指定要运行的 runner,就在可以运行的 runner 上选择一台运行
  stage: test
  script:
    - echo "Do a test here"
    - echo "For example run a test suite"

test2:
  stage: test
  script:
    - echo "Do another parallel test here"
    - echo "For example run a lint test"

deploy1:
  tags: 
    - k8s
  stage: deploy
  script:
    - echo "Do your deploy here"

 

标签:pre,script,after,echo,job,test,运行,stage
From: https://www.cnblogs.com/zouzou-busy/p/16271373.html

相关文章

  • 【c#表达式树】最完善的表达式树Expression.Dynamic的玩法
    【c#表达式树】最完善的表达式树Expression.Dynamic的玩法 引言在我第一次写博客的时候,写的第一篇文章,就是关于表达式树的,链接:https://www.cnblogs.com/1996-Chinese-Chen/p/14987967.html,其中,当时一直没有研究Expression.Dynamic的使用方法(因为网上找不到资料),就......
  • Deep graph clustering with enhanced feature representations for community detec
    论文阅读03-EFR-DGC:EnhancedFeatureRepresentationsforDeepGraphClustering论文信息论文地址:Deepgraphclusteringwithenhancedfeaturerepresentationsforcommunitydetection|SpringerLink论文代码:https://github.com/grcai/DGC-EFR1.存在问题DAEGC在处理......
  • js 传递汉字 乱码_JavaScript 字符串反转乱码问题解决
    https://blog.csdn.net/weixin_36483301/article/details/113451892emoji表情和非常用字实际解决中文编码问题,可以通过解码解决js中使用decodeURL即可解决......
  • javascript 把嵌套的 map 转成 object,再转 json 字符串
    使用JSON.stringify转map时发现并没有转成想要的JSON数据,搜索发现要转成Object才能够转成完整的JSON,用递归转换:constconvertNestedMapToObject=(map)=>{if(mapinstanceofMap){map.forEach((v,k)=>{......
  • Udhcpc.user script documentation and how to hotplug for DHCP events
    Udhcpc.userscriptdocumentationandhowtohotplugforDHCPeventshttps://forum.openwrt.org/t/udhcpc-user-script-documentation-and-how-to-hotplug-for-dhcp-events/47952/10 Hi,guys!I'vebeenlookingforwaystoexecuteprogrammes/scriptsonDHCP......
  • javascript常用的循环对比及性能分析
    结论:js中的for循环只有在处理百万条数据以上才会展示出他的强大性能,和看出明显优势,但是在百万条数据往下甚至到个位数的数据量通常都是for和while还有do...while不相上下,反而后两者更加优势明显下面是测试耗时截图(在不同浏览器也会有所不同,我这是Chrome版本111.0.5563.149)......
  • JavaScript运算符与表达式
    目录一、===二、||三、??与?.???.四、...五、[]{}[]{}一、===严格相等运算符,用作逻辑判断1==1 //返回true1=='1' //返回true,会先将右侧的字符串转为数字,再做比较1==='1' //返回false,类型不等,直接返回falsetypeof查看某个值的类型typeof1 //返回'number'ty......
  • JavaScript中 处理异步的几种方法
    1.回调函数回调(callback)是一个函数被作为一个参数传递到另一个函数里,在那个函数执行完后再执行。假定有两个函数f1和f2,f2等待f1的执行结果,f1()–>f2();如果f1很耗时,可以改写f1,把f2(箭头函数)写成f1的回调函数:functionf1(callback){setTimeout(()=>{letname='小明'......
  • javascript基础练习
     本练习根据w3cschool:https://www.w3cschool.cn/javascript/javascript-conventions.html 1.javascript简介1.1JavaScript是脚本语言JavaScript是一种轻量级的编程语言。JavaScript是可插入HTML页面的编程代码。JavaScript插入HTML页面后,可由......
  • TypeScript type 关键字和 interface 关键字
    前言type和interface都可以声明TS类型。typePoint1={x:number;y:number;};interfacePoint2{x:number;y:number;};它们两个声明这个对象类型有任何区别吗?很明显没有,我认为最能区分它们两个的标志是,type有一个=赋值等号。typetype可以做类......