GitHub Action with子句环境变量注入失效,目录为空如何解决?
解决GitHub Action中with子句注入环境变量的问题
核心问题
在GitHub Action的with子句中,直接写环境变量名会被当作字符串字面量处理,无法正确解析变量值,这就是你遇到source-directory参数为空的原因——而run步骤里可以直接用变量名是因为shell会自动解析环境变量。
正确注入方式
1. 引用工作流/步骤级环境变量
不管是工作流全局定义的env,还是当前步骤内的env,都需要用${{ env.变量名 }}的语法在with子句中引用:
jobs: build-and-push: runs-on: ubuntu-latest env: PROTO_BUILD_DIR: ./generated-proto # 工作流全局环境变量 steps: - name: 构建Protocol Buffers代码 run: | mkdir -p $PROTO_BUILD_DIR protoc --go_out=$PROTO_BUILD_DIR ./proto/*.proto - name: 推送到目标仓库 uses: cpina/github-action-push-to-another-repository@main env: API_TOKEN_GITHUB: ${{ secrets.GH_TOKEN }} with: source-directory: ${{ env.PROTO_BUILD_DIR }} # 正确引用环境变量 destination-github-username: "你的用户名" destination-repository-name: "目标仓库名"
2. 引用动态生成的环境变量
如果环境变量是通过前序步骤echo "VAR_NAME=value" >> $GITHUB_ENV生成的,同样用${{ env.变量名 }}引用:
steps: - name: 动态设置构建目录 run: | # 比如根据分支名生成专属目录 BUILD_DIR="./generated-${GITHUB_REF_NAME}" echo "PROTO_BUILD_DIR=$BUILD_DIR" >> $GITHUB_ENV mkdir -p $BUILD_DIR - name: 推送到目标仓库 uses: cpina/github-action-push-to-another-repository@main env: API_TOKEN_GITHUB: ${{ secrets.GH_TOKEN }} with: source-directory: ${{ env.PROTO_BUILD_DIR }} # 引用动态生成的变量 # 其他必填参数...
3. 调试与验证
可以添加一个调试步骤,提前确认变量值是否正确:
- name: 验证环境变量 run: echo "当前构建目录: ${{ env.PROTO_BUILD_DIR }}"
内容的提问来源于stack exchange,提问作者Woody1193
相关产品推荐
相关产品推荐

