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许可获得许可。