如何在调用可复用工作流前用Bash设置GitHub Action环境变量?
解决方案
核心问题分析
你遇到两个关键限制:
- GitHub Actions 明确要求可复用工作流必须在
jobs.<job-id>顶层通过uses引用,不能嵌套在steps步骤内,这是报错的直接原因。 - 工作流初始化阶段就会解析
uses中的分支变量,此时GITHUB_ENV还未生成,所以无法用环境变量传递分支名,必须通过Job 输出传递值。
修正后的工作流配置
name: "Deploy The Kraken" on: push: branches: - dev pull_request: branches: - dev workflow_dispatch: jobs: # 第一步:读取config.yml中的分支名,作为Job输出 get-branch: runs-on: ubuntu-latest outputs: feature_branch: ${{ steps.extract_branch.outputs.branch }} steps: - name: Checkout code uses: actions/checkout@v4 - name: Extract branch from config.yml id: extract_branch run: | BRANCH=$(awk -F: '/^branch:/ { gsub(/ /, "", $2); print $2 }' config.yml) echo "branch=$BRANCH" >> $GITHUB_OUTPUT # 可选:验证提取的分支名 - name: Test extracted branch run: echo ${{ steps.extract_branch.outputs.branch }} # 第二步:依赖前置Job,调用可复用工作流 call-build: needs: get-branch uses: ######/#####/.github/workflows/kraken.yml@${{ needs.get-branch.outputs.feature_branch }} with: environment: ##### workspace: ##### contract: ##### production-ref: #####
关键说明
get-branchJob:先拉取代码(必须执行checkout才能读取仓库内的config.yml),用awk提取并清理分支名后,通过$GITHUB_OUTPUT输出值(GitHub Actions 2.1+ 版本推荐用此方式替代旧的set-output命令)。call-buildJob:通过needs: get-branch声明依赖,确保前置Job完成后再执行,然后在顶层uses中直接引用前置Job的输出作为复用工作流的分支。
内容的提问来源于stack exchange,提问作者Mojito
相关产品推荐
相关产品推荐

