【问题标题】:Github Actions release to other repoGithub Actions 发布到其他仓库
【发布时间】:2020-08-09 02:18:12
【问题描述】:

目前我有以下代码:

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。它拥有所有代码,对其进行编译,并希望将发布推送到公开的 repo B。

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

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

【问题讨论】:

    标签: github yaml privileges github-actions auth-token


    【解决方案1】:

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

    中间公共存储

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

    个人访问令牌

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

    GitHub 应用程序和 Webhook

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

    (可能不是)GitHub 部署密钥

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      • 2020-07-28
      • 2020-06-17
      • 1970-01-01
      • 2020-04-16
      • 2022-08-20
      • 2020-10-11
      相关资源
      最近更新 更多