AWS codebuild не может выполнить фильтр file_path в групповых фильтрах для monorepo, размещенного на Github, и для каждого коммита создаются все проекты в monorepo.
У нас есть монорепо, которое выглядит так:
erp
|_ dir1
|_ dir2
|_ functions
|_ proj1
|_ proj2
Мы создали конвейер, использующий Github Webhook, созданный с помощью облачного формирования.
Следующий код показывает, как мы строим конвейер и сборку кода (для этого примера сборка и развертывание находятся в одном AWS :: CodeBuild :: Project):
Webhook:
Type: AWS::CodePipeline::Webhook
Properties:
AuthenticationConfiguration:
SecretToken:
Ref: GithubToken
Filters:
- JsonPath: "$.ref"
MatchEquals: refs/heads/{Branch}
Authentication: GITHUB_HMAC
TargetPipeline:
Ref: Pipeline
TargetAction: SourceCodeRepo
Name:
Fn::Sub: ${Stage}${AppName}PipelineWebhook
TargetPipelineVersion:
Fn::GetAtt: Pipeline.Version
RegisterWithThirdParty: 'true'
BuildAndDeploy:
Type: AWS::CodeBuild::Project
Properties:
Name:
Fn::Sub: "${Stage}-${AppName}"
Artifacts:
Type: NO_ARTIFACTS
Environment:
Type: LINUX_CONTAINER
ComputeType: BUILD_GENERAL1_SMALL
Image: aws/codebuild/standard:2.0
EnvironmentVariables:
- Name: BUILD_OUTPUT_BUCKET
Value:
Fn::ImportValue:
Fn::Sub: "${Stage}BuildArtifactsBucket"
- Name: CURRENT_ENVIRONMENT
Value:
Ref: Stage
- Name: CURRENT_BUILD
Value:
Ref: AppName
Cache:
Type: S3
Location:
Fn::ImportValue:
Fn::Sub: "${Stage}BuildArtifactsBucket"
ServiceRole:
Fn::ImportValue:
Fn::Sub: ${Stage}CodeBuildServiceRole
Source:
Type: GITHUB
Location: "https://github.com/mountainequipmentcoop/erp-integration"
BuildSpec:
Fn::Sub: "${AppPath}/cicd/buildspec.yml"
Triggers:
Webhook: true
FilterGroups:
- - Type: EVENT
Pattern: PUSH
- Type: HEAD_REF
Pattern: ^refs/heads/.*
- Type: FILE_PATH
Pattern:
Fn::Sub: "${AppPath}/.*"
ExcludeMatchedPattern: false
Pipeline:
Type: AWS::CodePipeline::Pipeline
Properties:
ArtifactStore:
Location:
Fn::ImportValue:
Fn::Sub: "${Stage}BuildArtifactsBucket"
Type: S3
Name:
Fn::Sub: "${AppName}-${Stage}"
RoleArn:
Fn::ImportValue:
Fn::Sub: ${Stage}CodePipelineExecutionRole
RestartExecutionOnUpdate: true
Stages:
- Name: github-erp-integration
Actions:
- Name: SourceCodeRepo
ActionTypeId:
Category: Source
Owner: ThirdParty
Version: 1
Provider: GitHub
OutputArtifacts:
- Name: SourceCodeAsZip
Configuration:
Owner:
Ref: GithubUser
Repo:
Ref: GithubRepo
Branch:
Ref: GithubBranch
OAuthToken:
Ref: GithubToken
PollForSourceChanges: false
RunOrder: 1
- Name: build-and-deploy
Actions:
- Name: lambda-functions
ActionTypeId:
Category: Build
Owner: AWS
Provider: CodeBuild
Version: "1"
Configuration:
ProjectName:
Ref: BuildAndDeploy
InputArtifacts:
- Name: SourceCodeAsZip
OutputArtifacts:
- Name: BuildArtifactAsZipAzureFileTransferLambdas
RunOrder: 1
В следующем разделе нам нужно установить триггер для проекта:
Triggers:
Webhook: true
FilterGroups:
- - Type: EVENT
Pattern: PUSH
- Type: HEAD_REF
Pattern: ^refs/heads/.*
- Type: FILE_PATH
Pattern:
Fn::Sub: "${AppPath}/.*"
ExcludeMatchedPattern: false
И значения $ {AppPath} могут быть:
- э.и.м. / функция / proj1
- э.и.м. / функция / proj2
, который затем переводится (например, для proj1):
- Type: FILE_PATH
Pattern:
Fn::Sub: "erp/functions/proj1/.*"
Я также попробовал следующие варианты в качестве шаблона FILE_PATH:
- erp/functions/proj1/.*
- erp/functions/proj1/*.*
- erp/functions\/proj1\/.*
- erp/functions\/proj1\/*.*
- ^erp/functions/proj1/.*
- ^erp/functions/proj1/*.*
- ^erp/functions\/proj1\/.*
- ^erp/functions\/proj1\/*.*
Однако эти групповые фильтры в проекте AWS Codebuild никогда не работают на PUSH. Что происходит, когда я изменяю что-то в proj1, и proj1, и proj2 собираются Что я делаю не так и как я могу это исправить?
Обновление: я тоже пробовал через веб интерфейс, он не работает. Я все построил вручную.