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定义在每个作业(包括失败的作业)之后运行的命令数组。
要点
- 即使一个作业运行失败,它的after_script中的内容依然会被执行。这在有些业务场景下是非常有用的。
- after_script的执行环境是与 script分离的,是一个新的执行环境。这也意味着在after_script中无法访问到在before_script和script中定义的变量。
- 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关键字列表