目次

AWS CodeBuildで、CI


AWS CodeBuildで、CI



CodeBuildとは

利用例


CodeBuildの流れ

  1. buildspec.ymlを作成する
  2. CodeBuildでプロジェクトを作成
  3. ビルドを実行


サポートするリポジトリ

EventBridgeもしくはサードパーティーのWebHookを利用して、ビルド開始のトリガーを設定。
EventBridgeでは、コードのコミットなどのルールかcron式でスケジュールを指定してトリガーを設定。

CodeCommit

ソースコードのコミットID、ブランチを指定。

GitHub

ソースコードのコミットID、ブランチを指定。


buildspec(buildspec.yml)

ビルドで実行する内容を定義
YAMLファイルの場合、デフォルトではソースリポジトリのルートディレクトリにbuildspec.ymlのファイル名で格納。

Sample

version: 0.2

phases:
  install: 
    commands:
      # SSH接続時のホストキーチェックを無効にする
      - sed -i 's/# StrictHostKeyChecking ask/StrictHostKeyChecking no/' /etc/ssh/ssh_config
      # EC2の秘密鍵をAWS Secrets Managerから取得し、.sshディレクトリに保存
      - aws secretsmanager get-secret-value --secret-id ec2-privatekey --query 'SecretBinary' --output text | base64 -d > ~/.ssh/id_rsa
      # 秘密鍵のパーミッションを設定
      - chmod 400 ~/.ssh/id_rsa

  pre_build: 
    commands:
      - cd ${CODEBUILD_SRC_DIR}/ansible

  build: 
    commands:
      # Ansibleプレイブックを実行
      - ansible-playbook -i inventory.ini site.yml -u ec2-user -v
version: 0.2

phases:
  install:
    runtime-version:
      docker: 20
  pre_build:
    commands:
      # # ECRリポジトリのURIを環境変数に設定
      - REPO_URI_NGINX="${AWS_ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com/${ENV}-${SERVICE}-ecr/nginx"
      - REPO_URI_PHPFPM="${AWS_ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com/${ENV}-${SERVICE}-ecr/php-fpm"

      # # タグ名にgitのコミットハッシュを利用
      - IMAGE_TAG=$(echo ${CODEBUILD_RESOLVED_SOURCE_VERSION} | cut -c 1-7)
      - TAG="${ENV}-${IMAGE_TAG}"

      # # aws cliの設定
      - aws ecr get-login-password --region ${REGION} | docker login --username AWS --password-stdin ${AWS_ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com

      
  build:
    commands:
      # # docker buildを実行
      - docker build -f ./infra/nginx/Dockerfile -t src_nginx:latest .
      - docker build -f ./infra/php/Dockerfile -t src_php:latest .

      # # doeckr imageのタグ付け
      - docker tag src_nginx:latest ${REPO_URI_NGINX}:${ENV}-${IMAGE_TAG}
      - docker tag src_php:latest ${REPO_URI_PHPFPM}:${ENV}-${IMAGE_TAG}
      - docker images
    
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker images...

      # # dockr pushを実行
      - docker push ${REPO_URI_NGINX}:${ENV}-${IMAGE_TAG}
      - docker push ${REPO_URI_PHPFPM}:${ENV}-${IMAGE_TAG}


artifacts:
  files:
    - appspec.yml
    - taskdef.json

セクション

env
env:
  variables: 
    REGION: "ap-northeast-1"
  parameter-store:
    Account_Id: "ACCOUNT_ID"
  secrets-manager:
    AWS_ACCESS_KEY_ID: "access"
    AWS_SECRET_ACCESS_KEY: "secret"


https://d1.awsstatic.com/webinars/jp/pdf/services/20201125_AWS_BlackBelt_AWS_CodeBuild.pdf

変数

CodeBuild上で定義した環境変数になります。
AWS管理コンソールの画面から定義できます。
Codebuildでは環境変数を設定することで、それら環境変数をbuildspec.yml上で使用することができます。

${AWS_ACCOUNT_ID}
${REGION}
${ENV}
${SERVICE}


ビルドプロジェクトの作成

プロジェクト名
ソース ソースプロバイダ:CodeCommit
リポジトリ:api-serverless
リファレンスタイプ:ブランチ
ブランチ :main
環境 環境イメージ :マネージド型イメージ
オペレーティングシステム :Amazon Linux 2
ランタイム :Standard
イメージ :aws/codebuild/amazonlinux2-x86_64-standard:4.0
イメージのバージョン :最新のイメージ
環境タイプ :Linux
アーティファクト タイプ:CodeCommit
バケット名:api-serverless
セマンティックバージョニングの有効化:有効
パス :指定なし
暗号化キー:デフォルト(AWS管理キー)
キャッシュタイプ:S3
キャッシュバケット:abetest-cache
ログ CloudWatch Logs


参考




AWS CodeBuildで、CI