如何使用 GitHub Actions 克隆多个私有仓库?

8

我一直在网上搜索如何在运行GitHub action脚本时克隆多个私有仓库。此外,由于我想要克隆的仓库在自己的仓库中写在文本文件中,这使得事情变得更加复杂。

我的意思是,GitHub在这里解释了如何做:https://github.com/actions/checkout#checkout-multiple-repos-private但它假设你知道要克隆什么,所以你可以在yml文件中列出所有的仓库。此外,他们假定你只有一个或两个仓库。如果你有100个仓库...我宁愿使用脚本...那怎么办?有什么想法吗?

1个回答

9

摘要:

因此,您需要找到一种在克隆时与 GitHub 进行身份验证的方法。然后,您可以从 bash 脚本中进行克隆,通过 github actions 从 yml 文件中调用该脚本。

第1部分:身份验证:

您可以在此链接(https://dev.to/dtinth/authenticating-as-a-github-app-in-a-github-actions-workflow-27co)中找到四种身份验证方法以及每种方法的优缺点。以下是这些方法的摘要:

  1. 方法1:使用内置的 GITHUB_TOKEN 密钥
  2. 方法2:使用个人访问令牌--> 这是我使用的方法,稍有不同。
  3. 方法3:创建机器人帐户并使用其个人访问令牌
  4. 方法4:创建 GitHub 应用程序并从中生成令牌
所以我使用的解决方案是上面的方法2,基本上我使用自己的PAT(个人访问令牌)发送到我编写的bash脚本中,该脚本为我执行所有克隆操作。好处在于,我将PAT用作secret,这样它不会暴露给任何人。
Part2:这是我在Github Actions中使用的yml文件部分,用于进行克隆操作:
- name: Run multi repo cloning script
        env: 
            PA_TOKEN: ${{ secrets.PAT_SECRET }} # `PAT_SECRET` is a secret that contains your PAT (Personal access token)
        run: ".github/clone_repos.sh"
        shell: bash

此外,GitHub在运行GitHub Actions时拥有检测GitHub令牌的机制,如果他们的机制检测到令牌,它会用“***”隐藏它。因此,您的令牌很少会因为某人查看GitHub Action输出而暴露出来。
在bash脚本中,我只需使用以下命令克隆所需的所有存储库:
#clone subrepo 
git clone "https://"$PA_TOKEN"@github.com/<remote_name>/"$SUBREPO_NAME".git"

值得注意的是,方法1无法用于克隆多个私有仓库。 GITHUB_TOKEN仅能访问与工作流程所属的仓库。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接