version: 0.2 # made this work for the time being. phases: pre_build: on-failure: ABORT commands: ##### 環境変数の定義 ################################### # SERVICE_NAME, APP_ENV はcodeBuildの環境変数を設定している。 # envディレクティブで設定していないのはスクリプトで定義している部分があるため。 # AWSのアカウントIDを$CODEBUILD_BUILD_ARNから取得 # - OLDIFS=$IFS && IFS=':' && set -- ${CODEBUILD_BUILD_ARN} && AWS_ACCOUNT_ID=$5 && IFS=$OLDIFS - AWS_ACCOUNT_ID=$(echo ${CODEBUILD_BUILD_ARN} | cut -f 5 -d :) - ROOT_DIR=`pwd` - CLUSTER_NAME=${APP_NAME}-${APP_ENV} - REPOSITORY_URI=${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${CLUSTER_NAME}/${SERVICE_NAME} # gitのコミットID - COMMIT_HASH=`echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-9` - IMAGE_TAG=${COMMIT_HASH:=latest} - PROJECT_DIR=${ROOT_DIR} - CACHE_DIR=${ROOT_DIR}/cache - ARTIFACTS_DIR=${ROOT_DIR}/artifacts - IMGDEF_JSON_FILE=${ARTIFACTS_DIR}/imagedefinitions.json # 環境変数初期値表示 - | echo ">>> ENVs ->" echo ">>> AWS_ACCOUNT_ID: ${AWS_ACCOUNT_ID}" echo ">>> ROOT_DIR: ${ROOT_DIR}" echo ">>> REPOSITORY_URI: ${REPOSITORY_URI}" echo ">>> COMMIT_HASH: ${COMMIT_HASH}" echo ">>> IMAGE_TAG: ${IMAGE_TAG}" echo ">>> PROJECT_DIR: ${PROJECT_DIR}" echo ">>> CACHE_DIR: ${CACHE_DIR}" echo ">>> ARTIFACTS_DIR: ${ARTIFACTS_DIR}" echo ">>> IMGDEF_JSON_FILE: ${IMGDEF_JSON_FILE}" # ECRのリポジトリにログイン - aws ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin ${REPOSITORY_URI} - mkdir ${ARTIFACTS_DIR} build: on-failure: ABORT commands: - cd nginx - docker build --target ecs -t "${REPOSITORY_URI}/nginx:${IMAGE_TAG}" ./ - docker tag ${REPOSITORY_URI}/nginx:${IMAGE_TAG} ${REPOSITORY_URI}/nginx:latest - cd ../api - docker build --target ecs -t "${REPOSITORY_URI}/api:${IMAGE_TAG}" ./ - docker tag ${REPOSITORY_URI}/api:${IMAGE_TAG} ${REPOSITORY_URI}/api:latest - codebuild-breakpoint # composer install - docker run --rm -v $(pwd)/src:/var/www ${REPOSITORY_URI}/api:${IMAGE_TAG} composer install --no-dev --optimize-autoloader - docker build --target src -t "${REPOSITORY_URI}/src:${IMAGE_TAG}" ./ - docker tag ${REPOSITORY_URI}/src:${IMAGE_TAG} ${REPOSITORY_URI}/src:latest post_build: on-failure: ABORT commands: - docker images - docker push ${REPOSITORY_URI}/nginx:latest - docker push ${REPOSITORY_URI}/nginx:${IMAGE_TAG} - docker push ${REPOSITORY_URI}/api:latest - docker push ${REPOSITORY_URI}/api:${IMAGE_TAG} - docker push ${REPOSITORY_URI}/src:latest - docker push ${REPOSITORY_URI}/src:${IMAGE_TAG} - IMGDEF_JSON=$(printf '{"name":"%s", "imageUri":"%s"},' 'nginx' "${REPOSITORY_URI}/nginx:${IMAGE_TAG}") - IMGDEF_JSON="${IMGDEF_JSON}"$(printf '{"name":"%s", "imageUri":"%s"},' 'api' "${REPOSITORY_URI}/api:${IMAGE_TAG}") - IMGDEF_JSON="${IMGDEF_JSON}"$(printf '{"name":"%s", "imageUri":"%s"},' 'src' "${REPOSITORY_URI}/src:${IMAGE_TAG}") # ##### imagedefinitions.jsonの書き込み ################################### - IMGDEF_JSON="["${IMGDEF_JSON:0:${#IMGDEF_JSON}-1}"]" - echo ${IMGDEF_JSON} - echo ${IMGDEF_JSON} > ${IMGDEF_JSON_FILE} artifacts: files: - '**/*' discard-paths: no base-directory: artifacts cache: paths: - './cache/**/*'