lek*_*ble 13 javascript github node.js github-actions
我已经开始使用 GitHub 操作,但是我在访问作为 env 传递的存储库机密方面遇到了困难。
我的工作流文件:
name: Invite
on:
pull_request:
branches: [master]
types: [closed]
jobs:
invite:
runs-on: ubuntu-latest
steps:
- name: Hello world action
uses: lekterable/inclusive-organization-action@master
env:
SECRET_TOKEN: ${{ secrets.SECRET_TOKEN }}
organization: string
SUPER_SECRET: ${{ secrets.SUPER_SECRET }}
Run Code Online (Sandbox Code Playgroud)
动作索引文件
const core = require('@actions/core')
const github = require('@actions/github')
const run = async () => {
try {
...
console.log('env', process.env)
const token = process.env.SECRET_TOKEN
const secret = process.env.SUPER_SECRET
const organization = process.env.organization
console.log('organization', organization)
console.log('token?', !!token)
console.log('secret?', !!secret)
console.log('token length', token.length)
...
} catch (error) {
core.setFailed(error.message)
}
}
run()
Run Code Online (Sandbox Code Playgroud)
如您所见,我传递了 3 个 env,具有 'string' 值的组织按预期存在,但 SECRET_TOKEN 和 SUPER_SECRET 为空。
是的,我确实在运行该操作的 repo 中设置了秘密:
有什么我做错了吗?
Ali*_*Ali 22
就我而言,我必须通过添加secrets: inherit到父作业来将秘密传递给可重用的工作流程
jobs:
call-workflow-passing-data:
uses: octo-org/example-repo/.github/workflows/reusable-workflow.yml@main
with:
config-path: .github/labeler.yml
secrets: inherit # <= this one
Run Code Online (Sandbox Code Playgroud)
更新
虽然下面的原始答案仍然适用于公共存储库,但有一些新的更新可能有助于某些用例。
如果您的存储库是公开的,则有一个pull_request_target不受任何令牌限制的新事件。
原答案
您遇到此行为的原因是Invite工作流是由来自分叉存储库的拉取请求触发的。
除了 GITHUB_TOKEN 之外,当工作流从分叉存储库触发时,机密不会传递给运行程序。
发生这种情况时,actor工作流的用户是打开拉取请求的用户。如果该用户没有对您的存储库的写访问权限,则他们不能使用机密(除了GITHUB_TOKEN)。
任何对存储库具有写入权限的人都可以创建、读取和使用机密。
参考:https : //help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets#using-encrypted-secrets-in-a-workflow
如果您在工作流程中运行此步骤,您将看到它与您的操作无关。该TEST_SECRET秘密在工作流程中也不可用。
- name: Test
env:
TEST_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TEST_SECRET: ${{ secrets.TEST_SECRET }}
run: |
echo ${#TEST_GITHUB_TOKEN}
echo ${#TEST_SECRET}
Run Code Online (Sandbox Code Playgroud)
检查 GitHub 上下文中的事件数据,您将看到actor分叉存储库并打开拉取请求的用户。
- name: Dump GitHub context
env:
GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT"
Run Code Online (Sandbox Code Playgroud)
这是GitHub 工作人员回答的一个不同但相关的问题,其中解释说,对分叉存储库的这些限制是为了“防止恶意行为者使用操作来毒害上游或下游存储库”。
我找到了一个解决方案,我所做的解决方案不是运行关闭 PR 的操作,而是在 master 上的新提交上运行它,这必须由具有“写入权限”的人触发因此,它可以访问回购秘密。
检查提交是否是合并提交有点困难,我们必须显式获取有关 PR 的更多信息,但它有效。如果有人感兴趣,我试图构建的操作的源代码:https ://github.com/lekterable/inclusive-organization-action
| 归档时间: |
|
| 查看次数: |
6467 次 |
| 最近记录: |