本篇文章详细介绍了极狐GitLab CI/CD中script
,before_script
,与after_script
三个关键词。
对于一个作业script
内容是必填项(trigger
作业除外),这也是script
关键词放到第一个来讲解的原因。
before_script
与after_script
这两个关键词与script
的内容一致,都是定义作业的脚本,除了执行时机还有一些其他的不同之处。本文也是详细解释。
关键词script是用来定义作业要执行的命令。只能定义在作业下,不可全局定义。
示例如下
# 单行script
FizzJob:script: echo 'The first step is as good as half over.'# 版权所属:CSDN@拿我格子衫来# 多行script
AsheJob:script: - echo 'You never know your luck.'- echo 'Sow nothing, reap nothing.'
当你想要在script中使用特殊字符时,避免YAML语法,你必须使用单引号'
或双引号"
,如下面的在script中使用curl的例子:
# 版权所属:https://fizzz.blog.csdn.net
YiJob:script:- 'curl --request POST --header "Content-Type: application/json" "https://fizzz.blog.csdn.net/"'
这些特殊字符包括 {
, }
, [
, ]
, ,
, &
, *
, #
, ?
, |
, -
, <
, >
, =
, !
, %
, @
此规则在before_script
,after_script
中同样适用。
请注意,这里经常出错,pipeLine editor验证不通过。报错信息 Syntax is incorrect
或 script config should be a string or a nested array of strings up to 10 levels deep
。出现这种错误大致就是因为script的内容存在特殊字符。
在script中编写内容,除了以上中规中矩的写法外,你还可以使用YAML语法特有的锚点来组装script的内容,如下例
.some-script: &some-script- echo "Execute some script "KayleJob:script:- *some-script- echo "Execute something, for this job only"
这种骚气的写法一定程度上可以提取公共的运行命令,从而降低代码量,提高复用率。但不太推荐。如果真的有类似的需求,请使用作业模板配合extends
关键词来定义公共的作业配置。
由于script的内容都是一行一行地执行,所以有时我们有时为了实现业务,会编写一条很长的命令。在这种情况下可以试一试将命令行分割,使用 |
或 >
。如下
# 最新最全的GitLab CI/CD中文教程
# https://blog.csdn.net/github_35631540/category_10804590.htmlRyzeJob:script:- |echo "Ideal are like the stars."echo "we never reach them ."echo "but like mariners , we chart our course by them."NunuJob:script:- >echo "Have an aim in life, or your energies will all be wasted.."echo "R. Peters."
这种写法会大大提高可读性。也可以设计非常酷的日志格式。
为了使日志具备一定的辨识度,在Script中定义内容时,可以指定打印的颜色。如下:
IreliaJob:script:- echo -e "\e[31mA man is not old ,\e[0m as long as\e[31m he is seeking something.."
如下图:
这里的颜色使用的是 ANSI escape codes。
script中支持的脚本类型有很多,但有一个前提是极狐GitLab Runner的执行器。不同的执行器支持不同的脚本类型。以下是Shell执行器所支持的脚本类型
Shell | 状态 | 描述 |
---|---|---|
bash | 全特性 | Bash (Bourne Again Shell),所有命令都在bash上下文中执行 |
sh | 全特性 | Sh (Bourne shell) ,所有命令都在sh上下文中执行 |
powershell | 全特性 | PowerShell script,所有命令在 PowerShell Desktop上下文中执行 |
pwsh | 全特性 | PowerShell script,所有命令在 PowerShell core上下文中执行 |
cmd | 存在风险 | Windows Batch script , 所有命令在 Batch上下文中执行 |
可以看到,在script
中可以编写所有主流的脚本。这也是极狐GitLab CI/CD的一大特性,基本覆盖了全平台。
你可以在任何你想要的平台上运行极狐GitLab Runner,执行各种各样的作业。
需要注意的是一些特殊的脚本,需要在极狐GitLab Runner的配置文件config.toml
中稍微配置。具体可以查看一下官方Shell执行器文档
before_script是一个作业关键词,但你也可以使用关键词default
让其内容在全局生效。下面是几个使用before_script示例:
# 版权所属:CSDN@拿我格子衫来default:before_script:- echo 'Miracles sometimes occur, but one has to work terribly for them.'RammusJob:script: echo 'Rammus'before_script:- echo 'It never will rain roses.'- echo 'When we want to have more roses we must plant trees.'TeemoJob:script: echo 'Teemo'before_script:- echo 'Genius only means hard-working all one's life.'
这里需要注意的是before_script的执行时机,是在制品(artifacts )被恢复后,也就是说可以操作制品。
此外如果你在before_script中定义了一个新的变量,那么可以在script中使用。如下
# 版权所属:https://fizzz.blog.csdn.netSorakaJob:before_script:- MY_NAME="Fizz"- YOUR_NAME="Amumu"script: - echo ${MY_NAME} # Fizz- echo ${YOUR_NAME} # Amumu
与script关键词类似,before_script也可以使用|
和>
分割命令行,也可以使用YAML文件的锚点来组装内容,也可以自定义打印颜色。
在真正运行时,before_script的内容直接拼接在script内容之前的,在script执行前执行。
关键词after_script
定义的是作业完成后的命令,包括失败作业,这意味着,即使一个作业运行失败,它的after_script中的内容依然会被执行。
after_script
的内容可以使用YAML锚点,也可以配置日志颜色,也可以分割多行。
after_script
的执行环境是与 script
分离的,是一个新的shell环境。这也意味着在after_script
中无法访问到在before_script
和script
中定义的变量。此外,after_script
的运行超时时间为5分钟。
after_script
的运行状态不影响当前作业的状态,如果after_script运行失败或超时都不影响当前作业的成功或失败。
如果当前作业超时或者被取消运行,那么after_script
的内容也不会被运行。
最新最全的GitLab CI/CD中文教程
https://docs.gitlab.cn/ee/ci/yaml/script.html
https://docs.gitlab.cn/ee/ci/yaml/#script
https://docs.gitlab.cn/ee/ci/yaml/#before_script
https://docs.gitlab.cn/ee/ci/yaml/#after_script
https://docs.gitlab.cn/runner/shells/
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态