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

如何在Github Actions中正确获取git tag消息并设为环境变量?

解决Github Actions中Git Tag Body获取为空的问题

问题根源

你的脚本存在两个核心问题:

  1. 嵌套echo与转义错误:通过echo "$(git tag ...)"输出tag body时,会自动将换行符压缩为空格,同时不必要的双引号转义(\")会干扰命令执行。
  2. tag_body3语法错误:命令替换使用了${git describe...},正确写法应为$(git describe...),不过这不是导致tag_body为空的主因。

修正后的脚本

将Prepare variables步骤替换为以下内容:

- name: Prepare variables
  id: prepare_variables
  run: |
    git fetch --tags --force
    latest_tag=$(git describe --tags --abbrev=0)
    echo "latest_tag=${latest_tag}" >> "$GITHUB_ENV"
    # 直接将tag body写入GITHUB_ENV的多行变量
    {
      echo "tag_body<<EOF"
      git tag -l "${latest_tag}" --format='%(contents:body)'
      echo "EOF"
    } >> "$GITHUB_ENV"
    echo "date=$(date +'%Y-%m-%d')" >> "$GITHUB_ENV"

说明

  • 用大括号{}包裹一组命令,直接追加到GITHUB_ENV,避免嵌套echo导致的格式丢失,完整保留tag body的换行和原始格式。
  • 移除不必要的转义字符,直接通过git tag -l "${latest_tag}" --format='%(contents:body)'获取原始tag body内容。
  • latest_tag变量提前赋值后复用,避免重复执行git describe提升效率。

验证

修改后,create-release步骤中的body参数可以直接使用${{ env.tag_body }},即可获取与本地Bash一致的tag body内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:03:25