使用 clone_url 和 user:token 格式化 curl 以克隆 git 存储库

Formatting curl to clone git repos using clone_url and user:token

我目前有一个 shell 脚本,我想将其用作 Jenkins/Docker 作业的一部分,该作业从我的组织中克隆所有标记有特定语言的存储库。

curl -s -H "Authorization: token "$token"" https://github.[company].com/api/v3/orgs/$org/repos\?page\=$i\&per_page\=100 |
jq '.[] | select(.language != null) | select(.language | contains("'$lang'")).ssh_url' | xargs -n 1 git clone

在大多数情况下它都可以工作,但我意识到我需要在 Docker 容器中配置 SSH 才能正常工作。我发现我仍然可以使用带有 user:token 组合的 HTTPS 进行克隆,而不是尝试进行设置。

git clone https://user:token@github.[company].com/organization/repo.git

我的问题是我正在获取所有目标存储库的列表并克隆它们,因此我需要以某种方式为每个存储库传递 user:token。我知道我可以获得 clone_url 而不是 ssh_url 但我不知道如何插入凭据。我环顾四周但没有发现任何可以帮助我解决这个问题的东西。有谁知道我是否以及如何格式化脚本以便它在 URL?

中传递凭据

谢谢

您可以关注 Kayan Azimov 的“Dockerizing Jenkins: Securing Passwords With docker-compose, docker-secret and Jenkins Credentials Plugin

它使用秘密注册密码

secrets:
  artifactoryPassword:
    file: ./secrets/artifactoryPassword

It will bind mount docker secret files, to which we can later refer from container by /run/secrets/secret_name_here path.

如果没有,您也可以添加到您的脚本中

git config --global url."https://github.com/github.[company].com".insteadOf "git@github.com/github.[company].com"

没有更多 sed 可做。
参见 git config url.<base>.insteadOf

我想我看错了脚本的格式化部分。在使用 xargs 到 git 克隆之前,我最终在 curl/jq 输出上使用 sed 来格式化 url。

sed 's,https://,https://user:token@,g'