Simple CLI Wrapper para Codeguru Revisor que proporciona un comando de una línea para escanear un clon local de un repositorio y recibir resultados. Esta CLI envuelve los comandos AWS CLI para comunicarse con el revisor de AWS Codeguru. El uso del revisor de Codeguru puede generar tarifas de medición en su cuenta de AWS. Consulte el precio del revisor de Codeguru para más detalles.
Para ejecutar la CLI, necesitamos tener una versión de Git, Java (por ejemplo, Amazon Corretto) y la interfaz de línea de comandos AWS instalada. Verifique que ambas aplicaciones estén instaladas en nuestra máquina ejecutando:
java -version
mvn --version
aws --version
git --version
También necesitaremos credenciales de trabajo en nuestra máquina para interactuar con nuestra cuenta AWS. Obtenga más información sobre cómo configurar credenciales para AWS aquí: https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html.
Siempre puede usar la CLI con credenciales de administración , pero si desea tener un papel específico para usar la CLI, sus credenciales deben tener al menos los siguientes permisos:
{
"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 "
}
]
} Puede descargar el AWS-Codeguru-Cli de la sección Libertades. Descargue la última versión y agréguela a su 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
Ahora, descargemos un proyecto de ejemplo (requiere Maven):
git clone https://github.com/aws-samples/amazon-codeguru-reviewer-sample-app
cd amazon-codeguru-reviewer-sample-app
mvn clean compile
Después de compilar, podemos ejecutar Codeguru con:
aws-codeguru-cli --root-dir ./ --build target/classes --src src --output ./output
open output/codeguru-report.html
Donde --root-dir . Especifica que la raíz del proyecto que queremos analizar. La opción --build target/classses establece que los artefactos de compilación se encuentran en ./target/classes y --src dice que solo queremos analizar los archivos de origen que se encuentran en ./src . La opción --output ./output especifica dónde debe escribir Codeguru sus recomendaciones. Por defecto, Codeguru produce un informe JSON y HTML.
Puede proporcionar su propio nombre de cubo utilizando la opción --bucket-name . Tenga en cuenta que, actualmente, el revisor de Codeguru solo admite nombres de deseos que comienzan con el prefijo codeguru-reviewer- fuera de la caja. Si elige un patrón de nombres diferente para su cubo, necesita:
S3:GetObject en el cubo S3 a codeguru-reviewer.amazonaws.comKMS::Decrypt permisos a codeguru-reviewer.amazonaws.comEl revisor de Codeguru le permite usar una clave administrada por el cliente (CMCMK) para cifrar el contenido del cubo S3 que se utiliza para almacenar y construir artefactos, y todos los metadatos y recomendaciones producidos por el revisor de Codeguru. Primero, cree una clave administrada por el cliente en KMS. Deberá otorgar permiso al revisor de Codeguru para descifrar artefactos con esta clave agregando la siguiente declaración a su política clave:
{
"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 ]
}
}
} Luego, habilite el cifrado del lado del servidor para el cubo que está utilizando con el revisor de CodeGuru. El nombre del cubo debe ser codeguru-reviewer-cli-[YOUR ACCOUNT]-[YOUR REGION] , a menos que haya proporcionado un nombre personalizado. Para el cifrado, use la tecla KMS que creó en el paso anterior.
Ahora puede analizar un repositorio proporcionando la ID de clave KMS (no el alias). Por ejemplo:
aws-codeguru-cli -r ./ -kms 12345678-abcd-abcd-1234-1234567890ab
La primera vez que analiza un repositorio con el revisor Codeguru CLI, se creará una nueva asociación y la clave proporcionada se asociará con este repositorio. Escaneos posteriores de piel, no necesita proporcionar la clave nuevamente. Tenga en cuenta que puede comenzar a usar una clave después de que el repositorio ya esté asociado. Si desea cambiar de no usar una clave para usar una clave, debe eliminar primero la asociación existente en la consola AWS y luego activar un nuevo escaneo con la CLI donde proporciona la clave.
El revisor de Codeguru CLI busca un archivo llamado .codeguru-ignore.yml donde los usuarios pueden especificar criterios en función de qué recomendaciones deben suprimirse. Las recomendaciones suprimidas no serán devueltas por la CLI, pero aún aparecerán en la consola de AWS.
El archivo .codeguru-ignore.yml puede usar cualquiera de los criterios de filtro que se muestran a continuación:
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/**
Solo el campo version es obligatorio en el archivo .codeguru-ignore.yml . Todas las demás entradas son opcionales, y la CLI comprenderá cualquier combinación de esas entradas.
Se puede encontrar un ejemplo de dicho archivo de configuración aquí.
Puede usar esta CLI para ejecutar Codeguru desde dentro de su tubería CI/CD. Vea esta acción como un ejemplo. Para usar la CLI en CI/CD, necesita credenciales de trabajo. Puede usar esta plantilla CDK para configurar las credenciales OIDC para las acciones de GitHub.
Luego, puede ejecutar la CLI en modo no interactivo utilizando la opción --no-prompt , y usar la opción --fail-on-recommendations para devolver un código de salida no cero si se informan las recomendaciones. Puede especificar una región y perfil de AWS utilizando las opciones --region y --profile según sea necesario:
aws-codeguru-cli --region [BUCKET REGION] --no-prompt --fail-on-recommendations -r ./ ...
Obtener el rango de confirmación funciona de manera diferente para diferentes proveedores de CI/CD. Por ejemplo, GitHub proporciona las confirmaciones relevantes a través de variables de entorno como ${{ github.event.before }} y ${{ github.event.after }} .
Se proporciona un ejemplo de extremo a extremo en esta acción.
Para construir el proyecto, necesita Java 8 o posterior. Consulte este repositorio y ejecute:
./gradlew installDist
Y ahora ejecuta tu construcción local con:
./build/install/aws-codeguru-cli/bin/aws-codeguru-cli
Puedes ejecutar una autocomprobación con:
./build/install/aws-codeguru-cli/bin/aws-codeguru-cli -r . -s src/main/java -b build/libs -c HEAD^:HEAD
Ver contribuyendo para más información.
Este proyecto tiene licencia bajo la licencia Apache-2.0.