リポジトリのローカルクローンをスキャンして結果を受信するために1行コマンドを提供するCodeGuruレビューア用のシンプルなCLIラッパー。このCLIは、AWS CLIコマンドをラップして、AWS CodeGuru Reviewerと通信します。 CodeGuruレビュアーを使用すると、AWSアカウントで計量料金が発生する場合があります。詳細については、CodeGuru Reviewerの価格を参照してください。
CLIを実行するには、Git、Java(Amazon Correttoなど)、およびAWSコマンドラインインターフェイスのバージョンがインストールされている必要があります。両方のアプリケーションが実行されてマシンにインストールされていることを確認してください。
java -version
mvn --version
aws --version
git --version
また、AWSアカウントと対話するには、マシン上の作業資格情報が必要です。 AWSの資格情報のセットアップの詳細については、https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.htmlをご覧ください。
Admin資格情報を使用していつでもCLIを使用できますが、CLIを使用する特定の役割を持ちたい場合は、クレデンシャルには少なくとも次のアクセス許可が必要です。
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Action" : [
" codeguru-reviewer:ListRepositoryAssociations " ,
" codeguru-reviewer:AssociateRepository " ,
" codeguru-reviewer:DescribeRepositoryAssociation " ,
" codeguru-reviewer:CreateCodeReview " ,
" codeguru-reviewer:DescribeCodeReview " ,
" codeguru-reviewer:ListRecommendations " ,
" iam:CreateServiceLinkedRole "
],
"Resource" : " * " ,
"Effect" : " Allow "
},
{
"Action" : [
" s3:CreateBucket " ,
" s3:GetBucket* " ,
" s3:List* " ,
" s3:GetObject " ,
" s3:PutObject " ,
" s3:DeleteObject "
],
"Resource" : [
" arn:aws:s3:::codeguru-reviewer-cli-* " ,
" arn:aws:s3:::codeguru-reviewer-cli-*/* "
],
"Effect" : " Allow "
}
]
}AWS-Codeguru-Cliをリリースセクションからダウンロードできます。最新バージョンをダウンロードして、 PATHに追加します。
curl -OL https://github.com/aws/aws-codeguru-cli/releases/download/0.1.0/aws-codeguru-cli.zip
unzip aws-codeguru-cli.zip
export PATH=$PATH:./aws-codeguru-cli/bin
次に、サンプルプロジェクトをダウンロードしましょう(Mavenが必要です):
git clone https://github.com/aws-samples/amazon-codeguru-reviewer-sample-app
cd amazon-codeguru-reviewer-sample-app
mvn clean compile
コンパイル後、次のことでcodeguruを実行できます。
aws-codeguru-cli --root-dir ./ --build target/classes --src src --output ./output
open output/codeguru-report.html
ここで--root-dir .分析したいプロジェクトのルートを指定します。オプション--build target/classses 、ビルドアーティファクトが./target/classesの下にあると述べており、 --src 、 ./srcの下にあるソースファイルのみを分析したいと述べています。 Option --output ./output CodeGuruが推奨事項を書く必要がある場所を指定します。デフォルトでは、CodeGuruはJSONおよびHTMLレポートを作成します。
--bucket-nameオプションを使用して、独自のバケット名を提供できます。現在、CodeGuruのレビュアーは、箱から出してプレフィックスcodeguru-reviewer-で始まるバケット名のみをサポートしていることに注意してください。バケツの別の命名パターンを選択する場合は、次のことが必要です。
S3:GetObject Pormissions to codeguru-reviewer.amazonaws.comcodeguru-reviewer.amazonaws.comにKMS::Decrypt Permissionsを付与しています。CodeGuru Reviewerを使用すると、顧客管理キー(CMCMK)を使用して、ソースの保存と構築に使用されるS3バケットの内容、およびCodeGuruレビュアーが作成するすべてのメタデータと推奨事項を暗号化できます。まず、KMSで顧客管理キーを作成します。次のステートメントをキーポリシーに追加することにより、このキーを使用してアーティファクトを復号化するためのCodeGuruレビュアーの許可を付与する必要があります。
{
"Sid" : " Allow CodeGuru to use the key to decrypt artifacts " ,
"Effect" : " Allow " ,
"Principal" : {
"AWS" : " * "
},
"Action" : [
" kms:Decrypt " ,
" kms:DescribeKey "
],
"Resource" : " * " ,
"Condition" : {
"StringEquals" : {
"kms:ViaService" : " codeguru-reviewer.amazonaws.com " ,
"kms:CallerAccount" : [ Your AWS ACCOUNT ID ]
}
}
}次に、CodeGuru Reviewerで使用しているバケットのサーバー側の暗号化を有効にします。バケット名は、カスタム名を提供していない限り、 codeguru-reviewer-cli-[YOUR ACCOUNT]-[YOUR REGION]である必要があります。暗号化には、前のステップで作成したKMSキーを使用します。
これで、KMSキーID(エイリアスではなく)を提供することにより、リポジトリを分析できます。例えば:
aws-codeguru-cli -r ./ -kms 12345678-abcd-abcd-1234-1234567890ab
CodeGuruレビュアーCLIを使用してリポジトリを初めて分析すると、新しい協会が作成され、提供されたキーがこのリポジトリに関連付けられます。毛皮後のスキャンでは、キーを再度提供する必要はありません。リポジトリがすでに関連付けられていた後、キーの使用を開始できることに注意してください。キーを使用しないことからキーの使用に切り替える場合は、最初にAWSコンソールで既存のアソシエーションを削除し、次にキーを提供するCLIで新しいスキャンをトリガーする必要があります。
CodeGuru Reviewer CLIは、ユーザーがどの推奨事項を抑制する必要があるかに基づいて基準を指定できる.codeguru-ignore.ymlという名前のファイルを検索します。 CLIによって抑制された推奨事項は返されませんが、AWSコンソールに表示されます。
.codeguru-ignore.ymlファイルは、以下に示すフィルター基準を使用できます。
version : 1.0 # The Version field is mandatory. All other fields are optional.
# The CodeGuru Reviewer CLI produces a recommendations.json file which contains deterministic IDs for each
# recommendation. This ID can be excluded so that this recommendation will not be reported in future runs of the
# CLI.
ExcludeById :
- ' 4d2c43618a2dac129818bef77093730e84a4e139eef3f0166334657503ecd88d '
# We can tell the CLI to exclude all recommendations below a certain severity. This can be useful in CI/CD integration.
ExcludeBelowSeverity : ' HIGH '
# We can exclude all recommendations that have a certain tag. Available Tags can be found here:
# https://docs.aws.amazon.com/codeguru/detector-library/java/tags/
# https://docs.aws.amazon.com/codeguru/detector-library/python/tags/
ExcludeTags :
- ' maintainability '
# We can also exclude recommendations by Detector ID. Detector IDs can be found here:
# https://docs.aws.amazon.com/codeguru/detector-library
ExcludeRecommendations :
# Ignore all recommendations for a given Detector ID
- detectorId : ' java/[email protected] '
# Ignore all recommendations for a given Detector ID in a provided set of locations.
# Locations can be written as Unix GLOB expressions using wildcard symbols.
- detectorId : ' java/[email protected] '
Locations :
- ' src/main/java/com/folder01/*.java '
# Excludes all recommendations in the provided files. Files can be provided as Unix GLOB expressions.
ExcludeFiles :
- tst/**
.codeguru-ignore.ymlファイルでは、 versionフィールドのみが必須です。他のすべてのエントリはオプションであり、CLIはこれらのエントリの任意の組み合わせを理解します。
このような構成ファイルの例は、ここにあります。
このCLIを使用して、CI/CDパイプラインの内側からCodeGuruを実行できます。このアクションを例としてご覧ください。 CI/CDでCLIを使用するには、作業資格情報が必要です。このCDKテンプレートを使用して、GitHubアクションのOIDC資格情報をセットアップできます。
次に、 --no-promptオプションを使用してCLIを非対話モードで実行し、オプションを使用して、 --fail-on-recommendations事項が報告されている場合はゼロ以外の出口コードを返すために使用できます。必要に応じて、 --region地域と--profileオプションを使用して、地域とAWSプロファイルを指定できます。
aws-codeguru-cli --region [BUCKET REGION] --no-prompt --fail-on-recommendations -r ./ ...
CI/CDプロバイダーごとにコミットレンジの動作を異なります。たとえば、githubは、 ${{ github.event.before }}や${{ github.event.after }}などの環境変数を介して関連するコミットを提供します。
このアクションでは、エンドツーエンドの例が提供されています。
プロジェクトを構築するには、Java 8以降が必要です。このリポジトリをチェックアウトして実行します。
./gradlew installDist
そして今、あなたのローカルビルドを実行します:
./build/install/aws-codeguru-cli/bin/aws-codeguru-cli
次のようにセルフテストを実行できます。
./build/install/aws-codeguru-cli/bin/aws-codeguru-cli -r . -s src/main/java -b build/libs -c HEAD^:HEAD
詳細については、貢献を参照してください。
このプロジェクトは、Apache-2.0ライセンスの下でライセンスされています。