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

如何在GitHub工作流运行器中向Node.js子进程标准输入写入有效内容?

在GitHub工作流中实现Terraform手动审批的正确方案

你的脚本在GitHub工作流中失效的核心原因是:GitHub Actions的运行环境属于非交互式无头环境,Terraform在这种环境下不会像本地终端那样等待标准输入的内容,直接通过stdin.write写入的内容无法被正确接收。

而针对你“实现手动审批Terraform栈变更”的需求,无需通过脚本模拟输入,GitHub Actions本身提供了官方的手动审批机制,具体实现步骤如下:

1. 配置GitHub环境审批规则

  • 进入仓库的 Settings > Environments 页面,点击 New environment 创建一个新环境(例如命名为production)。
  • 在环境设置中,勾选 Required reviewers,添加需要参与审批的用户或团队,保存设置。

2. 修改工作流文件,关联审批环境

将Terraform的apply步骤放到关联了审批环境的Job中,示例工作流文件(.github/workflows/terraform-deploy.yml):

jobs:
  terraform-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: 检出代码
        uses: actions/checkout@v4

      - name: 初始化Terraform
        uses: hashicorp/setup-terraform@v3
        with:
          terraform_version: 1.5.0 # 指定你的Terraform版本

      - name: Terraform Init
        run: terraform init -input=false

      - name: Terraform Plan
        run: terraform plan -out=tfplan -input=false
        # 生成plan文件,提前确认变更内容,避免apply时再次交互

  terraform-apply:
    needs: terraform-deploy
    runs-on: ubuntu-latest
    environment: production # 关联需要审批的环境
    steps:
      - name: 检出代码
        uses: actions/checkout@v4

      - name: 初始化Terraform
        uses: hashicorp/setup-terraform@v3
        with:
          terraform_version: 1.5.0

      - name: Terraform Init
        run: terraform init -input=false

      - name: Terraform Apply
        run: terraform apply tfplan
        # 应用提前生成的plan文件,无需再次输入确认

3. 工作流执行流程

  1. 当工作流触发后,terraform-deploy Job会自动执行,生成Terraform变更计划文件tfplan。
  2. 随后terraform-apply Job会进入等待状态,GitHub会向指定的审批人发送通知。
  3. 审批人在GitHub上确认变更计划无误后,点击批准,terraform-apply Job才会继续执行,完成栈的部署。

这种方式既满足了手动审批的需求,又避免了在无头环境中模拟交互式输入的问题,完全符合GitHub Actions的运行机制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 02:26:16