我在一个 GitHub 存储库中拥有许多服务,每个服务在 AWS 上都有自己的 CodePipeline,通过 Terraform 进行管理。我不想在提交时触发所有管道,而是想知道如果每个服务的目录在提交时有任何更改,如何触发每个服务的管道,而不必将每个服务拆分到自己的存储库中。
我认为,正如我们所说,代码管道中的每个文件夹都没有条件源阶段支持。刚刚检查完 CodePipeline 中有关 sources 的文档。它似乎不包含文件夹级别的过滤。
您可以尝试这个基于 CDK 的模板解决方案,它展示了一个由多个服务组成的单一存储库,每个服务都有不同的 CI/CD 管道。该解决方案会检测发生修改的顶级目录并触发配置到该目录的 AWS CodePipeline。
这很悲伤,但他们将来可能会添加它。我还想要质量门、代码提交中自述文件中的图像,但这些功能似乎很难实现哈哈。
使用以下 yaml 文件在操作下创建 GitHub 工作流程:
name: Conditional Deploy
on:
push:
branches: [ "master" ]
paths:
- 'ENTER_YOUR_DIRECTORY/**'
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Trigger AWS CodePipeline
uses: zulhfreelancer/[email protected]
with:
aws-region: ${{ secrets.AWS_REGION }}
aws-access-key: ${{ secrets.AWS_PIPELINE_ACCESS_KEY }}
aws-secret-key: ${{ secrets.AWS_PIPELINE_SECRET_KEY }}
pipeline-name: ${{ secrets.AWS_PIPELINE_NAME }}
在 Github 中创建 4 个秘密(
AWS_REGION
、AWS_PIPELINE_ACCESS_KEY
、AWS_PIPELINE_SECRET_KEY
、AWS_PIPELINE_NAME
)。您可以在here查看如何创建秘密。将 ENTER_YOUR_DIRECTORY
更改为您的目录名称。目录发生更改时,它将触发 aws 代码管道。
我花了两个多小时才弄清楚这一点。
希望这对您有所帮助并为您节省一些时间。
此方法将有助于 AWS CodeCommit 中基于 monorepo 的应用程序。通过这种方法,基于 monorepo 的应用程序中的每个应用程序/微服务都可以拥有专用的 CI/CD 管道,它将检测相关应用程序目录中的更改!
AWS 示例代码 - https://github.com/aws-samples/monorepo-multi-pipeline-trigger
在 CDK 中,您现在应该能够执行此操作。看起来这仅支持代码星形连接,但无论如何这是新的首选连接方式。
new codepipeline.Pipeline(this, "pipeline", {
triggers: [
{
providerType: codepipeline.ProviderType.CODE_STAR_SOURCE_CONNECTION,
gitConfiguration: {
sourceAction,
pullRequestFilter: [
{
events: [codepipeline.GitPullRequestEvent.CLOSED],
filePathsExcludes: ["..."], # paths you want to exclude
filesPathsIncludes: ["..."], # paths you want to include
},
],
},
},
],
});