GitLab CI 使用 API 获取预定义变量?

Posted

技术标签:

【中文标题】GitLab CI 使用 API 获取预定义变量?【英文标题】:GitLab CI get predefined variable with API? 【发布时间】:2018-12-12 04:52:58 【问题描述】:

我在我的 gitlab ci 管道中使用像 $CI_COMMIT_REF_SLUG 这样的预定义变量,通过 gitlab api 访问这些变量会非常有用。

我已阅读文档并浏览了所有与 gitlab-ci 相关的 GET 路由(分支/、作业/、管道/),但只能找到每个作业和管道的原始分支名称/标签。

有没有可以访问这个变量的?

编辑: 用例是我想在管道成功后查询 url。 在管道期间会生成这样的 url example.com/$_CI_COMMIT_REF_SLUG/

我需要来自 API 的这样的响应:


    "ref_slug":"foo-12",
    "ref":"-/foo_12-"

【问题讨论】:

您有特定的用例吗?我认为在预定义变量中设置的所有信息都可用于 Gitlab API,但作为 json 数据。 @Ekans 编辑问题以回答用例问题 您是否尝试使用webhooks 解决您的问题? @Ekans 你能解释一下吗?我不明白 webhook 如何帮助我在 SLUG 中获取分支名称? 也许我理解错了。我从你的评论中扣除了你想在管道之后触发example.com/$_CI_COMMIT_REF_SLUG。我说的对吗? 【参考方案1】:

我认为不存在这样的 API。

但是,您可以并行使用基于函数计算的自己的局部变量:https://gitlab.com/gitlab-org/gitlab-runner/-/blob/main/Makefile.build.mk#L25

BRANCH=$(git branch --show-current)
CI_COMMIT_REF_SLUG=$(echo $BRANCH | cut -c -63 | sed -E 's/[^a-z0-9-]+/-/g' | sed -E 's/^-*([a-z0-9-]+[a-z0-9])-*$$/\1/g')

我认为他们的实现不会很快改变(因为向后兼容的影响)需要同步。 如果您不希望因实施更改而受到副作用的影响,您可以在任何地方使用您的计算值。

【讨论】:

以上是关于GitLab CI 使用 API 获取预定义变量?的主要内容,如果未能解决你的问题,请参考以下文章

关于gitlab ci在include中使用变量

变量 gitlab ci 中的变量

规则中无法识别 GitLab CI 自定义变量

如何将值传递给 Gitlab CI 作业

Gitlab Ci中自动生成版本号

Gitlab CI Runner预定义宏MSBuild