将脚本附加到一个阶段 .gitlab-ci.yml
Posted
技术标签:
【中文标题】将脚本附加到一个阶段 .gitlab-ci.yml【英文标题】:Append the script on one stage .gitlab-ci.yml 【发布时间】:2020-09-23 14:52:14 【问题描述】:如何在.gitlab-ci.yml文件的一个stage中追加script部分?
例如在这个例子中
stages:
- stage1_name
.a:
script:
- echo "String 1"
.b:
script:
- echo "String 2"
stage1_name:
stage: stage1_name
extends: .a
extends: .b
script:
- echo "String 3"
如何获得输出:
String 1
String 2
String 3
代替:
String 3
【问题讨论】:
【参考方案1】:Gitlab 13.9 引入了一个!reference-tag,这使得这成为可能;
.setup:
script:
- echo creating environment
test:
script:
- !reference [.setup, script]
- echo running my own command
【讨论】:
【参考方案2】:您可以像这样使用 YAML anchors:
stages:
- stage1_name
.a: &a
- echo "String 1"
.b: &b
- echo "String 2"
stage1_name:
stage: stage1_name
script:
- *a
- *b
- echo "String 3"
【讨论】:
【参考方案3】:我的解决方案是:
stages:
- stage1_name
.b:
script:
- echo "String 2"
stage1_name:
stage: stage1_name
before_script:
- echo "String 1"
extends: .b
after_script:
- echo "String 3"
为了不覆盖 stage_1_name 中的 script 部分,我使用了 before_script 和 after_script。
【讨论】:
请注意,即使script
失败,after_script
也会运行。
还要注意 before_script 在同一个 shell 中执行,而 after_script 在新的 shell 中执行。这意味着 after_script 可能无法正常运行,具体取决于您的用例。 docs.gitlab.com/ee/ci/yaml/#before_script
另请注意,after_script
中的任何错误都会被忽略,并且不会导致作业失败。【参考方案4】:
这是不可能的,当你使用extends时你会覆盖整个块。
您可以使用 @user3106558 示例等依赖项
【讨论】:
我得到了这个“script2 工作:依赖 script1 没有在之前的阶段定义”【参考方案5】:我不确定extends
的用法,但我通常在这种情况下使用dependencies
。
stages:
- stage1
script1:
stage: stage1
script:
//doSomething
script2:
stage: stage1
dependencies:
- script1
script:
//doSomething
script3:
stage: stage1
depencencies:
- script2
script:
//doSomething
这样,script2 将在 script1 完成后启动,而 script3 - 仅在第二个之后启动。
【讨论】:
我得到了这个“script2 工作:依赖 script1 没有在之前的阶段定义” 这不可能。dependencies
只能引用先前阶段的作业,它的唯一功能是限制从这些作业中获取的工件。以上是关于将脚本附加到一个阶段 .gitlab-ci.yml的主要内容,如果未能解决你的问题,请参考以下文章
如何在 .gitlab-ci.yml 中指定通配符工件子目录?
在 GitLab 中创建标签时查找源分支(使用 gitlab-ci.yml)