无法理解如何在 GitLab 中下载安全文件

问题描述 投票:0回答:2

我已在存储库安全文件中上传名为

example.conf
的文件,并希望在运行 CI / CD 管道脚本时下载该文件。我尝试遵循 GitLab 文档中的项目级安全文件,但我仍然不明白文件的正确路径应该是什么。

我的尝试是这样的:

curl --header "JOB-TOKEN: $CI_JOB_TOKEN" https://gitlab.com/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/download-secure-files/-/example.conf

当我得到回复时,这显然是不正确的:

<html><body>You are being <a href="https://gitlab.com/users/sign_in">redirected</a>.</body></html>

即使通过浏览器访问该文件,我也无法访问该文件,同时文档中提供的 URL 有效。我不明白 URL 应该由什么组成,因为使用

https://gitlab.com/<GROUP NAME>/<PROJECT_NAME>/download-secure-files/-/<FILE NAME>
不起作用。

那么,如何从 URL 访问 GitLab 安全文件?

gitlab continuous-integration continuous-deployment
2个回答
2
投票

好吧,我不知道如何使用

download-secure-files
工具来完成此操作,但 GitLab 提供了用于处理安全文件的 API,所以我使用了它。我的方法包括下载有关存储在存储库中的安全文件的数据、提取文件名和 ID 对并下载每个文件。

  1. 下载有关此项目中存储的安全文件的数据:
curl --request GET -H "JOB-TOKEN: $CI_JOB_TOKEN" https://gitlab.com/api/v4/projects/$CI_PROJECT_ID/secure_files > secure_files.json
  1. 提取文件
    id
    name
cat secure_files.json | jq '.[] | "\(.id),\(.name)"' | tr -d '"' > files.txt
  1. 下载文件内容。
while IFS=, read -a line;
do set -- "${line[@]}";
    curl --request GET --header "JOB-TOKEN: $CI_JOB_TOKEN" https://gitlab.com/api/v4/projects/$CI_PROJECT_ID/secure_files/$1/download > $2;
done < files.txt

注意:这仅适用于

bash
shell,因为例如在
-a
命令中使用了
read
标志。我对 shell 脚本不够熟悉,无法使其更加兼容或高效。


0
投票

我也被这个问题困扰了一段时间。

您无需更改文档中的 url。

将 SECURE_FILES_DOWNLOAD_PATH 更改为您需要秘密文件的路径,并卷曲 URL。这会将您作为秘密文件上传的所有文件下载到指定路径。

variables:
    SECURE_FILES_DOWNLOAD_PATH: './where/files/should/go/'
  script:
    - curl --silent "https://gitlab.com/gitlab-org/incubation-engineering/mobile-devops/download-secure-files/-/raw/main/installer" | bash
© www.soinside.com 2019 - 2024. All rights reserved.