如何在Github Actions中正确获取git tag消息并设为环境变量?
解决Github Actions中Git Tag Body获取为空的问题
问题根源
你的脚本存在两个核心问题:
- 嵌套echo与转义错误:通过
echo "$(git tag ...)"输出tag body时,会自动将换行符压缩为空格,同时不必要的双引号转义(\")会干扰命令执行。 - 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
相关产品推荐
相关产品推荐

