web-dev-qa-db-ja.com

AWS CodeBuild cloudformationテンプレートでBranch Filterオプションを設定する方法は?

GithubリポジトリをCodeBuildプロジェクトのソースとして使用している場合、Branch Filterオプションを使用すると、名前が特定の正規表現に一致するブランチに対してのみビルドを実行できます。

  1. AWSマネジメントコンソール

AWSマネジメントコンソールでは、CodeBuildプロジェクトの作成または編集時にブランチフィルターを設定できます。

AWS console

  1. AWS CLI

Awscliの場合、オプション--update-webhook(文書化されている ここ

    $ aws codebuild update-webhook --project-name myproject --branch-filter ^master$
  1. CloudFormation

CodeBuild cloudformationテンプレートには、オプションTriggers > Webhook(文書化された here )が、このオプションは単純にgithub webhookを有効/無効にするためのブール値です。

Resources:
    MyCodeBuildProject:
    Type: AWS::CodeBuild::Project
    Properties:
        Name: myproject
        ...
        Triggers:
            Webhook: true

私の質問は、続いてawscliコマンドを実行したり、AWSマネジメントコンソールを使用したりすることなく、cloudformationテンプレートでブランチフィルターを直接定義する方法です。

12
dron22

トリガーとwebhookフィルターを使用した最小限の例を次に示します。フィルターグループパターンは^refs/heads/.*

AWSTemplateFormatVersion: "2010-09-09"
Description: "CodeBuild project and IAM role"
Parameters:
  Image:
    Type: String
    Description: "Name of the docker image."
    Default: "my-image"
Resources:
  CodeBuildRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          Effect: Allow
          Principal:
            Service: codebuild.amazonaws.com
          Action: sts:AssumeRole
      Policies:
        - PolicyName: "CodeBuild-Service-Policy"
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: "Allow"
                Action:
                  - "ecr:BatchCheckLayerAvailability"
                  - "ecr:CompleteLayerUpload"
                  - "ecr:DescribeImages"
                  - "ecr:GetAuthorizationToken"
                  - "ecr:InitiateLayerUpload"
                  - "ecr:ListImages"
                  - "ecr:PutImage"
                  - "ecr:UploadLayerPart"
                  - "logs:*"
                Resource: "*"
  CodeBuildProject:
    Type: AWS::CodeBuild::Project
    Properties:
      Artifacts:
        Type: NO_ARTIFACTS
      Environment:
        ComputeType: "BUILD_GENERAL1_SMALL"
        Image: "aws/codebuild/docker:18.09.0"
        Type: LINUX_CONTAINER
      ServiceRole: !GetAtt CodeBuildRole.Arn
      Source:
        Type: GITHUB
        Location: "https://github.com/ORG/REPO.git"
        BuildSpec: "codebuild/create_docker_image.yml"
      Triggers:
        Webhook: true
        FilterGroups:
          - - Type: EVENT
              Pattern: Push
            - Type: HEAD_REF
              Pattern: master

参照: https://docs.amazonaws.cn/en_us/codebuild/latest/userguide/sample-bitbucket-pull-request.html#sample-bitbucket-pull-request-filter-webhook-events-cfn

1
ivansabik

AWS CodePipelineを使用して試すことができます

        Stages:
            -
                Name: "Source"
                Actions:
                    -
                        Name: "Checkout"
                        ActionTypeId:
                            Category: "Source"
                            Owner: "ThirdParty"
                            Provider: "GitHub"
                            Version: "1"
                        Configuration:
                            Owner: !Ref "UsernameOrOrg"
                            Repo: !Ref "ProjectName"
                            Branch: "master"
                            OAuthToken: !Ref "GitHubOAuthToken"
                        OutputArtifacts:
                            -
                                Name: "checkout"
            -
                Name: "Build"
                Actions:
                    -
                        Name: "Build"
                        ActionTypeId:
                            Category: "Build"
                            Owner: "AWS"
                            Provider: "CodeBuild"
                            Version: "1"
                        Configuration:
                            ProjectName: !Ref "BuildProject"
                        InputArtifacts:
                            -
                                Name: "checkout"

次に、CodePipeline統合を使用してCodeBuildプロジェクトを定義する必要があります。

BuildProject:
    Type: "AWS::CodeBuild::Project"
    Properties:
       ... 
        Artifacts:
            Type: "CODEPIPELINE"
        Source:
            Type: "CODEPIPELINE"
1
Rafał Wrzeszcz