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

如何用GitHub Actions实现Terraform部署与Porkbun域名NS更新并行?

用GitHub Actions替代Jenkins实现Terraform部署+Porkbun域名服务器更新

需求背景

之前用Jenkins配合Terraform部署基础设施,现在要迁移到GitHub Actions。原Jenkins阶段的核心逻辑是并行执行两个任务:

  1. 运行Terraform部署AWS资源(包括会生成新域名服务器的托管区)
  2. 等待3分钟后,执行Python脚本将AWS生成的域名服务器更新到Porkbun

注:Terraform部署托管区后,必须正确指向域名服务器才能完成apply操作

GitHub Actions实现方案

以下是完整的工作流配置,实现和Jenkins一致的并行逻辑,同时兼顾安全性和可维护性:

name: Terraform Deploy & NS Update

on: [push]  # 可根据需求修改触发条件,比如指定分支

jobs:
  deploy-infra:
    runs-on: ubuntu-latest
    steps:
      # 1. 准备基础环境
      - name: 检出代码
        uses: actions/checkout@v4

      - name: 配置Python环境
        uses: actions/setup-python@v5
        with:
          python-version: '3.10'  # 指定脚本兼容的Python版本

      - name: 安装依赖包
        run: |
          pip install --upgrade pip
          pip install boto3 requests  # 安装脚本所需的boto3等依赖

      # 2. 并行执行Terraform部署和NS更新任务
      - name: 并行执行核心任务
        parallel:
          - name: 部署Terraform基础设施
            run: |
              # 若Terraform代码在独立仓库,先克隆(可选)
              # git clone https://github.com/assafdori/resume-app-iac.git
              # cd resume-app-iac

              # 进入Terraform目录(根据实际路径调整)
              cd terraform
              terraform init
              terraform apply -auto-approve
            env:
              AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
              AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

          - name: 更新Porkbun域名服务器
            run: |
              # 等待Terraform生成NS记录(可优化为轮询代替固定等待)
              sleep 180
              
              # 下载更新脚本
              curl -o update-ns.py https://raw.githubusercontent.com/assafdori/resume-app-iac/main/update-ns.py
              
              # 执行脚本
              python3 update-ns.py
            env:
              AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
              AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
              PORKBUN_API_KEY: ${{ secrets.PORKBUN_API_KEY }}
              PORKBUN_SECRET_KEY: ${{ secrets.PORKBUN_SECRET_KEY }}

关键注意事项

  • 密钥管理:所有敏感信息(AWS密钥、Porkbun API密钥)必须存储在GitHub仓库的「Settings → Secrets and variables → Actions」中,避免硬编码
  • 路径调整:根据实际项目结构修改Terraform目录路径,若Terraform代码在独立仓库,需添加git clone步骤
  • 等待逻辑优化:固定等待3分钟不够灵活,可改为轮询AWS托管区状态,比如用aws route53 get-hosted-zone命令检查NS记录是否生成,再执行更新脚本,减少不必要的等待时间
  • 错误处理:可添加terraform plan步骤提前验证配置,或在terraform apply后添加状态检查,确保部署成功

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:03:23