在行动中克隆组织内的私有 github 存储库

Yev*_*ych 21 python github github-actions

我在组织(比如 ORG)中有 2 个私有 GitHub 存储库(比如 A 和 B)。存储库 A 在requirements.txt以下位置具有存储库 B :

-e git+git@github.com:ORG/B.git#egg=B
Run Code Online (Sandbox Code Playgroud)

我对 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
Run Code Online (Sandbox Code Playgroud)

由于 B 是私有的,因此安装失败。

如果他们在同一组织中,是否可以在此工作流中测试 A 时安装 B?如何?

Nat*_*ram 100

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

相反,请使用部署密钥

部署密钥

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

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

秘密

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

eval `ssh-agent -s`
ssh-add - <<< '${{ secrets.PRIVATE_SSH_KEY }}'
pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

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

  • 在我的场景中,部署密钥也是最方便的选择,但为了更加方便,我通过 webfactory/ssh-agent 操作管理代理的加载:https://github.com/webfactory/ssh-agent。 (6认同)
  • 我尝试这样做,但在克隆存储库时出现此错误:git@github.com:权限被拒绝(公钥)。致命:无法从远程存储库读取。有什么问题? (3认同)

小智 12

我是这样做的!

- uses: actions/checkout@v1  
  with:
    repository: organization_name/repo_name
    token: ${{ secrets.ACCESS_TOKEN }}
Run Code Online (Sandbox Code Playgroud)

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

  • 我不希望我的访问令牌存储在公司机密中,因为它可能会被多个人访问。 (17认同)
  • 您的意思是使用两次签出,第一次用于仓库 A,第二次(这个)用于仓库 B? (3认同)
  • 请不要将此解决方案用于组织帐户。它不是最理想的,因为它需要您存储您的凭据才能访问它。[Nato Boram 下面提供的解决方案](/sf/answers/4919823401/) 更好,因为它使用部署密钥。 (3认同)

Mic*_*vic 6

使用部署密钥您可以执行以下操作

- uses: actions/checkout@v2
  with:
    ssh-key: ${{ secrets.SSH_PRIVATE_KEY }}
    repository: organization_name/repo_name
Run Code Online (Sandbox Code Playgroud)

为此,您需要

  • 在本地生成 ssh 密钥
  • 将 pub key 作为部署密钥添加到私有存储库
  • 添加私钥作为名为的秘密SSH_PRIVATE_KEY


nor*_*ree 5

您无需签出两次,只需提供pip访问存储库 B 的TOKEN 即可。

    - name: Install requirements
      run: |
        git config --global url."https://${{ secrets.ACESS_TOKEN }}@github".insteadOf https://github
        pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)