■ はじめに
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