【AWS】CodeBuildに flake8 を組み込む

■ はじめに

https://dk521123.hatenablog.com/entry/2020/02/07/000000

の続き、

今回は、AWS CodeBuild で flake8 を組み込む。

■ 注意点

flake8 は、規約違反があった場合に、Exit code = 1 を返す。

 AWS CodeBuildに組み込んだ場合、
一件でも規約違反があった場合に、
異常が発生したとみなし、処理が中断する。

CodeBuildに flake8 を組み込む場合のケース

Case1:規約違反したコードは、デプロイしない
 => 仮にあった場合は、デプロイしない

Case2:規約違反に関わらず、デプロイする
 => コードチェックは、あくまでオプションとして実行する

■ Case1:規約違反したコードは、デプロイしない

buildspec.yml

version: 0.2

env:
  variables:
    CODE_PATH: "sources/python_codes"

phases:
  install:
    runtime-versions:
      python: 3.8
    commands:
      - apt-get update -y
      - pip install flake8
  # ビルド前イベント
  pre_build:
    commands:
      - echo "The code check starts ${CODE_PATH}"
      - flake8 --exclude tests --max-line-length=110 ${CODE_PATH}
  # ビルドイベント
  build:
    commands:
      - echo '以降、ビルド処理を書く(ここでは省略)'

■ Case2:規約違反に関わらず、デプロイする

buildspec.yml

version: 0.2

env:
  variables:
    CODE_PATH: "sources/python_codes"

phases:
  install:
    runtime-versions:
      python: 3.8
    commands:
      - apt-get update -y
      - pip install flake8
  # ビルドイベント
  build:
    commands:
      - echo '以降、ビルド処理を書く(ここでは省略)'
  # ビルド後イベント
  post_build:
    commands:
      - echo "The code check starts ${CODE_PATH}"
      - bash code_checker.sh ${CODE_PATH}

code_checker.sh

#!/bin/bash

set -e

TARGET_CODE_PATH=${1}
OUTPUT_FILE="result.txt"

# コードチェック実行(「&& :」でエラーを握りつぶす)
flake8 --exclude tests --max-line-length=110 --output-file=${OUTPUT_FILE} ${TARGET_CODE_PATH} && :
echo "Exit code : ${?}"

if [ -e ${OUTPUT_FILE} ]; then
  echo "${OUTPUT_FILE} found."
  aws s3 cp ${OUTPUT_FILE} s3://your-bucket/${OUTPUT_FILE}
else
  echo "${OUTPUT_FILE} NOT found."
fi

補足:「&& :」について

まず「&&」と「:」を解説し、
その後、併せた「&& :」を説明する

1) &&

commandA && commandB

=> commandA の終了コードが 0 のときにだけ commandB が実行される

2) :コマンド

何もせず常に 0 (成功) の終了ステータスを返すコマンド

3) 「&& :」

flake8 (略) ${TARGET_CODE_PATH} && :
echo "Exit code : ${?}"

=> flake8 がどんなExit codeを返しても
      中断されることはなく「Exit code: X」が出力される
=> 詳細は以下のサイトを参照。

https://sousaku-memo.net/php-system/1164

関連記事

CodeBuild ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/01/21/221122
CodeBuild で Python のバージョンを切り替える
https://dk521123.hatenablog.com/entry/2020/02/19/230909
flake8 ~ Pythonコードチェック ~
https://dk521123.hatenablog.com/entry/2020/02/07/000000