1

在我的一个项目中,我们正在使用 GitHub 流。分支模型如下:

  1. 在 Jira 上创建票证 (OSCS-103)
  2. 从 中创建一个分支master,称为OSCS-103
  3. PR 一经创建就在此分支上创建,具有可以测试它的自定义环境,UI 位于oscs-103.x.com.
  4. 关闭 PR 后,将删除环境(使用 Terraform)。
  5. 中的所有master内容都已考虑int并已准备好发布,可以通过int.x.com.
  6. 创建发布后,其中的所有内容master都会被推送到 prod 环境,x.com

目前,为每个分支创建不同环境的过程是“手动”的,我们运行以下命令:

$ terraform init
$ terraform workspace new OSCS-103
$ terraform apply -var="source_branch=OSCS-203" -var="token=$GITHUB_TOKEN"

这在 Terraform 中启动了一个新环境,我们使用它source_branch来创建管道。

一旦我们完成了这个环境,我们执行:

$ terraform init
$ terraform workspace select OSCS-103
$ terraform destroy -var="source_branch=OSCS-203" -var="token=$GITHUB_TOKEN"

但是,我想自动化这个过程,这样每当创建 PR 时,就会自动创建一个 env(最好使用 AWS CodePipeline 或 AWS CodeBuild),并且当 PR 关闭/合并时,env 会被销毁。

有没有人有他们这样做的例子?

编辑:

澄清一下,terraform上面的命令正在创建一个管道,这个管道“监听”上的变化source_branch并运行一个脚本来检查基础设施的变化(使用 terraform 并在必要时进行更改),重建和部署 UI,重建和部署API,以及运行flyway以迁移数据库更改。

4

1 回答 1

1

正如 Adil B 所建议的,首先您需要在您的存储库中创建一个 Webhook。设置好 Webhook 后,您需要创建一个 CodeBuild 项目并设置一个 Github 事件,该事件将根据您设置的过滤器触发 CodeBuild: https ://docs.aws.amazon.com/codebuild/latest /userguide/github-webhook.html

在 CodeBuild 构建规范中,您可能会使用您当前拥有的相同命令。您可以将 deploy/apply 设置为外部 var 并为两者使用相同的 CodeBuild 项目,或者使用不同的 webhook 事件使用专用的应用和销毁项目。

如果可用的过滤器不够用,您可以配置 webhook 以使用一些自定义逻辑触发 Lambda,然后启动 CodeBuild(甚至可能根据 Lambda 执行的结果更改其配置)。在这种情况下,您可能需要使用 API Gateway 或 Application Load Balancer 在 Lambda 前面,这会使整个事情变得更加复杂。

附加文件:

于 2021-02-02T10:44:09.087 回答