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:
- 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 .pre始终是整个管道的第一个运行阶段,.post始终是整个管道的最后一个运行阶段。 用户定义的阶段都在两者之间运行。:::info 全局定义的stages是来自于每个job。如果job没有定义stage则默认是test阶段。如果全局未定义stages,则按顺序运行 build,test,deploy。 ::: ```yaml codescan: stage: .pre script: - echo "codescan".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..."
