Codeguru評論者的簡單CLI包裝器,提供單行命令來掃描存儲庫的本地克隆並接收結果。此CLI包裝了AWS CLI命令與AWS Codeguru評論者進行通信。使用Codeguru審閱者可以在您的AWS帳戶中生成計量費。有關詳細信息,請參見Codeguru評論者定價。
要運行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。
您始終可以將CLI與Admin憑據一起使用,但是如果您想具有特定角色來使用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
編譯後,我們可以使用:
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下的源文件。選項--output ./output指定Codeguru應該在哪裡寫建議。默認情況下,Codeguru生成了JSON和HTML報告。
您可以使用--bucket-name選項提供自己的存儲牌名稱。請注意,目前,Codeguru評論者僅支持以前綴codeguru-reviewer- of Box開頭的存儲桶名。如果您為存儲桶選擇不同的命名模式,則需要:
S3:GetObject權限到codeguru-reviewer.amazonaws.comKMS::Decrypt權限到codeguru-reviewer.amazonaws.comCodeguru審稿人允許您使用客戶託管密鑰(CMCMK)來加密用於存儲源和構建文物的S3存儲桶的內容,以及由Codeguru Reviewser生成的所有元數據和建議。首先,在KMS中創建客戶託管密鑰。您需要通過將以下聲明添加到您的密鑰策略:
{
"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審稿人的存儲桶的服務器端加密。除非您提供了自定義名稱,否則該存儲桶名是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評論者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許可獲得許可。