0Pricing
CI/CD with GitHub Actions & DevOps Pipelines · 课时

自动化基础设施更新

实现工作流,在审查和批准步骤的配合下安全地规划、应用和销毁基础设施变更

自动化基础设施更新 是 CoddyKit 上的免费 CI/CD with GitHub Actions & DevOps Pipelines 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 CI/CD with GitHub Actions & DevOps Pipelines 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 CI/CD with GitHub Actions & DevOps Pipelines 课程共包含 4 节课。

为什么要自动化基础设施即代码更新

手动管理基础设施可能速度缓慢且容易出错。基础设施即代码(IaC)通过使用代码定义基础设施来解决这一问题。

借助 GitHub Actions 等工具自动化基础设施即代码更新,可以提高一致性和速度,并减少人为错误。这样可以确保基础设施始终与其定义保持一致。

基础设施即代码工作流生命周期

基础设施即代码自动化遵循清晰的生命周期:计划、应用,有时还包括销毁。每个步骤都可以集成到您的持续集成/持续交付流水线中。

  • 计划:查看拟议的更改,但不实际执行。
  • 应用:将计划的更改实施到您的基础设施中。
  • 销毁:移除基础设施资源(请务必极其谨慎地使用!)。

GitHub Actions 可以帮助您安全地管理这些步骤。

使用 Terraform 规划更改

在进行任何更改之前,了解将会发生什么至关重要。Terraform 的 plan 命令可以帮助您预览基础设施修改。

它会将您期望的状态(来自代码)与基础设施的当前状态进行比较,并显示将添加、更改或销毁哪些资源。

请尝试在一个简单的 Terraform 项目中运行以下命令:

echo "Initializing Terraform..."
terraform init

echo "Running terraform plan..."
terraform plan

`terraform plan` 工作流

让我们创建一个 GitHub Actions 工作流,使其在代码推送到主分支时自动运行 terraform plan。这样您可以立即了解拟议更改的结果。

随后可以直接在拉取请求或工作流日志中查看计划命令的输出。

name: 'Terraform Plan'

on:
  pull_request:
    branches:
      - main

jobs:
  terraform:
    name: 'Terraform Plan'
    runs-on: ubuntu-latest

    steps:
    - name: Checkout repository
      uses: actions/checkout@v4

    - name: Setup Terraform
      uses: hashicorp/setup-terraform@v3

    - name: Terraform Init
      id: init
      run: terraform init

    - name: Terraform Plan
      id: plan
      run: terraform plan -no-color

使用环境进行手动批准

自动应用基础设施更改可能存在风险。GitHub 环境提供了一种在工作流中添加手动批准步骤的方式。

您可以定义环境(例如“预发布”和“生产”),并设置相关规则,例如要求特定审核者批准,或在部署作业继续之前等待一段时间。

这会在敏感操作之前增加一道关键的人工审核关卡。

应用更改的工作流

为了安全地应用更改,我们将配置一个面向受保护 GitHub 环境的工作流。作业会暂停,并等待指定团队成员的批准。

只有获得批准后,terraform apply 命令才会执行并更新您的基础设施。

name: 'Terraform Apply'

on:
  workflow_dispatch:
    inputs:
      environment:
        description: 'Environment to deploy to'
        required: true
        default: 'staging'

jobs:
  terraform:
    name: 'Terraform Apply'
    runs-on: ubuntu-latest
    environment: ${{ github.event.inputs.environment }} # Target environment for approval

    steps:
    - name: Checkout repository
      uses: actions/checkout@v4

    - name: Setup Terraform
      uses: hashicorp/setup-terraform@v3

    - name: Terraform Init
      id: init
      run: terraform init

    - name: Terraform Apply
      id: apply
      run: terraform apply -auto-approve

安全地销毁基础设施

terraform destroy 命令会永久移除 Terraform 配置中定义的所有资源。这是一项功能强大且可能十分危险的操作。

它只能用于特定且受控的场景,例如拆除临时测试环境。继续操作前请务必反复确认!

