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

Eya*_*ber 8 bash yaml github-actions

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

Eya*_*ber 9

概括:

因此,在进行克隆时,您需要找到一种通过 github 进行身份验证的方法。然后,您可以从 bash 脚本进行克隆,您可以通过 github 操作从 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 作为秘密,这样它就不会暴露给任何人。

第 2 部分:这是我在 github 操作中用于进行克隆的 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
Run Code Online (Sandbox Code Playgroud)

此外,GitHub 有一种机制可以在 GitHub Actions 运行时检测运行日志中的 GitHub 令牌,如果他们的机制检测到令牌,就会用“***”隐藏它。这就是为什么您的令牌被审查 GitHub Action 输出的人暴露的风险很小。

第 3 部分:在 bash 脚本本身中,我只是使用以下命令来克隆我需要的所有存储库:

#clone subrepo 
git clone "https://"$PA_TOKEN"@github.com/<remote_name>/"$SUBREPO_NAME".git"
Run Code Online (Sandbox Code Playgroud)