Este repositorio contiene una pila de CDK que establece la acción de GitHub del revisor de Codeguru en su cuenta de AWS para la integración de CI/CD en GitHub. Establece los permisos correctos para usar el revisor de Codeguru, así como crear un cubo S3 que contiene el código y construir artefactos para el análisis de Codeguru Reivewer.
Si no tiene el CDK para TypeScript instalado, siga las instrucciones aquí y asegúrese de que sus credenciales estén configuradas correctamente para que pueda implementar con CDK. Los pasos incluyen:
npm install typescript aws-cdk
Una vez que todo esté configurado correctamente, obtenga las dependencias y compile:
git clone https://github.com/aws-samples/aws-codeguru-reviewer-cicd-cdk-sample.git
cd aws-codeguru-reviewer-cicd-cdk-sample
npm install
npm run build
En el archivo ./cdk.json , agregue todos los repositorios de GitHub que se les debe permitir usar el revisor de Codeguru en la lista allowedGithubRepos . Por ejemplo:
"allowedGithubRepos": ["aws-samples/*", "awslabs/smithy"]
Permite que todos los repositorios en la organización aws-sample y el repositorio awslabs/smithy usen el revisor de Codeguru.
Una vez que haya actualizado el allowedGithubRepos , necesita Bootstrap CDK e implementa la pila.
Ejecute el comando:
npx cdk bootstrap --profile {PROFILE_NAME} "aws://unknown-account/unknown-region"
PROFILE_NAME con uno de los perfiles nombrados en su archivo ~/.aws/config ."aws://unknown-account/unknown-region" .Ejecute el comando:
npx cdk deploy --profile {PROFILE_NAME}
PROFILE_NAME con uno de los perfiles nombrados en su archivo ~/.aws/config . Una vez que se complete la implementación, recibirá un resultado similar a este:
✅ GuruCdkSetupStack
Outputs:
GuruCdkSetupStack.Role = arn:aws:iam::123456789012:role/GitHubActionRole
GuruCdkSetupStack.Region = us-east-1
GuruCdkSetupStack.Bucket = codeguru-reviewer-build-artifacts-123456789012-us-east-1
Necesitará esta información en su flujo de trabajo GitHub:
configure-aws-credentials .codeguru-reviewer . Puede usar una de las siguientes plantillas para su flujo de trabajo:
name: Analyze with CodeGuru Reviewer
on:
- push
- workflow_dispatch # This allows manual triggering of the action through the GitHub UI.
permissions:
id-token: write
contents: read
security-events: write
jobs:
analyze:
name: Analyze with CodeGuru Reviewer
runs-on: ubuntu-latest
steps:
- name: Configure AWS credentials
id: iam-role
continue-on-error: true
uses: aws-actions/configure-aws-credentials@v1
with:
role-to-assume: {ROLE_ARN}
aws-region: {REGION}
- uses: actions/checkout@v2
if: steps.iam-role.outcome == 'success'
with:
fetch-depth: 0
- name: Set up JDK 1.8
if: steps.iam-role.outcome == 'success'
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Build project
if: steps.iam-role.outcome == 'success'
run: ./gradlew jar -x test
- name: CodeGuru Reviewer
uses: aws-actions/[email protected]
if: steps.iam-role.outcome == 'success'
continue-on-error: false
with:
s3_bucket: {BUCKET_NAME}
build_path: ./target/classes
- name: Upload review result
if: steps.iam-role.outcome == 'success'
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: codeguru-results.sarif.json
Reemplace las cadenas {ROLE_ARN} , {REGION} y {BUCKET_NAME} con los valores que recibió como salida de CDK.
Estos ejemplos utilizan la función de escaneo de código de GitHub para mostrar las recomendaciones. Si está utilizando un repositorio privado sin pagar el escaneo de código, esto fallará . Antes de poder usar esta función, debe habilitar el escaneo de código GitHub para su repositorio u organización (ver documentación). Si no planea usar esta función, omita la parte Upload review result .
name: Analyze with CodeGuru Reviewer
on:
- push
- workflow_dispatch # This allows manual triggering of the action through the GitHub UI.
permissions:
id-token: write
contents: read
jobs:
analyze:
name: Analyze with CodeGuru Reviewer
runs-on: ubuntu-latest
steps:
- name: Configure AWS credentials
id: iam-role
continue-on-error: true
uses: aws-actions/configure-aws-credentials@v1
with:
role-to-assume: {ROLE_ARN}
aws-region: {REGION}
- uses: actions/checkout@v2
if: steps.iam-role.outcome == 'success'
with:
fetch-depth: 0
- name: CodeGuru Reviewer
uses: aws-actions/[email protected]
if: steps.iam-role.outcome == 'success'
continue-on-error: false
with:
s3_bucket: {BUCKET_NAME}
- name: Store SARIF file
if: steps.iam-role.outcome == 'success'
uses: actions/upload-artifact@v2
with:
name: SARIF_recommendations
path: ./codeguru-results.sarif.json
Reemplace las cadenas {ROLE_ARN} , {REGION} y {BUCKET_NAME} con los valores que recibió como salida de CDK.
Aquí, en lugar de cargar los artefactos a la pestaña de seguridad de GitHubs, los almacenamos como artifacs de la ejecución del CICD. Esto permite que cualquier persona con acceso al repositorio descargue las recomendaciones en formato SARIF.
También puede ver todas las recomendaciones en su consola AWS.
Para obtener más información, consulte la documentación del revisor de Codeguru.
Tenga en cuenta que solo las organizaciones y repositorios que sean listados en la lista pueden asumir el rol de IAM para ejecutar el revisor de Codeguru. Por esta razón, le recomendamos que ejecute la acción del revisor de Codeguru solo en eventos push . La acción solo tendrá éxito en pull_requests si el repositorio desde el cual se originó el pull_request también es parte de la lista Permitir.
Además, para evitar fallas de la acción para los usuarios que desembolsan este repositorio, etiquetamos el paso de suposición de roles con id: iam-role y guardan todos los demás pasos de flujo de trabajo con:
if: steps.iam-role.outcome == 'success'
Por lo tanto, no se ejecutan si la bifurcación no puede asumir el papel.
Ver contribuyendo para más información.
Esta biblioteca tiene licencia bajo la licencia MIT-0. Ver el archivo de licencia.