我们使用 monorepo 方法将源代码存储在 github 中。
目前是否可以仅在提交到特定子文件夹时触发 CodePipeline。
TeamCity 目前可以通过在 Source Repository 上设置过滤器来实现这一点,但我没有看到 CodePipeline 的示例。
我们使用 monorepo 方法将源代码存储在 github 中。
目前是否可以仅在提交到特定子文件夹时触发 CodePipeline。
TeamCity 目前可以通过在 Source Repository 上设置过滤器来实现这一点,但我没有看到 CodePipeline 的示例。
我们正是在这个问题上工作。简而言之:可以通过一些工作来解决。您可以将 GitHub Webhook 设置为单个 AWS CodeBuild 项目的源。该项目允许您为推送到该 Webhook 的事件配置过滤器(文件路径)。此外,您添加一个 S3 存储桶并将过滤事件引用的代码推送到该存储桶。存储桶可以作为 CodePipeline 的源阶段包含在内。
我们在博客文章中记录了我们的解决方案:https ://blog.codecentric.de/en/2019/05/codebuild-trigger-pipeline/
我们写了一篇关于使用 CodeBuild 部署 GitHub MonoRepo的解决方法的文章,并包含了一个示例存储库。
看起来你回答了你自己的问题;)。答案还没有,但作为一种解决方法,您可以解析更改的文件列表并从中派生更改的子文件夹列表:https ://forums.aws.amazon.com/thread.jspa?messageID=811027怓 /。
我尝试按照其他答案中的建议使用 CodeBuild,但它的设置比我预期的要复杂。
我最终得到了一个使用 GitHub Actions 和每个堆栈的源分支的解决方案。
pipelines/api
pipelines/data
这些操作仅在主推送时触发,并根据更改的文件进行过滤。
如果 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
// 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"
});
此设置的一些好处:
通常 CodePipeline 会监控 git repo,然后下载源代码并触发 CodeBuild。
我通过让 CodeBuild 监视 git 存储库来解决此问题,因为这允许您将更改限制在存储库中的子目录中。构建完成后,它将工件上传到 S3,然后您可以在 S3 工件上传时触发 CodePipeline 并继续该过程。
这有点不整洁,但提供管道中的第一步是单个 CodeBuild,那么它应该很容易做到。