2

目前我有以下代码:

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。

回购 A 具有上述 yml 作业,它是一个私人回购。它拥有所有代码,对其进行编译,并希望将发布推送到公开的 repo B。

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

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

4

1 回答 1

0

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

中间,公共存储

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

个人访问令牌

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

GitHub 应用程序和 Webhook

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

(可能不是)GitHub 部署密钥

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

于 2020-04-30T01:04:28.323 回答