如何利用条件逻辑在单步骤中设置GitHub Action Job输出?
简化GitHub Actions中分支/标签推送的分支名获取步骤
你完全可以把这三个步骤合并成单个步骤,通过条件表达式判断选择要读取的ref字段,再一次性完成分支名处理和输出设置,简化后的配置如下:
setup: name: Setup variables runs-on: ubuntu-latest if: github.event_name == 'push' outputs: stackName: ${{ steps.set-stack-name.outputs.branch }} steps: - uses: actions/checkout@v2 - id: set-stack-name name: Extract branch name and set output run: | # 根据是否是deploy标签推送,选择对应的ref源 raw_ref="${{ startsWith(github.ref, 'refs/tags/deploy') && github.event.base_ref || github.event.ref }}" # 移除refs/heads/前缀,并过滤合法字符 branch=$(echo "${raw_ref#refs/heads/}" | tr -cd '[a-zA-Z0-9-]') echo "Branch name is $branch." # 设置输出变量 echo "branch=$branch" >> $GITHUB_OUTPUT
关键说明:
- 条件选择ref源:用
${{ startsWith(github.ref, 'refs/tags/deploy') && github.event.base_ref || github.event.ref }}实现逻辑判断:如果是deploy前缀的标签推送,就读取github.event.base_ref;否则读取github.event.ref。 - 简化分支名处理:用shell的参数扩展
${raw_ref#refs/heads/}替代字符串替换命令,更简洁地移除refs/heads/前缀。 - 输出方式优化:使用
$GITHUB_OUTPUT替代旧的::set-output命令,这是GitHub Actions目前推荐的输出设置方式(旧命令仍兼容,但新方式更规范)。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

