我按照说明为我的 GitLab 项目设置了一个 Debian 包注册表。
- ✔️ 我启用了 API
- ✔️ 我创建了一个发行版
- ✔️ 我上传了软件包
现在我有一个 CI 任务需要从注册表中提取这些包。我按照说明在我的 CI 任务中尝试了以下操作:
curl --fail-with-body --header "Job-Token: ${CI_JOB_TOKEN}" "https://<my-gitlab-url>/api/v4/projects/45/debian_distributions/<my-codename>/key.asc" | gpg --dearmor | tee /usr/local/share/keyrings/<my-codename>-archive-keyring.gpg > /dev/null
apt-get update
我还将其添加到 sources.list 文件中:
deb [ signed-by=/usr/local/share/keyrings/<my-codename>-archive-keyring.gpg ] https://<my-gitlab-url>/api/v4/projects/45/packages/debian <my-codename> main
最后,我创建/etc/apt/auth.conf.d/sources.conf
了:
echo "machine <my-gitlab-url> login gitlab-ci-token password ${CI_JOB_TOKEN}" > /etc/apt/auth.conf.d/sources.conf
然而,当apt-get update
实际运行时,我得到以下输出:
Err:5 https://<my-gitlab-url>/api/v4/projects/45/packages/debian <my-codeame> InRelease
401 Unauthorized [IP: 10.0.0.5 443]
Reading package lists...
E: Failed to fetch https://<my-gitlab-url>/api/v4/projects/45/packages/debian/dists/<my-codename>/InRelease 401 Unauthorized [IP: 10.0.0.5 443]
E: The repository 'https://<my-gitlab-url>/api/v4/projects/45/packages/debian <my-codename> InRelease' is not signed.
根据它所说的事实Unauthorized
,我认为身份验证出了问题。也许CI_JOB_TOKEN
不起作用。我尝试在 CI 之外使用个人访问令牌手动执行此操作,并且确实有效。
更新
我将其添加到我的.gitlab-ci.yml
文件中
- echo "${CI_JOB_TOKEN:1}"
- echo "${CI_JOB_TOKEN::-1}"
这样我就可以窥探了CI_JOB_TOKEN
,然后在作业运行时,我手动将其输入到/etc/apt/auth.conf.d/sources.conf
计算机上的文件中,并apt-get update
在作业运行时工作。作业结束后,apt-get update
由于令牌过期(如预期),因此不再工作。因此该过程可以使用令牌,但由于某种原因,它在 CI 中不起作用...
我的问题是
CI_JOB_TOKEN
没有正确传递到我的工作中。我将其传递到构建脚本中,但我还需要export
从那里传递它,以便我的其余工作流程可以访问令牌。我将投票关闭该问题,因为它与一个错误有关。