如何在GitHub Actions的run-name中获取指定分支的最新Commit SHA
解决GitHub Actions手动触发时获取指定分支最新Commit SHA并显示在run-name中
问题根源:github.sha变量在手动触发工作流时,指向的是触发工作流的分支的最新提交,而非你输入的目标分支的提交,所以会出现指定其他分支仍显示master SHA的情况。
解决方案:通过前置Job获取目标分支SHA
我们可以先创建一个前置Job,专门拉取所有分支并获取目标分支的最新SHA,再将该SHA传递给主Job,最终在run-name中引用这个值。
完整工作流示例:
name: Build Specific Branch on: workflow_dispatch: inputs: branch: description: '分支名称' required: true default: 'master' jobs: # 前置Job:获取目标分支的最新SHA get-target-sha: runs-on: ubuntu-latest outputs: branch-sha: ${{ steps.extract-sha.outputs.sha }} steps: - name: 拉取完整代码仓库 uses: actions/checkout@v4 with: fetch-depth: 0 # 必须设置为0,才能拉取所有分支的历史 - name: 获取目标分支最新SHA id: extract-sha run: | # 拉取目标分支的最新远程提交 git fetch origin ${{ github.event.inputs.branch }} # 输出SHA到GitHub变量 echo "sha=$(git rev-parse origin/${{ github.event.inputs.branch }})" >> $GITHUB_OUTPUT # 主构建Job build: needs: get-target-sha runs-on: ubuntu-latest # 引用前置Job输出的SHA作为run-name的一部分 run-name: Build from [Branch = ${{ github.event.inputs.branch }}] && [COMMIT SHA = ${{ needs.get-target-sha.outputs.branch-sha }}] steps: - name: 切换到目标分支 uses: actions/checkout@v4 with: ref: ${{ github.event.inputs.branch }} # 这里添加你的构建步骤,比如编译、打包等 - name: 执行构建 run: | echo "开始构建分支 ${{ github.event.inputs.branch }},提交SHA:${{ needs.get-target-sha.outputs.branch-sha }}"
关键说明
fetch-depth: 0:必须设置这个参数才能拉取仓库所有分支的完整历史,否则无法获取目标分支的SHA。git rev-parse origin/${分支名}:直接从远程仓库获取目标分支的最新提交SHA,避免本地分支未同步的问题。- Job依赖:主Job通过
needs: get-target-sha确保前置Job先执行,这样才能在run-name中引用其输出的SHA值。
内容的提问来源于stack exchange,提问作者Subzero123
相关产品推荐
相关产品推荐

