使用GitLab令牌进行克隆,无需身份验证

我想克隆GitLab仓库没有提示我的自动化脚本,通过使用我的私人令牌从我的GitLab帐户。

有人能给我一个样品吗?

我知道我可以这样做的用户和密码:

git clone https://" + user + ":" + password + "@" + gitlaburl;

我知道这是可能的ssh密钥

但是,这两种选择都不够。

337783 次浏览

你可以这样做:

git clone https://oauth2:ACCESS_TOKEN@somegitlab.com/vendor/package.git

你可以这样做:

git clone https://gitlab-ci-token:<private token>@git.example.com/myuser/myrepo.git

你可以为你的GitLab回购的CI/CD管道使用runner令牌。

git clone https://gitlab-ci-token:<runners token>@git.example.com/myuser/myrepo.git

其中<runners token>可以从:

git.example.com/myuser/myrepo/pipelines/settings

或者通过单击Settings icon -> CI/CD Pipeline并在页面上寻找跑步者令牌

跑步者令牌位置截图: 截图of the runners token location < / p >

8.12开始,不再支持使用HTTPS + runner令牌进行克隆,如前面提到的在这里:

在8.12中,我们改进了构建权限。从现在开始不支持使用runner令牌克隆项目(它实际上是巧合,从来都不是一个完整的功能,所以我们在8.12中改变了这一点)。您应该使用构建令牌代替。

https://docs.gitlab.com/ce/user/project/new_ci_build_permissions_model.html被广泛记录在这里。

我去SSH使用每个项目部署键设置(只读)

gitlab有很多令牌:

  • 私人的令牌
  • 个人访问令牌
  • CI/CD运行令牌

我只测试了个人访问令牌使用GitLab Community Edition 10.1.2,示例:

git clone https://gitlab-ci-token:${Personal Access Tokens}@gitlab.com/username/myrepo.git




git clone https://oauth2:${Personal Access Tokens}@gitlab.com/username/myrepo.git

或使用用户名和密码:

git clone https://${username}:${password}@gitlab.com/username/myrepo.git

或输入您的密码:

git clone https://${username}@gitlab.com/username/myrepo.git

但是私人的令牌似乎不能工作。

使用令牌而不是密码(令牌需要有“api”范围才能允许克隆):

git clone https://username:token@gitlab.com/user/repo.git

在11.0.0-ee上测试。

在GitLab CI管道中,CI_JOB_TOKEN环境变量为我工作:

git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/...

来源:Gitlab文档

顺便说一句,在.gitlab-ci.yml中设置这个变量有助于调试错误。

variables:
CI_DEBUG_TRACE: "true"
一种可能的方法是使用部署令牌 (https://docs.gitlab.com/ee/user/project/deploy_tokens)。创建令牌后,使用:

git clone https://<username>:<deploy_token>@gitlab.example.com/tanuki/awesome_project.git

如上面的链接所述。

如果你已经有了一个存储库,并且刚刚改变了你做MFA认证的方式,你可以改变你的remote origin HTTP URI来使用你的新api令牌,如下所示:

git remote set-url origin https://oauth2:TOKEN@ANY_GIT_PROVIDER_DOMAIN/YOUR_PROJECT/YOUR_REPO.git

而且您根本不需要重新克隆存储库。

为了让我的未来我快乐:RTFM -不要使用gitlab-ci-令牌,而是使用.netrc文件。

这里有几个要点:

  1. echo -e "machine gitlab.com\nlogin gitlab-ci-token\npassword ${CI_JOB_TOKEN}" > ~/.netrc
  2. 不要忘记用你的URL替换“gitlab.com”!
  3. 不要自作聪明,直接创建.netrc文件——gitlab不会替换文件中的$CI_JOB_TOKEN !
  4. 使用https://gitlab.com/whatever/foobar.com -不是ssh://git@foobar,不是git+ssh://,不是git+https://。URL中也不需要任何CI-TOKEN。
  5. 确保你可以git clone [url from step 4]

背景:我有

fatal: could not read Username for 'https://gitlab.mycompany.com': No such device or address

当我试着让Ansible + Gitlab + Docker像我想象的那样工作时。现在它起作用了。

不需要定制URL。只需为gitlab令牌使用git配置,例如

git config --global gitlab.accesstoken {TOKEN_VALUE}

扩展描述在这里

上面的许多答案都很接近,但它们会导致deploy令牌的~username语法错误。还有其他类型的令牌,但deploy token是gitlab提供的(至少大约2020+)每回购,以允许自定义访问,包括只读。

repository(或group)中,找到settings——>repository——比;deploy tokens。创建一个新的。usernametoken字段被创建。username默认不是一个固定值;它对这个令牌来说是唯一的。

git clone https://<your_deploy_token_username>:<the_token>@gitlab.com/your/repo/path.git

在gitlab.com公开测试,免费账号。

现在(2020年10月),你可以只使用以下内容

git clone $CI_REPOSITORY_URL

它将扩展为如下内容:

git clone https://gitlab-ci-token:[MASKED]@gitlab.com/gitlab-examples/ci-debug-trace.git

其中"标记"密码是临时令牌(在构建完成后将自动撤销)。

在我的例子中,我只提供了令牌 而不是密码(第二个输入字段)。

enter image description here

我第一次从命令行推送本地回购。

从头开始,这些是我输入的命令(记得先移动到回购文件夹内)。

$ git init


$ git status


$ git add .


$ git status


$ git commit -m 'Shinra Tensei.'


$ git push --set-upstream https://gitlab.com/userName/my-repo.git master

然后,您可以在图片中看到的弹出消息出现。提供用户名和令牌。