如果没有严格的人工关卡和多重确认,绝不要自动执行 `destroy`。

echo "Preparing to destroy infrastructure..."
terraform init
terraform plan -destroy
read -p "Are you absolutely sure you want to destroy ALL resources? (yes/no): " CONFIRM
if [ "$CONFIRM" = "yes" ]; then
  echo "Destroying infrastructure..."
  terraform destroy -auto-approve
else
  echo "Destroy operation cancelled."
fi

受控的基础设施销毁

即使对于 `destroy`,我们也可以利用 GitHub 环境来增加一层保护。这样可以确保任何人都无法在没有适当授权的情况下,意外或恶意地销毁生产资源。

工作流应要求获得批准,并且只能手动触发,最好限制由特定角色执行。

name: 'Terraform Destroy'

on:
  workflow_dispatch:
    inputs:
      environment:
        description: 'Environment to destroy'
        required: true
        default: 'staging'

jobs:
  terraform:
    name: 'Terraform Destroy'
    runs-on: ubuntu-latest
    environment: ${{ github.event.inputs.environment }} # Target environment for approval

    steps:
    - name: Checkout repository
      uses: actions/checkout@v4

    - name: Setup Terraform
      uses: hashicorp/setup-terraform@v3

    - name: Terraform Init
      id: init
      run: terraform init

    - name: Terraform Destroy
      id: destroy
      run: terraform destroy -auto-approve

基础设施即代码自动化最佳实践

为了维护可靠且安全的基础设施即代码流水线:

  • 代码审核:始终要求对基础设施即代码更改进行代码审核。
  • 最小权限:仅向工作流令牌和服务账户授予完成任务所必需的最低权限。
  • 状态锁定:确保您的基础设施即代码工具(如 Terraform)使用状态锁定,以防止并发修改。
  • 小步、渐进式更改:避免大规模、单体式的基础设施更新。
  • 分离环境:使用彼此独立的环境(开发、预发布、生产),并为其设置不同的审批规则。

基础设施即代码工作流检查

您已经了解了如何通过规划、应用和销毁资源来自动化基础设施即代码更新。现在,让我们测试一下您对如何保护这些流程的理解。

回顾:自动化基础设施即代码更新

在本课中,您学习了如何使用 GitHub Actions 自动化基础设施即代码工作流。我们涵盖了以下内容:

  • 运行 terraform plan,安全地预览更改。
  • 在应用或销毁基础设施之前,使用 GitHub 环境设置手动审批关卡。
  • 实施用于受控执行 terraform apply 和 terraform destroy 操作的工作流。
  • 安全、可靠的基础设施即代码自动化最佳实践。

自动化基础设施即代码可以帮助您高效且放心地管理云资源!

常见问题解答

「自动化基础设施更新」课时是免费的吗?

是的 — 「自动化基础设施更新」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 CI/CD with GitHub Actions & DevOps Pipelines 课程的其余内容,请升级到 CoddyKit PRO。 CI/CD with GitHub Actions & DevOps Pipelines 课程共包含 4 节课。

「自动化基础设施更新」这节课中我会学到什么?

实现工作流,在审查和批准步骤的配合下安全地规划、应用和销毁基础设施变更 你通过在浏览器中直接运行的动手代码来练习 CI/CD with GitHub Actions & DevOps Pipelines,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 CI/CD with GitHub Actions & DevOps Pipelines 需要有经验吗?

无需任何先前经验。CoddyKit 上的 CI/CD with GitHub Actions & DevOps Pipelines 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「自动化基础设施更新」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 CI/CD with GitHub Actions & DevOps Pipelines 课中编写并运行代码吗?

能。每节 CI/CD with GitHub Actions & DevOps Pipelines 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 Terraform 和 GitHub Actions 实现 IaC
  2. 管理云资源
  3. 自动化基础设施更新
  4. 管理 Terraform 状态与远程后端
← 返回 CI/CD with GitHub Actions & DevOps Pipelines