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

如何在GitHub Actions部署时自动切换到最新release tag版本?

解决方案

你可以在工作流的代码拉取步骤后,新增查询最新release tag、重置代码版本的逻辑,实现Webhook触发时始终使用最新正式发布的版本部署,调整后的完整工作流配置如下:

name: deploy-live

on:
  push:
    tags:
      - release-v*
  repository_dispatch:
    types:
      - prismic_content_update

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      # 拉取完整仓库历史和所有标签
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          fetch-depth: 0 # 拉取全量历史,避免找不到历史标签

      # 仅在repository_dispatch触发时执行版本重置
      - name: Reset to latest release tag
        if: github.event_name == 'repository_dispatch'
        run: |
          # 筛选最新的符合release-v*规则的标签
          LATEST_RELEASE_TAG=$(git tag -l "release-v*" --sort=-v:refname | head -n 1)
          if [ -z "$LATEST_RELEASE_TAG" ]; then
            echo "未找到匹配的release-v*标签,终止部署"
            exit 1
          fi
          echo "使用最新发布标签: $LATEST_RELEASE_TAG"
          # 重置HEAD到对应标签的提交
          git reset --hard $LATEST_RELEASE_TAG

      # 后续你的原有部署步骤保持不变
      - name: Deploy static site
        run: |
          # 这里替换为你原有的部署命令
          echo "开始部署静态站点"
核心逻辑说明
  • 拉取代码时设置fetch-depth: 0是因为GitHub Actions默认采用浅克隆,只会拉取当前触发分支的最新提交,不会包含全量标签和历史提交,无法查询到之前的release标签。
  • git tag -l "release-v*" --sort=-v:refname命令会按照语义化版本号倒序排列所有匹配release-v*规则的标签,取第一个就是最新的正式发布版本,比按标签创建时间排序更准确。
  • 加了if: github.event_name == 'repository_dispatch'条件判断,只有Webhook触发时才会执行版本重置,推送标签触发的部署还是会使用推送的对应标签版本,两类触发场景互不影响。

内容的提问来源于stack exchange,提问作者Hugo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:45:03