terraform - 带有 Terragrunt/Terraform 单一存储库的 CI/CD
问题描述
我在一个单一存储库中使用 Terragrunt,如下所示,用于多个项目和环境:
projects/
├─ terragrunt.hcl
├─ teamA/
│ ├─ dev/
│ │ ├─ some-service/
│ │ │ ├─ terragrunt.hcl
│ ├─ prod/
│ │ ├─ some-service/
│ │ │ ├─ terragrunt.hcl
├─ teamB/
│ ├─ dev/
│ │ ├─ another-service/
│ │ │ ├─ terragrunt.hcl
│ ├─ prod/
│ │ ├─ another-service/
│ │ │ ├─ terragrunt.hcl
我已经读过,在使用 Terragrunt 时,最佳做法是在需要部署的模块上运行plan
/命令,而不是在所有模块上递归运行应用程序,这些模块有时会破坏事情(?)。apply
run-all apply
我还被告知,如果我们
apply
遍历所有内容,有一些资源会被重建,并且可能会清除团队所做的任何手动更改。有点咸菜。
但是,我不熟悉如何在 CI/CD 管道方面进行此操作,并且仅在更新的模块上执行命令。
我还假设依赖关系需要在.hcl
每个项目模块的文件中非常明确地说明,以免尝试部署需要其他东西已经存在的东西。
流动
- 工程师克隆代码
- 工程师创建并签出新分支,例如。
fix/thing
- 工程师更新
projects/teamB/dev/another-service/terragrunt.hcl
- 工程师提交代码并与分支一起推送回远程
- 工程师打开拉取请求
- 这触发
terragrunt plan
了projects/teamB/dev/another-service/terragrunt.hcl
一些如何
- 这触发
- 工程师提交另一个更改
projects/teamA/prod/some-service/terragrunt.hcl
plan
这仅在受影响的模块上 重新触发projects/teamB/dev/another-service/terragrunt.hcl
projects/teamA/prod/some-service/terragrunt.hcl
- PR 获批并合并
apply
这仅在受影响的模块上 触发:projects/teamB/dev/another-service/terragrunt.hcl
projects/teamA/prod/some-service/terragrunt.hcl
我看到的一些答案涉及向 CI/CD 工具解析的提交或 PR 添加指令。另一个提到运行git diff
和解析已更改的文件夹/文件。
有没有人用 terragrunt 甚至 terraform 部署过类似的东西?
解决方案
推荐阅读
- c# - 按值与引用的 PowerShell 函数变量
- javascript - cefsharp 无法通过 javascript 播放音频
- reactjs - “react”中的 ReactFragment 是什么意思?
- oracle - 有没有办法找到在 Oracle 12c 中为其创建同义词的对象的基本类型?
- c# - Unity GoogleVR DLLNotFoundException 'gvr'
- java - com.google.api.client.auth.oauth2.TokenResponseException: 400 错误请求 (Eclipse)
- reactjs - 为什么反应开发服务器自动使用https?
- java - JAX-RS 什么时候从 microprofile-config.properties 收到有关密钥存储地址的信息?
- node.js - 在 mongoose-aggregate-paginate-v2 中排序
- java - 我想在 RequestBodyAdvice 中使用多个类请求