Gitlab并将隐藏的关键脚本放入包含文件中
Posted
技术标签:
【中文标题】Gitlab并将隐藏的关键脚本放入包含文件中【英文标题】:Gitlab and placing hidden key scripts into include files 【发布时间】:2019-08-13 17:55:18 【问题描述】:我有几个不同的脚本,我想在多个项目的不同阶段运行这些脚本。目前它们的形式是:
.hidden_key: &hidden_key |
do_something
do_something_else
real_job:
script:
- *hidden_key
实际上.hidden_key
是我在整个.gitlab-ci.yml
文件中以及以这种方式跨多个项目使用的函数。但是当我将.hidden_key
移动到文件中并像这样包含它时,我似乎无法让包含工作:
include:
- remote: https://gitlab/project/master/raw/hidden_key.yml
real_job:
script:
- *hidden_key
当我这样做时,gitlab 抱怨:
Error: Unknown alias: hidden_key
我做错了什么,或者这是包含的实际限制(因此不受支持)?
有什么替代方法可以清理我的.gitlab-ci.yml
文件?
【问题讨论】:
【参考方案1】:他们添加了!references
标签
https://docs.gitlab.com/ee/ci/yaml/README.html#reference-tags
本质上,这就是您可以完成对别名的引用的方法
include:
- remote: https://gitlab/project/master/raw/hidden_key.yml
real_job:
script:
- !reference [.hidden_key]
【讨论】:
【参考方案2】:这几乎可以肯定是包含的限制(使用标记显式实现会更好)。
标准 YAML 加载包括 parse, a compose and a construction phase. 别名在撰写阶段得到解析,并且锚点例如不要结转到多文档 YAML 文件中的下一个文档。
尽管include
键可能被解释为构建阶段的早期(但这也可能在完成该阶段之后发生,解释生成的数据结构),然后包含 YAML 中的别名将已经需要在它的撰写阶段。
使用一些模板系统 jinja2 会更幸运,当然您也可以使用常见阶段填充要从 YAML 文件中替换的变量。
【讨论】:
您是否建议我可以在 .gitlab-ci.yml 文件中使用 jinja2 模板?或者我应该以某种方式通过脚本使用 jinja2 模板创建该文件?如果是后者,gitlab 可以通过提交触发器或其他方式自动执行此操作吗?如果是这样,将非常欢迎指向解释这一点的文档的指针!感谢您的回复,顺便说一句,非常感谢! 我不知道这是否可以在 gitlab 中完成。我通过实现一个新命令来完成类似于 docker-compose 的操作(提供不可用的功能),该命令生成 docker-compose 期望的 YAML 文件,然后调用 docker-compose。并通过在文档的后端运行预处理器来支持 readthedocs.org 上基于 YAML 的文档文件格式。后者是可能的,因为它们允许 python 代码在沙箱中运行,gitlab 需要提供类似的东西,但我不知道它是否提供。【参考方案3】:您是否尝试过使用extends
? Documentation
例子:
include:
- remote: https://gitlab/project/master/raw/hidden_key.yml
real_job:
extends: .hidden_key
【讨论】:
以上是关于Gitlab并将隐藏的关键脚本放入包含文件中的主要内容,如果未能解决你的问题,请参考以下文章
将脚本移动到 gitlab-ci.yml 中的单独文件中以避免代码重复并将其包含在多个文件中