繁体   English   中英

在操作中克隆组织内的私有 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 密钥。

  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命令。

我是这样做的!

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

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

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

无需检查两次,您只需提供用于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

我添加了这一行

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

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

补充菲利普雷米的回应......

请注意,#egg 不一定是 github 存储库的名称。 您需要在setup.pysetup.cfg看到这setup.cfg

使用部署密钥,您可以做到

- uses: actions/checkout@v2
  with:
    ssh-key: ${{ secrets.SSH_PRIVATE_KEY }}
    repository: organization_name/repo_name

为此,您需要

  • 在本地生成 ssh 密钥
  • 将发布密钥作为部署密钥添加到私有仓库
  • 将私钥添加为名为SSH_PRIVATE_KEY的秘密

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM