30

我在组织(比如 ORG)中有 2 个私有 GitHub 存储库(比如 A 和 B)。存储库 A 的存储库 B 位于requirements.txt

-e git+git@github.com:ORG/B.git#egg=B

我对 A (in .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?如何?

4

5 回答 5

12

我是这样做的!

- uses: actions/checkout@v1  
  with:
    repository: organization_name/repo_name
    token: ${{ secrets.ACCESS_TOKEN }}

您需要提供一个有效的令牌,您可以按照本指南生成它

于 2019-11-26T21:43:45.883 回答
9

由于访问令牌绑定到一个帐户并对其所有私有存储库具有写入权限,因此这是一个非常糟糕的解决方案。

相反,使用部署密钥

部署密钥

部署密钥只是可用于克隆存储库的 SSH 密钥。

  1. 在您的计算机上创建一个新的 SSH 密钥对
  2. 公钥放在私有依赖仓库的部署密钥中
  3. 私钥放入应用程序仓库的Actions 机密中
  4. 从计算机中删除密钥

秘密

设置好后,您可以在 GitHub Action 的 SSH 代理中设置私钥。无需导入第三方 GitHub Action,2-liner 就足够了。

eval `ssh-agent -s`
ssh-add - <<< '${{ secrets.PRIVATE_SSH_KEY }}'
pip install -r requirements.txt

我在这里ssh-add找到了该命令。

于 2021-12-09T00:01:40.900 回答
4

要么使用不带密码的 SSH 密钥访问存储库 B,要么为该存储库创建访问令牌,然后使用访问令牌作为密码通过 HTTPS: 访问该存储库https://USERNAME:TOKEN@github.com/ORG/B.git

于 2019-08-23T01:37:34.157 回答
3

无需签出两次,您只需提供pip访问 repo B的 TOKEN。

- name: Install requirements
  run: |
    git config --global url."https://${{ secrets.ACESS_TOKEN }}@github".insteadOf https://github
    pip install -r requirements.txt
于 2021-02-08T00:28:11.107 回答
1

我添加了这一行

git+https://YOUR_TOKEN_HERE@github.com/ORG/REPO_NAME.git@master#egg=REPO_NAME

对我requirements.txt来说,它奏效了。但正如其他人提到的,您的令牌将暴露给任何有权访问此存储库的人。最好在您的存储库中使用秘密。

于 2021-01-09T09:25:28.527 回答