CICD(1)——pipeline语法(1)

目录

一、简介

二、关键字

1. job

2. script

3. before script

4. after script

5. stages

① 未定义stages

② 定义stages

6. .pre & .post

7. stage

8.variables

三、综合实例


一、简介

本篇文章用于记录学习CICD时的yaml配置文件语法规则

二、关键字

job/script/before_script/after_script/stages/stage/variables 

1. job

在每个项目中,我们使用名为.gitlab-ci.yml的YAML文件配置GitLab CI / CD 管道。

这里在pipeline中定义了两个作业,每个作业运行不同的命令。命令可以是shell或脚本。

job1:
  script: "execute-script-for-job1"

job2:
  script: "execute-script-for-job2"
  • 可以定义一个或多个作业(job)。
  • 每个作业必须具有唯一的名称(不能使用关键字)。
  • 每个作业是独立执行的。
  • 每个作业至少要包含一个script

2. script

job:
  script:
    - uname -a
    - bundle exec rspec

**注意:**有时, script命令将需要用单引号或双引号引起来. 例如,包含冒号命令( : )需要加引号,以便被包裹的YAML解析器知道来解释整个事情作为一个字符串,而不是一个"键:值"对. 使用特殊字符时要小心:

: , { , } , [ , ] , , , & , * , # , ? , | , - , < , > , = ! , % , @ .

3. before script

job:
  script:
    - uname -a
    - bundle exec rspec

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

4. after script

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

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

build:
  before_script:
    - echo "before-script in job"
  stage: build
  script:
    - echo "mvn clean "
    - echo "mvn install"
  after_script:
    - echo "after script in job"

after_script失败不会影响作业失败

before_script失败导致整个作业失败,其他作业将不再执行。作业失败不会影响after_script运行

5. stages

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

stages:
  - build
  - test
  - deploy

① 未定义stages

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

此时如果没有定义stages,而job中的stage又定义了除build,test,deploy这三个默认的stage,那么CICD会报错

② 定义stages

为了避免上述情况的发生,一个标准的yaml文件必须定义stages

stages:
  - build
  - test
  - codescan
  - deploy

此时当某个job的stage为codescan时,CICD可以明确知道该job的运行顺序,从而能够正常运行

6. .pre & .post

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

7. stage

在job里定义,并且依赖于全局定义的stages 。 它允许将job分为不同的阶段,并且同一stage作业可以并行执行(取决于特定条件 )

unittest:
  stage: test
  script:
    - echo "run test"
    
interfacetest:
  stage: test
  script:
    - echo "run test"

 unittest和interfacetest同属一个stage,按理来说他们应该会并行运行,但是在gitlab-runner中默认一个runner每次运行的job数量为1,因此我们需要修改默认值

vim /etc/gitlab-runner/config.toml 更改为10后自动加载无需重启。

concurrent = 10

8.variables

定义变量,pipeline变量、job变量、Runner变量。job变量优先级最大。

三、综合实例

综合实例:

before_script:
  - echo "before-script!!"

variables:
  DOMAIN: example.com
  
stages:
  - build
  - test
  - codescan
  - deploy

build:
  before_script:
    - echo "before-script in job"
  stage: build
  script:
    - echo "mvn clean "
    - echo "mvn install"
    - echo "$DOMAIN"
  after_script:
    - echo "after script in buildjob"

unittest:
  stage: test
  script:
    - echo "run test"

deploy:
  stage: deploy
  script:
    - echo "hello deploy"
    - sleep 2;
  
codescan:
  stage: codescan
  script:
    - echo "codescan"
    - sleep 5;
 
after_script:
  - echo "after-script"
  - ech

参考文章链接:

pipeline syntax 1 (idevops.site)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hemameba

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值