我有一个gitlab ci作业,可以为我做一些工作,但这取决于另一个回购,因此我需要在此工作中克隆另一个回购。我无法使用https克隆,因为gitlab会询问我用户名和密码,并且gitlab ci是非交互式的。
那么如何在gitlab ci作业中使用https克隆gitlab仓库。
提前谢谢。
答案 0 :(得分:1)
如果您正在运行gitlab版本8.12或更高版本,则权限模型已重新设计。 CI环境变量CI_JOB_TOKEN与这个新的权限模型一起出现。高级版GitLab使用此环境变量作为触发器,但是您可以使用它来克隆存储库。
dummy_stage:
script:
- git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.instance/group/project.git
答案 1 :(得分:0)
您应该使用SSH和只读deploy key克隆该存储库,可能将令牌存储在masked variable中。
答案 2 :(得分:0)
我找到了一种验证克隆身份的方法。首先,我导航至gitlab帐户设置,然后导航至访问令牌标签。
然后使用任何名称创建新的访问令牌,您可以将到期日期留空(但为了安全起见,我已经设置了到期日期),然后选择所需的正确范围。就我而言,我已阅读回购范围。
然后我使用生成的访问令牌通过https克隆我的存储库,如下所示
https://oauth2:YOUR_ACCESS_TOKEN@gitlab.com/PATH/TO/YOUR/REPO.git
要防止CLI公开您的访问令牌,您必须在gitlab的CI变量列表中添加已屏蔽的访问令牌。因此,执行克隆时,将不会显示您的访问令牌。
然后按以下方式访问它
https://oauth2:$ACCESS_TOKEN@gitlab.com/PATH/TO/YOUR/REPO.git
答案 3 :(得分:0)
搜索Google和stackoverflow一段时间后,我没有找到问题的答案,所以我想在这里分享我的解决方案。
我有一个回购,其中包含一些克隆外部存储库的脚本。出于某些原因,使用这些存储库进行身份验证的唯一方法是HTTPS。
在GitLab CI作业期间,由于git提示输入用户名和密码,因此git克隆失败。
我希望git使用我的凭据“登录”一次,并停止在每个git clone
语句(如Docker does)上提示输入凭据。
假设我在名为SERVICE_USER
和SERVICE_PASS
的GitLab CI变量中设置了一些服务凭据。我将在需要执行git操作的每项作业的开头添加以下步骤。
git config --global credential.helper C:/git_creds.bat
Set-Content -Value "@echo off" -Path C:/git_creds.bat
Add-Content -Value "echo username=$SERVICE_USER" -Path C:/git_creds.bat
Add-Content -Value "echo password=$SERVICE_PASS" -Path C:/git_creds.bat
# to test it
git clone https://my-scm-provider.com/project.git
git config --global credential.helper "/bin/bash /git_creds.sh"
echo '#!/bin/bash' > /git_creds.sh
echo "sleep 1" >> /git_creds.sh
echo "echo username=$SERVICE_USER" >> /git_creds.sh
echo "echo password=$SERVICE_PASS" >> /git_creds.sh
# to test it
git clone https://my-scm-provider.com/project.git
我添加了sleep 1
,因为我遇到了失败的克隆并读取了this answer。
如果未在Docker容器中执行CI作业,请执行此操作。
凭据在CI环境根目录的git_creds
中公开。我可以负担得起这样的操作,因为我的配置项是在容器中执行的。由于容器数据不是持久性数据,因此git_creds
文件在每次作业后都会被删除。关于密码,我使用GitLab掩码变量将其从日志中隐藏。
关键字:https git clone无头非交互式凭据帮助器
答案 4 :(得分:0)
我在 /
上遇到文件权限错误,所以我将其更改为 ~/
,它似乎工作得很好。不错!