Wrapper CLI Simple สำหรับผู้ตรวจสอบ CodeGuru ที่ให้คำสั่งหนึ่งบรรทัดเพื่อสแกนโคลนนิ่งท้องถิ่นของที่เก็บและรับผลลัพธ์ CLI นี้ห่อคำสั่ง AWS CLI เพื่อสื่อสารกับผู้ตรวจสอบ AWS Codeguru การใช้ Codeguru Reviewer อาจสร้างค่าธรรมเนียมการวัดในบัญชี 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 กับข้อมูลรับรอง ผู้ดูแลระบบ ได้ตลอดเวลา แต่หากคุณต้องการมีบทบาทเฉพาะในการใช้ 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 รองรับชื่อถังที่เริ่มต้นด้วยคำนำหน้า codeguru-reviewer- นอกกรอบ หากคุณเลือกรูปแบบการตั้งชื่ออื่นสำหรับถังของคุณคุณต้อง:
S3:GetObject บน Bucket S3 ถึง codeguru-reviewer.amazonaws.comKMS::Decrypt PERSISSIONS TO codeguru-reviewer.amazonaws.comCodeguru Reviewer ช่วยให้คุณใช้คีย์ที่จัดการกับลูกค้า (CMCMK) เพื่อเข้ารหัสเนื้อหาของถัง 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 (ไม่ใช่นามแฝง) ตัวอย่างเช่น:
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/**
เฉพาะฟิลด์ version เท่านั้นที่จำเป็นในไฟล์. .codeguru-ignore.yml รายการอื่น ๆ ทั้งหมดเป็นทางเลือกและ CLI จะเข้าใจการรวมกันของรายการเหล่านั้น
ตัวอย่างของไฟล์กำหนดค่าดังกล่าวสามารถพบได้ที่นี่
คุณสามารถใช้ CLI นี้เพื่อเรียกใช้ codeguru จากภายในท่อ CI/CD ของคุณ ดูการกระทำนี้เป็นตัวอย่าง ในการใช้ CLI ใน CI/CD คุณต้องมีข้อมูลรับรองการทำงาน คุณสามารถใช้เทมเพลต CDK นี้เพื่อตั้งค่าข้อมูลรับรอง OIDC สำหรับการกระทำของ GitHub
จากนั้นคุณสามารถเรียกใช้ CLI ในโหมดที่ไม่โต้ตอบโดยใช้ตัวเลือก --no-prompt และใช้ตัวเลือก --fail-on-recommendations เพื่อส่งคืนรหัสออกที่ไม่ใช่ศูนย์หากมีการรายงานคำแนะนำ คุณสามารถระบุโปรไฟล์ภูมิภาคและ AWS โดยใช้ตัวเลือก --region และ --profile ตามที่ต้องการ:
aws-codeguru-cli --region [BUCKET REGION] --no-prompt --fail-on-recommendations -r ./ ...
รับช่วงการกระทำที่แตกต่างกันสำหรับผู้ให้บริการ CI/CD ที่แตกต่างกัน ตัวอย่างเช่น GitHub จัดเตรียมการกระทำที่เกี่ยวข้องผ่านตัวแปรสภาพแวดล้อมเช่น ${{ github.event.before }} และ ${{ github.event.after }}
ตัวอย่างแบบ end-to-end มีให้ในการดำเนินการนี้
ในการสร้างโครงการคุณต้องใช้ 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