内容
使い方
- CodeBuild の
buildspec
にsteps
を追加する。
利用できる Actions
- GitHub Marketplace の Actions が利用可能。
ソースプロバイダ
- GitHub に接続する必要がある。
- GitHub 以外のソースプロバイダーを使用することも可能だが、GitHub Actions を使用するには、GitHub に接続する必要がある。
費用
- 追加費用なしでサポート
リージョン
- CodeBuild が使用可能なリージョンで利用可能。
制限事項
やってみる
ドキュメントにサンプルがありましたので、試してみました。
1. GitHub に接続する
GitHub に接続する必要があるとのことですので、上記の「ソースプロバイダ」の項目にあるドキュメントを参考に接続します。
2. ソースプロバイダを指定する
GitHub 以外のソースプロバイダも利用することが可能とのことですので、CodeCommit を指定してみました。
3. 制限事項
上記の「制限事項」にも書かれていますが、ビルドプロジェクトで特権モードを有効にして、デフォルトの Docker ユーザー (root) で実行する必要があります。
特権モードを有効を有効にしていない場合は、次のドキュメントに記載のあるようなエラーとなり失敗となります。
Error: "Cannot connect to the Docker daemon" when running a build (ビルドの実行時に「Docker デーモンに接続できません」)
4. buildspec.yaml を作成する
上記の「使い方」を参考に steps
を追加します。
GitHub Action を既に利用している方はご存じかと思いますが、基本的には同じ感じの記載です。
version: 0.2
phases:
build:
steps:
- name: Super-Linter
uses: super-linter/super-linter@v5.3.0
env:
VALIDATE_ALL_CODEBASE: true
ここでは、super-linter を利用しています。
Super-Linter アクションは、その名の通り Linter です。
また、env で 明示的に VALIDATE_ALL_CODEBASE を明示的 true にしています。(デフォルト値ですが。。。)
このあたりの、変数は公開されている内容を確認します。
VALIDATE_ALL_CODEBASE はリポジトリ全体を解析し、すべてのタイプで検証するすべてのファイルを検索します。false に設定すると、新しいファイルまたは編集されたファイルのみが検証のために解析されます。
5. 実行する
今回は特に CodePipeline は利用していないので、CodeBuild から手動で実行します。
まず、以下のファイルはわざと失敗させるように作成しています。
import boto3
def lambda_handler(event, context):
greeting = hello
print(greeting)
ログが長いので省きますが、Python3 では、 pylint / flake8 / black / isort が実行されいずれも ERROR になっていることがわかります。
[Container] 2023/09/16 09:30:37 2023-09-16 09:30:37 [ERROR] ERRORS FOUND in PYTHON_BLACK:[1]
[Container] 2023/09/16 09:30:37 2023-09-16 09:30:37 [ERROR] ERRORS FOUND in PYTHON_PYLINT:[1]
[Container] 2023/09/16 09:30:37 2023-09-16 09:30:37 [ERROR] ERRORS FOUND in PYTHON_FLAKE8:[1]
[Container] 2023/09/16 09:30:37 2023-09-16 09:30:37 [ERROR] ERRORS FOUND in PYTHON_ISORT:[1]
[Container] 2023/09/16 09:30:37 2023-09-16 09:30:37 [FATAL] Exiting with errors found!
[Container] 2023/09/16 09:30:37 Command failed with exit status 2
[Container] 2023/09/16 09:30:37 Phase complete: BUILD State: FAILED
[Container] 2023/09/16 09:30:37 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: - name: Super-Linter
uses: super-linter/super-linter@v5.3.0
env:
VALIDATE_ALL_CODEBASE: "true"
. Reason: exit status 2
コードを修正して再度、CodeBuild から手動で実行します。
def lambda_handler(event, context):
greeting = "hello"
print(greeting)
修正後は、すべてのファイルが正常に Linte され、ERROR は消えたことが確認できました。
[Container] 2023/09/16 09:44:35 2023-09-16 09:44:35 [INFO] ----------------------------------------------
[Container] 2023/09/16 09:44:35 2023-09-16 09:44:35 [INFO] ----------------------------------------------
[Container] 2023/09/16 09:44:35 2023-09-16 09:44:35 [INFO] The script has completed
[Container] 2023/09/16 09:44:35 2023-09-16 09:44:35 [INFO] ----------------------------------------------
[Container] 2023/09/16 09:44:35 2023-09-16 09:44:35 [INFO] ----------------------------------------------
[Container] 2023/09/16 09:44:35 2023-09-16 09:44:35 [NOTICE] All file(s) linted successfully with no errors detected
[Container] 2023/09/16 09:44:35 2023-09-16 09:44:35 [INFO] ----------------------------------------------