pipeline语法1

job

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

  • 可以定义一个或多个作业
  • 每个作业必须具有唯一的名称(不能使用关键字)
  • 每个作业是独立执行的
  • 每个作业至少要包含一个script :::info 有时, script命令将需要用单引号或双引号引起来. 例如,包含冒号命令( : )需要加引号,以便被包裹的YAML解析器知道来解释整个事情作为一个字符串,而不是一个”键:值”对. 使用特殊字符时要小心: :{}[],&*#?|-<>= !%@ , ``` . :::

    before_script

    用于定义一个命令,该命令在每个作业之前运行。可以在全局定义,也可以在job中定义。在job中定义会覆盖全局。 ```yaml before_script:
    • echo “before-script!!”

variables: DOMAIN: example.com

stages:

  • build
  • deploy

build: before_script:

  1. - echo "before-script in job"

stage: build script:

- echo "mvn clean "
- echo "mvn install"

after_script:

- echo "after script in job"

deploy: stage: deploy script:

- echo "hello deploy"

after_script:

  • echo “after-script” ``` :::info 只会输出job中定义的before_script,全局的before_script 不显示。 :::

    after_script

    用于定义将在每个作业之后运行的命令,不管作业是否失败都会执行!可以在全局定义,也可以在job中定义。在job中定义会覆盖全局。基本属性和before_script一致。 :::info after_script失败不会影响作业失败。befor_script失败会导致整个作业失败。但不影响after_script运行。 :::

    stages

    用于定义作业可以使用的阶段,并且是全局定义的。同一阶段的作业并行运行,不同阶段按顺序执行。 ```yaml stages:
  • build
  • test
  • deploy
    :::info
    全局定义的stages是来自于每个job。如果job没有定义stage则默认是test阶段。如果全局未定义stages,则按顺序运行 build,test,deploy。 
    :::
    ```yaml
    codescan:
    stage: .pre
    script:
    - echo "codescan"
    
    :::info .pre始终是整个管道的第一个运行阶段,.post始终是整个管道的最后一个运行阶段。 用户定义的阶段都在两者之间运行。.pre.post的顺序无法更改。如果管道仅包含.pre.post阶段的作业,则不会创建管道。 :::

    stage

    同一个stage的作业可以并行运行。(runner的concurrent值要大于1一般设置10) ```yaml unittest: stage: test script:
    • echo “run test”

interfacetest: stage: test script:

- echo "run test"

<a name="c8mzC"></a>
#### variables
定义变量,pipeline变量,job变量,runner变量。其中job变量的优先级最大!
<a name="P3bqV"></a>
#### .pre和.post
stage使用.pre和.post声明,<br />.pre表示次作业在所有作业执行之前执行。<br />.post表示此作业在所有作业执行完成之后执行。
```yaml
setup:
  stage: .pre
  script:
    - echo "script in pre..."

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