在操作中克隆组织内的私有 github 存储库
Cloning private github repository within organisation in actions
我在组织(比如 ORG)中有 2 个私有 GitHub 存储库(比如 A 和 B)。存储库 A 在 requirements.txt
:
中有存储库 B
-e git+git@github.com:ORG/B.git#egg=B
我有以下 A 工作流程(在 .github/workflows/test.yml
中):
name: Python package
on: push
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Install requirements
run: |
pip install -r requirements.txt
- name: Test with pytest
run: |
pytest ./tests
由于B是私有的,所以安装失败。
如果他们在同一个组织中,是否可以在这个工作流中测试 A 的同时安装 B?怎么样?
使用不带密码的 SSH 密钥访问存储库 B,或者 create an access token for that repo 然后使用访问令牌作为密码通过 HTTPS 访问该存储库:https://USERNAME:TOKEN@github.com/ORG/B.git
.
我是这样做的!
- uses: actions/checkout@v1
with:
repository: organization_name/repo_name
token: ${{ secrets.ACCESS_TOKEN }}
您需要提供一个有效的令牌,您可以按照this guide
生成它
我添加了这一行
git+https://YOUR_TOKEN_HERE@github.com/ORG/REPO_NAME.git@master#egg=REPO_NAME
到我的 requirements.txt
并且成功了。但是正如其他人提到的那样,您的令牌将暴露给有权访问此存储库的任何人。最好在您的存储库中使用一个秘密。
无需两次签出,只需提供 pip
的令牌即可访问存储库 B。
- name: Install requirements
run: |
git config --global url."https://${{ secrets.ACESS_TOKEN }}@github".insteadOf https://github
pip install -r requirements.txt
由于访问令牌绑定到一个帐户并且具有对所有其私有存储库的写入权限,因此这是一个非常糟糕的解决方案。
而是使用 deploy keys。
部署密钥只是 SSH 密钥,您可以使用它来克隆存储库。
- 在您的计算机上创建新的 SSH 密钥对
- 将 public 密钥 放入私有依赖库的 部署密钥
- 将私钥放入应用程序仓库的Actions secrets
- 从您的计算机中删除密钥
设置后,您可以在GitHub Action 的SSH 代理中设置私钥。无需导入第三方 GitHub Action,一个 2-liner 就足够了。
eval `ssh-agent -s`
ssh-add - <<< '${{ secrets.PRIVATE_SSH_KEY }}'
pip install -r requirements.txt
我发现 ssh-add
命令 。
我在组织(比如 ORG)中有 2 个私有 GitHub 存储库(比如 A 和 B)。存储库 A 在 requirements.txt
:
-e git+git@github.com:ORG/B.git#egg=B
我有以下 A 工作流程(在 .github/workflows/test.yml
中):
name: Python package
on: push
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Install requirements
run: |
pip install -r requirements.txt
- name: Test with pytest
run: |
pytest ./tests
由于B是私有的,所以安装失败。
如果他们在同一个组织中,是否可以在这个工作流中测试 A 的同时安装 B?怎么样?
使用不带密码的 SSH 密钥访问存储库 B,或者 create an access token for that repo 然后使用访问令牌作为密码通过 HTTPS 访问该存储库:https://USERNAME:TOKEN@github.com/ORG/B.git
.
我是这样做的!
- uses: actions/checkout@v1
with:
repository: organization_name/repo_name
token: ${{ secrets.ACCESS_TOKEN }}
您需要提供一个有效的令牌,您可以按照this guide
生成它我添加了这一行
git+https://YOUR_TOKEN_HERE@github.com/ORG/REPO_NAME.git@master#egg=REPO_NAME
到我的 requirements.txt
并且成功了。但是正如其他人提到的那样,您的令牌将暴露给有权访问此存储库的任何人。最好在您的存储库中使用一个秘密。
无需两次签出,只需提供 pip
的令牌即可访问存储库 B。
- name: Install requirements
run: |
git config --global url."https://${{ secrets.ACESS_TOKEN }}@github".insteadOf https://github
pip install -r requirements.txt
由于访问令牌绑定到一个帐户并且具有对所有其私有存储库的写入权限,因此这是一个非常糟糕的解决方案。
而是使用 deploy keys。
部署密钥只是 SSH 密钥,您可以使用它来克隆存储库。
- 在您的计算机上创建新的 SSH 密钥对
- 将 public 密钥 放入私有依赖库的 部署密钥
- 将私钥放入应用程序仓库的Actions secrets
- 从您的计算机中删除密钥
设置后,您可以在GitHub Action 的SSH 代理中设置私钥。无需导入第三方 GitHub Action,一个 2-liner 就足够了。
eval `ssh-agent -s`
ssh-add - <<< '${{ secrets.PRIVATE_SSH_KEY }}'
pip install -r requirements.txt
我发现 ssh-add
命令