Codeguru Reviewer를위한 간단한 CLI 래퍼는 저장소의 로컬 클론을 스캔하고 결과를받는 한 줄 명령을 제공합니다. 이 CLI는 AWS CLI 명령을 마무리하여 AWS CodeGuru Reviewer와 통신합니다. Codeguru Reviewer를 사용하면 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.
항상 관리자 자격 증명으로 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 아래에있는 소스 파일 만 분석하려고한다고 말합니다. 옵션 --output ./output CodeGuru가 권장 사항을 작성 해야하는 위치를 지정합니다. 기본적으로 Codeguru는 JSON 및 HTML 보고서를 작성합니다.
--bucket-name 옵션을 사용하여 자신의 버킷 이름을 제공 할 수 있습니다. 현재 Codeguru Reviewer는 Prefix codeguru-reviewer- 에서 시작하는 버킷 이름 만 지원합니다. 버킷에 대해 다른 명명 패턴을 선택하면 다음을 수행해야합니다.
S3:GetObject 권한은 codeguru-reviewer.amazonaws.com 에 대한 권한을 부여합니다codeguru-reviewer.amazonaws.com 에 KMS::Decrypt 권한을 부여하십시오.CodeGuru Reviewer를 사용하면 CMCMK (Custom Managed Key)를 사용하여 소스를 저장하고 아티팩트를 작성하는 데 사용되는 S3 버킷의 내용을 암호화 할 수 있으며 Codeguru Reviewer가 제작 한 모든 메타 데이터 및 권장 사항. 먼저 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 Reviewer 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 사용하여 0이 아닌 출구 코드를 반환 할 수 있습니다. 필요에 따라 --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 라이센스에 따라 라이센스가 부여됩니다.