15

我们使用 monorepo 方法将源代码存储在 github 中。

目前是否可以仅在提交到特定子文件夹时触发 CodePipeline。

TeamCity 目前可以通过在 Source Repository 上设置过滤器来实现这一点,但我没有看到 CodePipeline 的示例。

4

5 回答 5

7

我们正是在这个问题上工作。简而言之:可以通过一些工作来解决。您可以将 GitHub Webhook 设置为单个 AWS CodeBuild 项目的源。该项目允许您为推送到该 Webhook 的事件配置过滤器(文件路径)。此外,您添加一个 S3 存储桶并将过滤事件引用的代码推送到该存储桶。存储桶可以作为 CodePipeline 的源阶段包含在内。

我们在博客文章中记录了我们的解决方案:https ://blog.codecentric.de/en/2019/05/codebuild-trigger-pipeline/

于 2019-05-13T04:52:52.957 回答
1

我们写了一篇关于使用 CodeBuild 部署 GitHub MonoRepo的解决方法的文章,并包含了一个示例存储库

于 2019-09-24T18:07:44.193 回答
1

看起来你回答了你自己的问题;)。答案还没有,但作为一种解决方法,您可以解析更改的文件列表并从中派生更改的子文件夹列表:https ://forums.aws.amazon.com/thread.jspa?messageID=811027怓 /

于 2017-10-25T00:09:52.527 回答
1

我尝试按照其他答案中的建议使用 CodeBuild,但它的设置比我预期的要复杂。

我最终得到了一个使用 GitHub Actions 和每个堆栈的源分支的解决方案。

1)我为每个堆栈创建了一个分支

  • pipelines/api
  • pipelines/data

2)然后我为每个堆栈创建了一个 GitHub Action

这些操作仅在主推送时触发,并根据更改的文件进行过滤。

如果 api 匹配发生变化,则合并到pipelines/api中,对于数据堆栈和pipelines/data

# .github/workflows/sync-pipelines-api-yaml

name: Sync pipelines/api
on:
  push:
    branches:
      - main
    paths:
      - "package-lock.json"
      - "lib/api/**"
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
        run: |
          git switch -c main
          git remote set-url origin "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$GITHUB_REPOSITORY"
          git push origin main:pipelines/api --force
# .github/workflows/sync-pipelines-data-yaml

name: Sync pipelines/data
on:
  push:
    branches:
      - main
    paths:
      - "package-lock.json"
      - "lib/data/**"
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
        run: |
          git switch -c main
          git remote set-url origin "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$GITHUB_REPOSITORY"
          git push origin main:pipelines/data --force

3)然后,我相应地更改了每个 CodePipeline 的源分支

// lib/api/stack.ts

const sourceAction = new actions.GitHubSourceAction({
  owner,
  repo,
  branch: "pipelines/api"
});
// lib/data/stack.ts

const sourceAction = new actions.GitHubSourceAction({
  owner,
  repo,
  branch: "pipelines/data"
});

此设置的一些好处:

  • 如果我想部署所有堆栈,我可以绕过堆栈操作直接推送到每个分支
  • 非常强大的过滤选项
  • 易于测试和更改。CodeBuild/CodePipeline 测试周期可能需要一些时间
  • 最小的 CodePipeline 更改
于 2021-01-08T00:16:07.563 回答
1

通常 CodePipeline 会监控 git repo,然后下载源代码并触发 CodeBuild。

我通过让 CodeBuild 监视 git 存储库来解决此问题,因为这允许您将更改限制在存储库中的子目录中。构建完成后,它将工件上传到 S3,然后您可以在 S3 工件上传时触发 CodePipeline 并继续该过程。

这有点不整洁,但提供管道中的第一步是单个 CodeBuild,那么它应该很容易做到。

于 2020-06-05T13:44:54.893 回答