极狐GitLab CI/CD关键词(一):脚本script,前置脚本before_script,后置脚本after_script

 2023-09-05 阅读 45 评论 0

摘要:简介 本篇文章详细介绍了极狐GitLab CI/CD中script,before_script,与after_script三个关键词。 对于一个作业script内容是必填项(trigger 作业除外),这也是script关键词放到第一个来讲解的原因。 before_script与after_script这两个关键词

简介

本篇文章详细介绍了极狐GitLab CI/CD中scriptbefore_script,与after_script三个关键词。
对于一个作业script内容是必填项(trigger 作业除外),这也是script关键词放到第一个来讲解的原因。
before_scriptafter_script这两个关键词与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_scriptafter_script中同样适用。
请注意,这里经常出错,pipeLine editor验证不通过。报错信息 Syntax is incorrectscript config should be a string or a nested array of strings up to 10 levels deep。出现这种错误大致就是因为script的内容存在特殊字符。

使用YAML锚点

在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

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中的内容依然会被执行。

after_script的内容可以使用YAML锚点,也可以配置日志颜色,也可以分割多行。
after_script的执行环境是与 script分离的,是一个新的shell环境。这也意味着在after_script中无法访问到在before_scriptscript中定义的变量。此外,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/

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/40.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息