如何在GitHub Actions工作流中向setup.py传递仓库密钥?
解决GitHub Actions中传递密钥给setup.py的问题
可行方案:通过可重用工作流的secrets传递+环境变量注入
1. 调用方工作流配置
在调用可重用工作流时,显式传递需要的密钥,不要通过with参数传递敏感信息:
jobs: build-and-deploy: uses: org/workflows/.github/workflows/build.yml@v1.0.1 secrets: SERVICE_TOKEN: ${{ secrets.token }} with: setup: setup.py
2. 被调用的build.yml配置
在可重用工作流中,先定义接收的secret,然后在执行setup.py的步骤中将其注入为环境变量:
on: workflow_call: inputs: setup: type: string required: true secrets: SERVICE_TOKEN: required: true jobs: build: runs-on: ubuntu-latest steps: - name: 检出代码 uses: actions/checkout@v4 - name: 执行setup脚本 env: SERVICE_TOKEN: ${{ secrets.SERVICE_TOKEN }} run: ${{ inputs.setup }}
3. setup.py中读取token
在Python脚本中通过环境变量获取:
import os token = os.environ.get("SERVICE_TOKEN") if not token: raise ValueError("未获取到认证token") # 后续使用token进行认证操作
为什么之前的方法失败?
- 方法1:GitHub禁止在可重用工作流的
with参数中直接引用secrets,因为with的输入属于工作流的公开配置,存在泄露敏感信息的风险,因此解析时直接报错。 - 方法2:Job outputs会被GitHub自动检测,若内容包含密钥等敏感信息,会被直接跳过设置,目的是防止敏感数据通过公开的job输出泄露。
- 方法3:
secrets: inherit确实会将调用方的密钥传递给可重用工作流,但如果可重用工作流没有在执行setup.py的步骤中主动将密钥注入环境变量,脚本自然无法读取到。
内容的提问来源于stack exchange,提问作者Raphael Grimm
相关产品推荐
相关产品推荐

