我将 JSON 字段 保存.body
到 ENV 变量。该字段的内容始终会随着多个字符串和字符而变化,它是 GitHub 中拉取请求的正文消息。所以 markdown 也会被传递:
下面是一个准确的例子,摘自.body
#Title
## SubTitle
*date*
1. Item 1
2. Item 2
3. Item 3
当我使用 jq 和 -r 解析 JSON 的原始内容时:
echo "PR_BODY=$(jq -r '.body' $HOME/pr.json)" >> $GITHUB_ENV
我从 GitHub 操作中收到错误:
作为参考,我的计划是将.body
数据保存到一个 markdown 文件中,如下所示:
run: |
ed changelog.md <<'END_ED'
1i
${{ env.PR_BODY }}
.
wq
END_ED
echo >> changelog.md
我怎样才能在.body
没有空格的情况下提取数据而引发错误?也许 ENV 变量不是解决这个问题的方法?
编辑:这是 .body 中的原始原始 JSON:
"body": "Manually configuring ports for DEV, CAT/QA environments. Migrating from managed service to self-serve \"GCP resource\". \r\n\r\n- [x] DEV\r\n- [x] CAT/QA\r\n- [ ] PROD\r\n\r\n```\r\n# Allow healthcheck on ports 80, 443\r\nresource \"google_compute_firewall\" \"allow-healthcheck\" {\r\n name = \"${format(\"%s\",\"${var.gcp_resource_name}-${var.gcp_env}-fw-allow-healthcheck\")}\"\r\n network = \"${google_compute_network.vpc.name}\"\r\n allow {\r\n protocol = \"tcp\"\r\n ports = [\"80\",\"443\"]\r\n }\r\n source_ranges = [\"2.2.0.0/16\", \"1.1.0.0/22\"]\r\n}\r\n```\r\nConfiguring for bug, link here:\r\n[Link To Terraform provider update](https://www.terraform.io/)"
答案1
基于“GitHub Actions 的工作流程命令”,看起来多行值的语法$GITHUB_ENV
类似于:
PR_BODY<<EOF
multiline string
here
...
EOF
使用来自命令替换的值,您可以使用以下命令从 shell 生成该值:
printf "PR_BODY<<EOF\n%s\nEOF\n" "$(jq -r '.body' $HOME/pr.json)"
(您很可能想使用printf
而不是echo
there,因为它使得在插入换行符时更容易不是破坏命令替换中的数据。看为什么 printf 比 echo 更好?供讨论。)