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 对单个存储库的访问权限,而无需附加帐户。然后,您可以将此部署密钥存储在另一个存储库设置中的秘密中。但是,我不确定您是否可以使用部署密钥触发发布 - 它们未绑定到帐户,因此我不确定谁的用户名会在发布历史记录中可见。
目前我有以下代码:
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 对单个存储库的访问权限,而无需附加帐户。然后,您可以将此部署密钥存储在另一个存储库设置中的秘密中。但是,我不确定您是否可以使用部署密钥触发发布 - 它们未绑定到帐户,因此我不确定谁的用户名会在发布历史记录中可见。