使用秘密的私人行动

时间:2020-10-16 14:48:09

标签: github-actions

我正在上编码课,学生可以使用个人私人存储库将答案上传到我们的测验中。所以这是我组织的存储库结构的样子:

my_organization/student_1_project
my_organization/student_2_project
my_organization/...
my_organization/student_n_project

我想在学生存储库中的任何push上运行一个私有GitHub Action。该动作将对学生的工作进行部分审查,并通知我一些东西。当然,学生必须无法访问的代码,否则将提供提示和解决方案。

我有三个问题:

  1. 我的工作流程可以吗my_organization/student_2_project是使用私人行动my_organization/my_private_action吗?感谢actions/checkout@v2(请参阅here),但似乎可以肯定,这涉及到使用键,令牌或机密-我对此不太放心,尽管确实存在错误,但目前仍会出现错误:
Error: fatal: repository 'https://github.com/my_organization/my_private_action' not found
  1. 是否可以阻止学生(my_organization/student_2_project的所有者/管理员)看到my_organization/my_private_action中的代码?

  2. 在相同的约束下,可以将私人诉讼托管在另一个组织中吗?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这就是我对限制的理解:

  1. 当前不直接支持使用私有/内部存储库中的操作,请参见路线图上的this issue。一种可能的解决方法是添加一个个人访问令牌,该令牌可以访问包含该操作的私有存储库,然后像这样进行检出:

    - name: Get private repo with action
      uses: actions/checkout@v2
      with:
        repository: yourorg/privateactionrepo
        ref: master
        token: ${{ secrets.PAT_TOKEN }}
        path: .github/actions
    

    然后您可以在另一步骤中使用该操作,例如

    uses: ./.github/actions/actionname
    

    PAT可能是组织级别的秘密,因此您不必将其添加到每个学生回购中。

  2. 由于学生的存储库可以访问PAT,因此他们可以使用它来创建工作流程,以检出私有存储库并执行所需的任何操作-上传其内容,打印每个文件等。

  3. 只要PAT有权签出包含操作的存储库,该操作就可以存在于任何地方,包括在另一个组织中。

或者,如果您想阻止学生看到自己的动作,则可以向学生的存储库中添加一个工作流,该工作流发送一个request to the GitHub API,然后在对repository_dispatch的操作中触发一个触发器事件。