【问题标题】:Avoid path redundancy in Gitlab CI include避免 Gitlab CI 中的路径冗余包括
【发布时间】:2021-03-22 19:10:13
【问题描述】:

为了改进我的 Gitlab CI 文件的结构,我包含了一些特定的文件,例如

include:
  - '/ci/config/linux.yml'
  - '/ci/config/windows.yml'
  # ... more includes

为了避免路径的容易出错的冗余,我想把它放入一个变量中,比如:

variables:
  CI_CONFIG_DIR: '/ci/config'

include:
  - '${CI_CONFIG_DIR}/linux.yml'    # ERROR: "Local file `${CI_CONFIG_DIR}/linux.yml` does not exist!"
  - '${CI_CONFIG_DIR}/windows.yml'
  # ... more includes

但是这不起作用。 Gitlab CI 声称${CI_CONFIG_DIR}/linux.yml 不存在,尽管文档说包含路径中的变量是允许的,请参阅https://docs.gitlab.com/ee/ci/variables/where_variables_can_be_used.html#gitlab-ciyml-file

同样不起作用的是包含一个文件 /ci/config/main.yml 并从中包含没有路径的特定配置:

# /ci/config/main.yml
include:
  - 'linux.yml'    # ERROR: "Local file `linux.yml` does not exist!"
  - 'windows.yml'
  # ... more includes

我怎样才能完成这项工作,或者是否有替代方法可以只在一个地方定义路径而不会使其过于复杂?

【问题讨论】:

    标签: continuous-integration gitlab include gitlab-ci


    【解决方案1】:

    这个好像暂时没有实现,目前积压中有一个open issue

    此外,文档说您可以在 include 部分中使用 variables,这些仅用于预定义变量。

    【讨论】:

    • 谢谢。我担心这会是答案,但希望得到别的答案。至少我现在知道,人们正在为此努力。关于文档,您让我意识到我没有对标点符号(即冒号)给予足够的重视,所以我认为我只限于我自己的变量的名称。
    • 给出的示例表明它不仅是预定义的:OUT_PATH 和 PACKAGE_PATH 都是从预定义动态生成的,但可以假设预定义也可以用字符串替换,您可以让它工作;只是做那个笔记。
    【解决方案2】:

    看看GitLab 14.2(2021 年 8 月)能否提供帮助:

    在 .gitlab-ci.yml 的 include 语句中使用 CI/CD 变量

    您现在可以在.gitlab-ci.yml 文件中将变量用作include 语句的一部分。
    这些变量可以是实例、组或项目 CI/CD 变量。

    这项改进让您可以更灵活地定义管道。
    您可以将相同的.gitlab-ci.yml 文件复制到多个项目并使用变量来改变其行为。
    这样可以减少 .gitlab-ci.yml 文件中的重复,并减少对每个项目进行复杂配置的需要。

    参见DocumentationIssue

    【讨论】:

    • 感谢您指出这一点。现在,我期待我的组织升级到 14.2(我们目前是 14.0)来尝试一下。
    • @bjhend 好的。如果这确实有效,请不要忘记更新此页面。
    猜你喜欢
    • 2011-06-16
    • 1970-01-01
    • 2019-01-02
    • 2011-01-31
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    相关资源
    最近更新 更多