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

如何获取GitHub Actions中Terraform Plan步骤的stdout和stderr

解决GitHub Actions中Terraform步骤无法获取stdout/stderr的问题

问题分析

你当前的GitHub Actions Workflow里,ID为plan的步骤无法通过steps.plan.outputs.stderr或stdout获取输出,原因是GitHub Actions不会自动将步骤的标准输出/错误输出注入到步骤的outputs中,只有通过echo "key=value" >> $GITHUB_OUTPUT显式声明的内容才会出现在steps.<id>.outputs里。从你打印的steps.plan JSON结构也能看到,只有你手动设置的tfplan_identifier在outputs中。

解决方案

方法1:手动捕获并输出到GITHUB_OUTPUT

修改Terraform Plan步骤的run脚本,将Terraform命令的stdout和stderr捕获后,写入$GITHUB_OUTPUT:

- name: Terraform Plan
  id: plan
  continue-on-error: true
  run: |
    tfplan_identifier=tfplan-expected
    echo "tfplan_identifier=$tfplan_identifier" >> $GITHUB_OUTPUT
    
    # 捕获stdout和stderr到文件,再写入GITHUB_OUTPUT
    terraform plan -var-file="prod.tfvars" -input=false -no-color -out=${tfplan_identifier} > stdout.log 2> stderr.log
    echo "stdout=$(cat stdout.log)" >> $GITHUB_OUTPUT
    echo "stderr=$(cat stderr.log)" >> $GITHUB_OUTPUT
    
    terraform show -no-color tfplan-actual > plan.log

之后在后续步骤中,就能通过${{ steps.plan.outputs.stdout }}和${{ steps.plan.outputs.stderr }}获取对应输出。

如果希望同时在控制台看到输出并捕获,可以用tee命令:

terraform plan ... 2>&1 | tee combined.log
echo "combined_output=$(cat combined.log)" >> $GITHUB_OUTPUT

方法2:上传日志文件作为Artifact

如果日志内容较大,或者需要长期保留日志文件,可以使用actions/upload-artifact将日志文件上传,方便后续下载查看:

- name: Terraform Plan
  id: plan
  continue-on-error: true
  run: |
    tfplan_identifier=tfplan-expected
    echo "tfplan_identifier=$tfplan_identifier" >> $GITHUB_OUTPUT
    
    terraform plan -var-file="prod.tfvars" -input=false -no-color -out=${tfplan_identifier} > stdout.log 2> stderr.log
    terraform show -no-color tfplan-actual > plan.log

- name: Upload Terraform Plan Logs
  uses: actions/upload-artifact@v3
  with:
    name: terraform-plan-logs
    path: |
      stdout.log
      stderr.log
      plan.log

Workflow执行完成后,你可以在GitHub的Actions页面找到对应运行记录,下载名为terraform-plan-logs的Artifact查看完整日志。

补充说明

  • 你的plan步骤设置了continue-on-error: true,所以即使Terraform命令执行失败,步骤的conclusion会是success,但outcome会显示failure,这是正常行为,不影响日志捕获。
  • 如果你使用了Terraform官方的hashicorp/setup-terraform且开启了terraform_wrapper: true,工具会自动处理部分输出,但你当前设置了terraform_wrapper: false,所以需要手动处理输出捕获。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 01:57:34