gitlab-ci.yml关键字(三)before_script 、script 、after_script

before_script before_script 用于定义在每个作业执行之前所运行的一系列脚本命令。这里需要注意的是,before_script 运行的

before_script

before_script 用于定义在每个作业执行之前所运行的一系列脚本命令。这里需要注意的是,before_script 运行的时机,是在制品(artifacts)恢复后,也就意味着,在这个时机中是可以操作制品的。

示例

my_job:before_script:- echo "Execute this command before any 'script:' commands."- NRM="https://www.xxx.xx"script: - echo "this is script"- echo "output variable in before_script ${NRM}"

效果如下:

可以在before_script中定义一个变量,然后在script中去使用这个变量。因为before_script和script是运行在同一个执行环境之中。
在这里插入图片描述

script

使用script指定运行器要执行的命令。该关键字是能定义在某个job中。可以在job中定义变量然后使用。
如果想在script中使用特殊字符串,而不是 YAML语法,需要使用单引号或者是双引号。这些特殊字符包括:{, }, [, ], , &, *, #, ?, |, -, <, >, =, !, %, @, `.

示例

my_job:script: - NRM="https://www.xxx.xx"- echo "output variable in before_script ${NRM}"- 'curl --request GET --header "Content-Type: application/json" https://www.baidu.com/'

需要注意的是在curl命令中本身包含双引号,那外面就需要单引号错开。否则就不匹配了

效果如下所示:
在这里插入图片描述

after_script

使用after_script定义在每个作业(包括失败的作业)之后运行的命令数组。

要点

  1. 即使一个作业运行失败,它的after_script中的内容依然会被执行。这在有些业务场景下是非常有用的。
  2. after_script的执行环境是与 script分离的,是一个新的执行环境。这也意味着在after_script中无法访问到在before_script和script中定义的变量。
  3. after_script的运行状态不影响当前作业的状态,如果after_script运行失败或超时都不影响当前作业的成功或失败。

示例

my_job:script: - NRM="https://www.xxx.xx"- echo "output variable in script ${NRM}"after_script:- echo "this is after_script"- echo "output variable in script ${NRM}"

无法访问script中的变量

在这里插入图片描述

状态失败也会执行after_script

my_job:before_script:- NRM = "12"script: - echo "${NRM}"after_script:- echo "this is after_script"

在这里插入图片描述

其他

查看所有gitlab CI/CD关键字列表