我正在尝试构建一个 CI 变量,其 URL 指向对 GitLab CI 工件的 Web 访问;为了将该变量用于环境(MR 预览)。简而言之,对于组
topgroup
、子组 gr1/gr2
、项目名称 myproject
和部署在域 pages.example.org
的 gitlab 页面中的项目,我希望我的变量包含如下 URL:
http://topgroup.pages.example.org/-/gr1/gr2/myproject/-/jobs/123456/artifacts/...[artifact path]...
有问题的部分是两个
/-/
部分之间的部分,其余部分要么是静态的,要么可以使用 CI_JOB_ID
和 CI_PROJECT_ROOT_NAMESPACE
构造。中间部分似乎不可能从当前可用的 CI 变量重建(至少在不将它们带到 shell 并插入和取出某些部分的情况下)。我得到的最接近的是:
CI_PAGES_URL
几乎就在那里,它给出了整个http://topgroup.pages.example.org/gr1/gr2/myproject
,不幸的是,没有工件所需的/-/
$CI_SERVER_PROTOCOL://$CI_PROJECT_ROOT_NAMESPACE.$CI_PAGES_DOMAIN/-/$CI_PROJECT_PATH/-/jobs/$CI_JOB_ID/artifacts/...
几乎就在那里,但不幸的是在topgroup
中包含了CI_PROJECT_PATH
,给出了http://topgroup.pages.example.org/-/topgroup/gr1/gr2/myproject/-/jobs/123456/artifacts/...
有没有办法使用简单的方法干净地构造这个 URL,而不需要在 shell 中构建它并重新导出到 gitlab 变量?
它可以使用预定义变量的混合生成(但也取决于您的 GitLab Pages 设置):
如果您想要特定存储库的页面 URL,您可以使用以下模式:
${CI_PAGES_URL}/-/jobs/${CI_JOB_ID}/artifacts/my-file.txt
在我的例子中,导致 404 的原因是我从作业管道中提取的工件链接正在使用根组页面 url。适用于我正在使用的 GitLab 设置的示例:
https://${CI_PROJECT_ROOT_NAMESPACE}.${CI_PAGES_DOMAIN}/-/child-group/${CI_PROJECT_NAME}/-/jobs/${CI_JOB_ID}/artifacts/<ARTIFACT_PATH_OR_NAME>
假设您的存储库具有以下结构:
“根组”->“子组”->“我的存储库”并想要上传“my-file.txt”
上面的示例结果如下:
https://root-group.pages.my-gitlab.com/-/child-group/my-repository/-/jobs/00000/artifacts/my-file.txt
对于
child-group/${CI_PROJECT_NAME}
也许可以使用 $CI_PROJECT_PATH
来代替,但包括根组。
https://docs.gitlab.com/ee/ci/variables/predefined_variables.html
https://docs.gitlab.com/ee/user/project/pages/getting_started_part_one.html(页面网址的不同结构)