이 repo에는 Github에서 CI/CD 통합을위한 AWS 계정에서 CodeGuru Reviewer GitHub Action을 설정하는 CDK 스택이 포함되어 있습니다. Codeguru Reviewer를 사용하는 데 대한 올바른 권한을 설정하고 Codeguru Reivewer의 코드를 보유하고 아티팩트를 구축하는 S3 버킷을 작성합니다.
TypeScript 용 CDK가 설치되지 않은 경우 여기 지침을 따르고 자격 증명이 올바르게 설정되어 CDK로 배포 할 수 있는지 확인하십시오. 단계에는 다음이 포함됩니다.
npm install typescript aws-cdk
모든 것이 올바르게 설정되면 종속성을 가져와 컴파일하십시오.
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
./cdk.json 파일에 allowedGithubRepos 목록에 CodeGuru Reviewer를 사용할 수 있어야하는 모든 GitHub 리포지토리를 추가하십시오. 예를 들어:
"allowedGithubRepos": ["aws-samples/*", "awslabs/smithy"]
조직 aws-sample 및 Repository awslabs/smithy 의 모든 저장소가 Codeguru Reviewer를 사용할 수 있도록 허용합니다.
allowedGithubRepos 를 업데이트 한 후에는 부트 스트랩 CDK가 필요하고 스택을 배포해야합니다.
명령 실행 :
npx cdk bootstrap --profile {PROFILE_NAME} "aws://unknown-account/unknown-region"
PROFILE_NAME ~/.aws/config 파일의 명명 된 프로파일 중 하나로 바꾸십시오."aws://unknown-account/unknown-region" 사용할 수 있습니다.명령 실행 :
npx cdk deploy --profile {PROFILE_NAME}
PROFILE_NAME ~/.aws/config 파일의 명명 된 프로파일 중 하나로 바꾸십시오. 배포가 완료되면 다음과 유사한 출력을 받게됩니다.
✅ 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
GitHub 워크 플로 에서이 정보가 필요합니다.
configure-aws-credentials Action을 호출 할 때 ARN 과 지역의 역할을 사용합니다.codeguru-reviewer Action을 호출 할 때 버킷 이름을 사용합니다. 워크 플로에 다음 템플릿 중 하나를 사용할 수 있습니다.
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
문자열 {ROLE_ARN} , {REGION} 및 {BUCKET_NAME} CDK에서 출력으로받은 값으로 바꾸십시오.
이 예제는 GitHub의 코드 스캔 기능을 사용하여 권장 사항을 표시합니다. 코드 스캔 비용을 지불하지 않고 개인 저장소를 사용하는 경우 실패합니다 . 이 기능을 사용하기 전에 저장소 또는 조직에 대한 GitHub 코드 스캔을 활성화해야합니다 (문서 참조). 이 기능을 사용할 계획이없는 경우 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
문자열 {ROLE_ARN} , {REGION} 및 {BUCKET_NAME} CDK에서 출력으로받은 값으로 바꾸십시오.
여기서는 아티팩트를 GitHubs 보안 탭에 업로드하는 대신 CICD 실행의 아티파스로 저장합니다. 이를 통해 저장소에 액세스 할 수있는 사람은 누구나 권장 사항을 SARIF 형식으로 다운로드 할 수 있습니다.
AWS 콘솔에서 모든 권장 사항을 볼 수 있습니다.
자세한 내용은 Codeguru Reviewer 문서를 참조하십시오.
허용 된 조직 및 리포지토리 만 Codeguru 검토자를 실행하는 IAM 역할을 가정 할 수 있습니다. 이러한 이유로 push 이벤트에서만 Codeguru Reviewer 액션을 실행하는 것이 좋습니다. 이 작업은 pull_request 시작된 저장소가 허용 목록의 일부인 경우 pull_requests 에서만 성공합니다.
또한,이 저장소를 포크하는 사용자의 조치 실패를 피하기 위해, 우리는 역할 가정 단계를 id: iam-role 및 기타 모든 워크 플로우 단계로 레이블을 지정합니다.
if: steps.iam-role.outcome == 'success'
따라서 포크가 역할을 맡을 수 없다면 실행되지 않습니다.
자세한 내용은 기여를 참조하십시오.
이 라이브러리는 MIT-0 라이센스에 따라 라이센스가 부여됩니다. 라이센스 파일을 참조하십시오.