Github 动作发布到其他仓库

Github Actions release to other repo

目前我有以下代码:

name: Build-All

    on: 
      push:
        branches: [ master ]
      pull_request:
        branches: [ master ]

    jobs:    
      build-linux-64:
        name: ${{ matrix.config.name }} Build
        runs-on: ${{ matrix.config.os }}
        strategy:
          fail-fast: true
          matrix:
            config:
              - os: ubuntu-latest
                name: Ubuntu 64
                other_linker_flags: '-m64'
                arch: x86_64
                output: myLib.so

        steps:
        - name: Make fake file
          run: |
            echo "hello" > ${{ github.workspace }}/test.txt

        - name: Uploading Release
          uses: ollydev/upload-release-action@master
          with:
            repo_token: XXXXXXXXX
            file: '${{ github.workspace }}/test.txt'
            asset_name: "test"
            tag: autobuild
            owner: '${{ github.repo.owner }}'
            repo: 'B'
            overwrite: true

和两个回购协议:A 和 B。

Repo A 有上面的 yml 作业,它是一个私有 repo。它拥有所有代码,对其进行编译,并希望将发布推送到 public.

的 repo B

为此,我创建了一个新的 github 帐户 My-CI 并将其添加到私人仓库和 public 仓库中。在那个新帐户上,我创建了一个 Personal access token 范围:public_repo

就是这样。该代码有效..但是有没有办法不必创建一个单独的帐户只是为了让它作为 CI 访问两个回购协议? IE:有没有一种方法可以在我的真实帐户上创建一个令牌,该令牌对一个回购协议是只读的,对另一个回购协议是可读写的?或者创建一个 github 应用程序令牌或只能为一个回购 (B) 上传版本的东西?

正如您所暗示的,您不能将个人访问令牌的范围限制为不同存储库的不同范围。有几种方法可以做到这一点。

中级,public存储

第一个是将工件上传到中间位置,可以从任何地方访问,例如Dropbox、Docker Hub 等。然后您可以在 public 存储库中手动触发 github 操作,将此工件拉回并从中创建一个版本。要手动触发此操作,您可以使用 repository_dispatch 事件,在本地使用 cURL / 邮递员(使用访问令牌身份验证承载)或使用 https://www.actionspanel.app/ 之类的东西,这是一个 github 应用程序,它允许您使用 repository_dispatch 和参数手动触发 github 操作,这样您的下载 link 将是一个参数。

个人访问令牌

最简单的选择仍然是个人访问令牌。你上面的工作流程有 repo_token: XXXXXXXXX 这让我想知道你是否知道 github 秘密?理想情况下,此令牌将存储在一个秘密中,然后使用 ${{ secrets.BRANDONS_TOKEN }} 访问。我会问你为什么担心个人访问令牌。如果您使用 github 秘密并且注意将令牌传递给的第 3 方代码(例如,您可能不想简单地将令牌传递给 @master),应该没问题。

GitHub 应用程序和 Webhooks

GitHub 应用程序或 webhooks 是另一种方式,您可以基于每个人和每个存储库对它们进行身份验证,但您需要一个应用程序 运行 在线接收和解析消息及其相当大的工作。

(可能不会)GitHub 部署密钥

另一件需要注意的事情是 Github 部署密钥,您可以使用它们获得 read/write 对单个存储库的访问权限,而无需附加帐户。然后,您可以将此部署密钥存储在另一个存储库设置中的秘密中。但是,我不确定您是否可以使用部署密钥触发发布 - 它们未绑定到帐户,因此我不确定谁的用户名会在发布历史记录中可见。