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

时间:2021-07-05 11:24:29

标签: bash yaml github-actions

我在网上搜索了很多关于如何在运行 GitHub 操作脚本的同时克隆多个私有存储库的信息。此外,由于我希望克隆的存储库是在存储库本身内的一个文本文件中编写的,因此对我来说这使事情变得更加复杂。 我的意思是,GitHub 在此处解释了如何执行此操作:https://github.com/actions/checkout#checkout-multiple-repos-private 但它假定您知道要克隆的内容,因此您可以列出 yml 文件中的所有存储库。此外,他们假设您只有一两个存储库。如果您有 100 个存储库怎么办...我宁愿为此使用脚本...那么该怎么做呢?有什么想法吗?

1 个答案:

答案 0 :(得分:2)

所以要看到关于这个问题的非常详细和写得很好的答案,我建议在这里看这篇文章: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,这样它就不会暴露给任何人

- 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 Actions 运行时,GitHub 有 a mechanism to detect GitHub tokens in the run logs,如果他们的机制检测到令牌,它会用“***”隐藏它。这就是为什么您的令牌被审查 GitHub Action 输出的人暴露的风险很小的原因。

然后在 bash 脚本本身中,我简单地使用以下命令来克隆我需要的所有存储库:

#clone subrepo 
git clone "https://"$PA_TOKEN"@github.com/<remote_name>/"$SUBREPO_NAME".git"