【问题标题】:Azure terraform pipelineAzure terraform 管道
【发布时间】:2021-10-23 19:14:39
【问题描述】:

我希望有人可以帮助我解决这个问题并了解如何实施最佳方法。

我有一个运行大量 azure 服务(sql server、数据库、网络应用等)的生产环境。

所有这些基础设施都是用 terraform 创建的。尽管它功能强大,但出于 1 个原因,我害怕在管道中使用它。

我的一些朋友,他们经常手动对基础设施进行一些更改,并且在我的 terraform 状态中没有这些更改,如果我将这个过程自动化,它可能会不优雅地破坏资源,这是我不会做的想面对。

所以我想知道是否有人可以对以下问题有所了解:

是否可以让 terraform 在每次推送到 GitHub 时自动检查基础设施状态,并在计划的输出报告任何更改时退出?

更改以明确我的示例。

假设我有一个 terraform 状态,我有 2 个 Web 应用程序,有人在该资源组上手动创建了一个 3 个 Web 应用程序,它开发了一些代码并将其推送到 GitHub。我的管道触发器,作为第一步,我有运行terraform plan 和/或terraform apply 的terraform,如果此命令报告任何更改,我希望它退出管道(失败),所以我会知道那里有新的东西,如果terraform plan 和/或terraform apply 返回there are no changes to the infra, is up to date 继续代码部署。

提前感谢您的帮助和澄清。

【问题讨论】:

    标签: azure-devops terraform


    【解决方案1】:

    是的,你可以运行

    terraform plan -detailed-exitcode
    

    如果退出代码是 != 0,您就知道发生了变化。详情请见here

    让我指出,我强烈建议您锁定您的 prod 环境,这样任何人都无法进行手动更改!您的 CI/CD 管道应该是在那里进行更改的唯一方法。

    【讨论】:

    • 感谢惊奇和解脱知道这一点。关于这个还有一个问题。如果我设置了 terraform 详细退出代码,并且有更改,它将自动退出,或者我必须为其设置任何配置以停止管道?
    • 不确定。快速尝试一下。很容易看到
    • @NaydenVan 你试过了吗?非零代码会停止管道吗?
    【解决方案2】:

    除了上述答案之外,您还可以使用 terraform import 命令将远程更改导入到您的状态文件。 terraform import 命令用于将现有资源导入 Terraform。稍后运行计划以检查更改是否同步。

    参考:https://www.terraform.io/docs/cli/commands/import.html

    【讨论】:

      猜你喜欢
      • 2021-10-25
      • 2021-07-23
      • 2021-11-30
      • 2022-01-25
      • 1970-01-01
      • 2019-08-17
      • 2022-10-25
      • 2020-04-05
      • 2023-04-03
      相关资源
      最近更新 更多