如何在GitHub Workflow中设置并访问Python代码输出的变量供后续步骤使用
解决方案
核心问题原因
- Python代码仅引用了access_token值,没有通过
print()输出,导致命令替换捕获的结果为空 - 使用的
::set-env是已被官方弃用的废弃语法,无法正常生效,且不需要开启不安全的ACTIONS_ALLOW_UNSECURE_COMMANDS配置
正确配置方式
方案1:写入全局环境变量(所有后续步骤都可直接调用)
- name: setup python uses: actions/setup-python@v2 with: python-version: '3.9.0' - name: Get Token run: | python -m pip install --upgrade pip pip install requests-oauthlib Authlib # 必须print输出token才能被捕获 access_token=$(python -c 'from authlib.integrations.requests_client import OAuth2Session; session = OAuth2Session("${{ env.CLIENT_ID }}", "${{ env.CLIENT_SECRET }}") session.fetch_token("${{ env.TOKEN_ENDPOINT }}") print(session.token["access_token"])') # 可选:标记token为敏感值,避免日志泄露 echo "::add-mask::$access_token" # 写入环境变量文件,后续步骤可直接读取 echo "ACCESS_TOKEN=$access_token" >> $GITHUB_ENV - name: Create Container Web run: | echo "token is ${{ env.ACCESS_TOKEN }}" AUTH_HEADER="Authorization: token ${{ env.ACCESS_TOKEN }}" # 后续使用AUTH_HEADER的逻辑写在此处
方案2:写入步骤输出(仅指定步骤按需调用)
- name: setup python uses: actions/setup-python@v2 with: python-version: '3.9.0' - name: Get Token id: get_token run: | python -m pip install --upgrade pip pip install requests-oauthlib Authlib access_token=$(python -c 'from authlib.integrations.requests_client import OAuth2Session; session = OAuth2Session("${{ env.CLIENT_ID }}", "${{ env.CLIENT_SECRET }}") session.fetch_token("${{ env.TOKEN_ENDPOINT }}") print(session.token["access_token"])') echo "::add-mask::$access_token" # 写入当前步骤的输出变量 echo "access_token=$access_token" >> $GITHUB_OUTPUT - name: Create Container Web run: | echo "token is ${{ steps.get_token.outputs.access_token }}" AUTH_HEADER="Authorization: token ${{ steps.get_token.outputs.access_token }}" # 后续使用AUTH_HEADER的逻辑写在此处
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

