Quantcast
Channel: kakakakakku blog
Viewing all articles
Browse latest Browse all 920

AWS CDK で AWS CodeBuild の GitHub Webhook を設定する

$
0
0

AWS CodeBuild で GitHub リポジトリにプッシュをしたら Webhook 経由で自動的にビルドを開始する構成を AWS CDK で実装してみた💡ちなみに AWS CDK で AWS CodeBuild の Webhook を設定するだけだと以下のように Failed to call CreateWebhookというエラーが出る場合がある🔥

Failed to call CreateWebhook, reason: Could not find access token for server type github

今回は GitHub Personal Access Tokens (PAT) を AWS Secrets Manager に設定して,AWS CDK の aws_codebuild.GitHubSourceCredentialsで認証情報を設定する👌

docs.aws.amazon.com

GitHub Personal Access Tokens (PAT)

まずは GitHub の Personal Access Tokens (PAT)を取得する.現時点だとトークンは classicFine-grained (Beta)の2種類があるけど,今回は classicを使う.Select scopesでトークンに指定するスコープでは repoadmin:repo_hookを許可しておく.スコープに関しては以下のドキュメントにも書いてあった.

docs.aws.amazon.com

AWS Secrets Manager

取得した Personal Access Tokens (PAT) を AWS CLI で AWS Secrets Manager に登録する.名前は github-patにした.

$ aws secretsmanager create-secret --name github-pat --secret-string XXXXX

👾 sandbox-cdk-codebuild-stack.ts

今回は GitHub リポジトリの masterブランチにプッシュをしたら Webhook 経由で自動的にビルドを開始するように設定した.AWS CodeBuild の buildspec は特に意味はなく echoコマンドにしてある.

import{
    RemovalPolicy,
    SecretValue,
    Stack,
    StackProps,
    aws_codebuild,
    aws_logs,
    aws_iam,}from'aws-cdk-lib'import{ Construct }from'constructs'exportclass SandboxCdkCodeBuildStack extends Stack {constructor(scope: Construct, id: string, props?: StackProps){super(scope, id, props)const role =new aws_iam.Role(this,'SandboxCdkCodeBuildRole',{
            roleName: 'sandbox-cdk-codebuild-role',
            assumedBy: new aws_iam.ServicePrincipal('codebuild.amazonaws.com')})const logGroup =new aws_logs.LogGroup(this,'SandboxCdkCodeBuildLogs',{
            logGroupName: 'sandbox-cdk-codebuild-logs',
            retention: aws_logs.RetentionDays.ONE_WEEK,
            removalPolicy: RemovalPolicy.DESTROY,})

        logGroup.grantWrite(role)new aws_codebuild.GitHubSourceCredentials(this,'SandboxCdkCodeBuildGitHubCredential',{
            accessToken: SecretValue.secretsManager('github-pat')})const source = aws_codebuild.Source.gitHub({
            owner: 'kakakakakku',
            repo: 'xxxxx',
            branchOrRef: 'master',
            webhook: true,
            webhookFilters: [
                aws_codebuild.FilterGroup
                    .inEventOf(aws_codebuild.EventAction.PUSH)
                    .andBranchIs('master')],})new aws_codebuild.Project(this,'SandboxCdkCodeBuild',{
            projectName: 'sandbox-cdk-codebuild',
            source: source,
            buildSpec: aws_codebuild.BuildSpec.fromObject({
                    version: '0.2',
                    phases: {
                        build: {
                            commands: ['echo Hello!']}}}),
            environment: {
                buildImage: aws_codebuild.LinuxBuildImage.fromCodeBuildImageId('aws/codebuild/amazonlinux2-x86_64-standard:5.0'),
                computeType: aws_codebuild.ComputeType.SMALL,},
            role: role,
            logging: {
                cloudWatch: {
                    logGroup: logGroup,}},})}}

動作確認

GitHub リポジトリに適当なコミットをプッシュすると AWS CodeBuild のビルドが自動的に開始された👌送信者は Webhook を意味する GitHub-Hookshotプレフィックスになっていた.

AWS CodeBuild ビルド履歴

ちなみに aws codebuild list-source-credentialsコマンドを使って認証情報の設定を確認できる.今回は Personal Access Tokens (PAT) を使ったため authTypePERSONAL_ACCESS_TOKENになっていた.

$ aws codebuild list-source-credentials
{"sourceCredentialsInfos": [{"arn": "arn:aws:codebuild:ap-northeast-1:000000000000:token/github",
            "serverType": "GITHUB",
            "authType": "PERSONAL_ACCESS_TOKEN"}]}

関連ドキュメント

docs.aws.amazon.com


Viewing all articles
Browse latest Browse all 920

Trending Articles