如何在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
相关产品推荐
相关产品推荐

