如何解决带有 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,这有时会破坏事情(?)。
我还被告知,如果我们对所有内容都运行 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 的东西?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。