構成
- ほぼそのまま使える
- Githubと連携するときは、AWSアカウントをGithubで許可する必要あり
- これはAWSからGit連携のボタンを押したときに画面遷移するので1アカウントに付き1回やれば良い模様
 
- https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/codebuild_project
locals {
  TENANT_ID = "xxxxxxxx"
}
resource "aws_s3_bucket" "manual" {
  bucket = "manual"
  acl    = "private"
}
resource "aws_codebuild_project" "manual" {
  name           = "manual"
  description    = ""
  build_timeout  = "60"
  queued_timeout = "480"
  source_version = "master"
  badge_enabled = false
  service_role = aws_iam_role.codebuild.arn
  artifacts {
    encryption_disabled    = false
    location               = aws_s3_bucket.manual_front.bucket
    name                   = "manual"
    namespace_type         = "BUILD_ID"
    override_artifact_name = false
    packaging              = "NONE"
    type                   = "S3"
  }
  cache {
    modes = []
    type  = "NO_CACHE"
  }
  environment {
    compute_type                = "BUILD_GENERAL1_SMALL"
    image                       = "aws/codebuild/standard:4.0-20.09.14"
    image_pull_credentials_type = "CODEBUILD"
    privileged_mode             = false
    type                        = "LINUX_CONTAINER"
    environment_variable {
      name  = "NODE_HOST"
      type  = "PLAINTEXT"
      value = "vamdemic"
    }
    environment_variable {
      name  = "API_HTTPS"
      type  = "PLAINTEXT"
      value = "true"
    }
  }
  logs_config {
    cloudwatch_logs {
      status = "ENABLED"
    }
    s3_logs {
      encryption_disabled = false
      status              = "DISABLED"
    }
  }
  source {
    git_clone_depth     = 1
    insecure_ssl        = false
    location            = "https://github.com/vamdemic/manual.git"
    report_build_status = false
    type                = "GITHUB"
    git_submodules_config {
      fetch_submodules = false
    }
  }
  tags = {
    Environment = "AutoDeployment"
  }
}
buildspecファイル
- CodeBuildで指定したブランチのルートディレクトリにファイルを配置しておく
- または、awscli実行時に上書き指定することで読み込ませることもできる
- CodeBuildから呼び出されるビルド用コンテナの中で実行したいコマンドを列挙していく
- install
- yarn installやnpm installなどのセットアップ系を処理を書くところ
 
- build
- buildコマンドなどを書くところ
 
- pre_なんとか
- buildの前の処理を書くところ
- sedしたりファイルを配置したりなど
 
- artifacts
- ビルドされたものの管理
- この例では、カレントディレクトリのdistというディレクトリをまとめてアーティファクトとして保存するという意味
- アーティファクト用に指定したs3に保存されているので見てみる
 
 
- install
buildspec.yaml
version: 0.2
phases:
  install:
    runtime-versions:
      nodejs: 10
    commands:
      - echo Installing source NPM dependencies...
      - yarn install
  build:
    commands:
      - NODE_HOST=template yarn build
      - pwd
      - ls
artifacts:
  files:
    - '**/*'
  base-directory: 'dist'
実行
- ビルドがSUCCESSになるまで待機するシェル
- 
--environment-variables-overrideは環境変数を上書きしている
code-build-manual.sh
# !/bin/bash
# Build実行
BUILD_RESULT=$(aws codebuild start-build \
  --project-name manual \
  --environment-variables-override '[
    {
      "name": "API_HOST",
      "value": "'${1}'.vamdemic.jp",
      "type": "PLAINTEXT"
    },
    {
      "name": "ADMIN_ROOT_PATH",
      "value": "https://'${1}'.vamdemic.jp/",
      "type": "PLAINTEXT"
    }
  ]'
)
# IDを取得
EXECUTE_ID=$(echo ${BUILD_RESULT} | jq -r ".build.id")
BUILD_STATUS=$(aws codebuild batch-get-builds \
        --ids ${EXECUTE_ID} \
        | jq -r ".builds[].buildStatus"
)
# echo ${BUILD_STATUS}
while [ "${BUILD_STATUS}" != "SUCCEEDED" ]
do
  sleep 10
        BUILD_STATUS=$(aws codebuild batch-get-builds \
                --ids ${EXECUTE_ID} \
                | jq -r ".builds[].buildStatus"
        )
done
echo "$(echo ${EXECUTE_ID} | awk -F ':' '{print $2}')"