对存储库中的特定目录进行更改时触发特定的 AWS Codepipeline 源阶段

问题描述 投票:0回答:5

我在一个 GitHub 存储库中拥有许多服务,每个服务在 AWS 上都有自己的 CodePipeline,通过 Terraform 进行管理。我不想在提交时触发所有管道,而是想知道如果每个服务的目录在提交时有任何更改,如何触发每个服务的管道,而不必将每个服务拆分到自己的存储库中。

amazon-web-services github terraform aws-codepipeline
5个回答
3
投票

我认为,正如我们所说,代码管道中的每个文件夹都没有条件源阶段支持。刚刚检查完 CodePipeline 中有关 sources 的文档。它似乎不包含文件夹级别的过滤。

您可以尝试这个基于 CDK 的模板解决方案,它展示了一个由多个服务组成的单一存储库,每个服务都有不同的 CI/CD 管道。该解决方案会检测发生修改的顶级目录并触发配置到该目录的 AWS CodePipeline。

这很悲伤,但他们将来可能会添加它。我还想要质量门、代码提交中自述文件中的图像,但这些功能似乎很难实现哈哈。


1
投票

最终比我预想的要简单,github 上的操作完全可以满足我的需求。

此操作检查路径是否发生更改,并且此操作触发特定管道。


1
投票

使用以下 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 代码管道。

我花了两个多小时才弄清楚这一点。

希望这对您有所帮助并为您节省一些时间。


0
投票

此方法将有助于 AWS CodeCommit 中基于 monorepo 的应用程序。通过这种方法,基于 monorepo 的应用程序中的每个应用程序/微服务都可以拥有专用的 CI/CD 管道,它将检测相关应用程序目录中的更改!

https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate- different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html

AWS 示例代码 - https://github.com/aws-samples/monorepo-multi-pipeline-trigger


0
投票

在 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
              },
            ],
          },
        },
      ],
    });
© www.soinside.com 2019 - 2024. All rights reserved.