如何在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. 工作流执行流程
- 当工作流触发后,
terraform-deployJob会自动执行,生成Terraform变更计划文件tfplan。 - 随后
terraform-applyJob会进入等待状态,GitHub会向指定的审批人发送通知。 - 审批人在GitHub上确认变更计划无误后,点击批准,
terraform-applyJob才会继续执行,完成栈的部署。
这种方式既满足了手动审批的需求,又避免了在无头环境中模拟交互式输入的问题,完全符合GitHub Actions的运行机制。
内容的提问来源于stack exchange,提问作者Rad
相关产品推荐
相关产品推荐

