GitHub Actions と Amazon CodeGuru を連携させてみる
はじめに
この前の記事で CodeGuru のワークショップをやってみたので実際のプロジェクトに導入するべく GitHub Actions との連携を試してみたいと思います。Java コードのレビューを行ってもらいたいだけなので CodeGuru Reviewer との連携を目指してみます。
実験用のリポジトリを用意する
AWS がサンプルで用意しているデモコードをお借りして試してみたいと思います。
以下のような構成です。あとでymlの中身を書きます。
.
├── .github
│ └── workflows
│ └── codeguru-reviewer.yml
└── target
└── EventHandler.java
分析用に S3 バケットを作成する
ソースコードをアップして分析するようにバケットを作ります。
こんな感じで作ります。
バケット名の最初は codeguru-reviewer-
で始まる必要があるので注意!
IAM のクレデンシャルを用意する
今回は OIDC で認証します。
ちょっと権限の振り方が大雑把ですが、検証なのでこんな感じのロールを用意します。
信頼ポリシーはこんな感じです。
ワークフローを作成する
次のページなどを参考にしながら作成しました。
name: codeguru review test
on:
workflow_dispatch:
jobs:
review:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
security-events: write
steps:
- name: Checkout repository
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-region: 'ap-northeast-1'
role-to-assume: '作成したロールの arn を指定する'
- name: AWS CodeGuru Reviewer Scanner
uses: aws-actions/codeguru-reviewer@v1.1
if: ${{ always() }}
with:
build_path: target
s3_bucket: 作成したバケット名を指定する
- name: Upload review result
if: ${{ github.event_name != 'push' }}
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: codeguru-results.sarif.json
はまったところ
codeql-action のバージョンが deprecated になってた
v2を指定しました。
ワークフローの permissions
ワークフローの permissions
で security-events: write
が必要でした。
permissions の理解がイマイチだったので次のページを確認しました。
security-events: write はアクションによるコード スキャン アラートの状態の更新を許可します。
リポジトリの公開設定
リポジトリを private にして試していたところ、 GitHub の CodeScanning 機能は プライベートリポジトリの場合、GitHub の Enterprise の契約が必要らしいです・・・。
個人のリポジトリで試していたのでしょうがなくパブリックに変更しました。
実行
手動で実行します。
結構時間がかかります。
CI ワークフローとの連携
実行が成功するとコンソールで連携が確認できました。
Security のタブで結果を確認
結果を確認できます!
なかみはこんな感じ。
まとめ
少し手間取りましたが、GitHub Actions と CodeGuru Reviewer の連携ができました!
分析に時間がかかるので常にパイプラインに組み込むのはどうかな〜というかんじです。
それでもレビューでの指摘は嬉しいのでどうにか活用方法を考えていきたいです。
参考
Discussion