当前我有以下代码:
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 token
public_repo
就是这样。该代码有效..但是有没有一种方法不必创建一个单独的帐户,而只是给它作为CI来访问两个存储库的权限? IE:有一种方法可以在我的真实帐户上创建一个令牌,该令牌对于一个存储库是只读的,而对于另一个存储库是读写的?或者也许创建一个github应用令牌或只能上传一个仓库(B)发行版的东西?
中级,公共存储
[首先是将工件上传到中间位置,该位置可从任何地方访问,例如Dropbox,Docker Hub等。然后,您可以在公共存储库中手动触发github动作,以拉回该工件并从中创建发布。要手动触发此操作,您可以使用repository_dispatch
事件,可以在本地使用cURL / postman(带有访问令牌认证承载),也可以使用https://www.actionspanel.app/之类的东西,它是一个github应用,允许您使用repository_dispatch
手动触发github动作],并带有参数,因此您的下载链接将是一个参数。个人访问令牌
最简单的选项仍然是个人访问令牌。您上面的工作流程为repo_token: XXXXXXXXX
,这使我想知道您是否知道github的秘密?理想情况下,此令牌将存储在一个秘密中,然后使用${{ secrets.BRANDONS_TOKEN }}
访问。我想问一下,为什么您担心个人访问令牌。如果您使用github机密并且对将令牌传递给的第三方代码非常小心(例如,您可能不想简单地将令牌传递给@master
),那应该没问题。GitHub Apps和Webhooks
GitHub应用程序或webhooks是另一种方法,您可以按个人和按回购的方式对它们进行身份验证,但是您需要一个在线运行的应用程序来接收和解析消息及其大量工作。((可能不是)GitHub部署密钥
另外要注意的是Github部署密钥,您可以使用它们来获得对单个存储库的读/写访问权限,而无需附加帐户。然后,您可以将此部署密钥存储在另一个存储库的秘密中。但是,我不确定您是否可以使用部署密钥触发发布-它们没有绑定到帐户,因此我不确定谁的用户名会在发布历史记录中显示。