我们使用monorepo方法将源存储在github中。
目前是否可以在提交特定子文件夹时触发CodePipeline。
这是TeamCity目前可以通过在源存储库上设置过滤器来实现的,但我没有看到CodePipeline的这个例子。
答案 0 :(得分:1)
我们正致力于解决这个问题。简而言之:稍作处理就可以实现。您可以将GitHub Webhook设置为单个AWS CodeBuild项目的源。该项目允许您为推送到该Webhook的事件配置过滤器(文件路径)。此外,您添加了一个S3存储桶,并将过滤事件引用的代码推送到该存储桶。可以将存储桶作为您的CodePipeline的源阶段。
我们已经在博客文章https://blog.codecentric.de/en/2019/05/codebuild-trigger-pipeline/
中记录了我们的解决方案答案 1 :(得分:1)
我们写了一篇有关部署GitHub MonoRepo using CodeBuild的变通方法的文章,其中包括an example repository。
答案 2 :(得分:1)
通常CodePipeline监视git repo,然后下载源并触发CodeBuild。
我通过让CodeBuild监视git存储库来解决此问题,因为这使您可以将更改限制在存储库中的子目录中。构建完成后,会将工件上传到S3,然后您就可以在S3工件上传上让CodePipeline触发并继续该过程。
这有点杂乱无章,但如果要在管道中提供的第一步是单个CodeBuild,则应该很容易做到。
答案 3 :(得分:0)
看起来你回答了自己的问题;)。答案还没有,但作为一种解决方法,您可以解析已更改文件的列表,并从中导出已更改的子文件夹列表:https://forums.aws.amazon.com/thread.jspa?messageID=811027󆀓/。
答案 4 :(得分:0)
我尝试按照其他答案中的建议使用 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"
});
此设置的一些好处: