You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 18:40:35