GitHub Actions在管道到文件时将额外的行terrraform



在我的GitHub Action Workflow文件中有以下代码:

- name: Save Terraform Output to JSON File
run: |
terraform output -json > output.json
- name: Upload Terraform Output JSON File as Artifact
uses: actions/upload-artifact@v3
with:
name: terraformOutput
path: output.json

然而,当我下载工件文件时,我看到一堆额外的行:

[command]/home/runner/work/_temp/59756a93-8dd6-479b-ac36-25cce5af6f4d/terraform-bin output -json
{
"hello": {
"sensitive": false,
"type": "string",
"value": "world"
}
}
::debug::Terraform exited with code 0.
::debug::stdout: {%0A  "hello": {%0A    "sensitive": false,%0A    "type": "string",%0A    "value": "world"%0A  }%0A}%0A
::set-output name=stderr::
::set-output name=exitcode::0

我期望工件文件是:

{
"hello": {
"sensitive": false,
"type": "string",
"value": "world"
}
}

为什么GitHub动作添加所有这些额外的行,以及我如何删除它们,只包括工件中的对象?

事实证明这是hashicorp/setup-terraformGitHub行动的直接结果。如它们的自述文件所述:

安装包装器脚本来包装对terraform二进制文件的后续调用,并将其STDOUT、STDERR和退出代码分别作为名为STDOUT、STDERR和exitcode的输出公开。(如果同一作业的后续步骤不需要访问Terraform命令的结果,则可以选择跳过此操作。)

将我的代码更改为以下工作:

- name: Terraform Output
id: terraformOutputJSON
run: terraform output -json
- name: Save Terraform Output to JSON File
uses: fishcharlie/CmdToFile@v1.0.0
with:
data: ${{ steps.terraformOutputJSON.outputs.stdout }}
output: output.json

基本上我只是在一步中运行terraform output -json命令,然后在下一步中,我访问hashicorp/setup-terraform自动提供的输出,然后将其传递到我创建的快速操作中,并将其写入文件。

遗憾的是,我无法弄清楚如何将结果回显到文件中,因为JSON格式在尝试这样做时总是弄乱。

另一种不使用输出的简单方法是传递terraform_wrapper: false,如以下答案所述:

  • https://stackoverflow.com/a/76777272/15041111

希望这对你有帮助。

最新更新