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

如何在GitHub Actions中优雅实现Shell脚本内联及变量传递?

优化GitHub Actions变量传递的优雅方案

你可以通过以下几种方式简化变量传递流程,避免繁琐的两步式输出提取:

方案1:使用环境变量传递(最简洁)

利用$GITHUB_ENV将计算出的变量注入到job的环境中,后续步骤直接通过env上下文调用,无需额外定义步骤ID:

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: Calculate tag
        run: echo "TAG=$(./gradlew -q app:getReleaseTag)" >> $GITHUB_ENV

      - name: Upload apk to Github
        uses: softprops/action-gh-release@v2
        with:
          tag_name: ${{ env.TAG }}

方案2:合并逻辑到复合步骤(适合同步骤内多操作)

如果后续操作可以在同一个run步骤内完成(比如不需要调用第三方Action),可以直接在计算变量后立即使用,完全跳过输出传递:

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: Calculate tag and run local commands
        run: |
          TAG=$(./gradlew -q app:getReleaseTag)
          echo "Current tag: $TAG"
          # 这里可以添加其他基于TAG的本地命令

方案3:封装为自定义Action(适合重复使用场景)

如果这个流程需要在多个workflow中复用,可以将计算变量和后续操作封装成一个自定义Action,调用时只需传入必要参数:

# .github/actions/upload-release/action.yml
name: "Upload Release with Calculated Tag"
runs:
  using: "composite"
  steps:
    - name: Calculate tag
      id: tag
      shell: bash
      run: echo "my_tag_name=$(./gradlew -q app:getReleaseTag)" >> $GITHUB_OUTPUT
      working-directory: ${{ inputs.working-directory }}

    - name: Upload apk to Github
      uses: softprops/action-gh-release@v2
      with:
        tag_name: ${{ steps.tag.outputs.my_tag_name }}
        files: ${{ inputs.apk-path }}

# 在主workflow中调用
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: Upload release
        uses: ./.github/actions/upload-release
        with:
          working-directory: ./app
          apk-path: ./app/build/outputs/apk/release/app-release.apk

这些方案中,方案1是最适合你当前场景的简化方式,既保留了步骤的清晰性,又省去了步骤ID和输出变量的额外定义。

内容的提问来源于stack exchange,提问作者m.reiter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 21:42:42