このレポは、GitHubでのCI/CD統合のAWSアカウントにCodeGuru Reviewer GitHubアクションをセットアップするCDKスタックが含まれています。 CodeGuruレビュアーを使用するための正しい許可を設定し、コードを保持し、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レビュー担当者を使用できるようにする必要があるすべてのgithubリポジトリを追加します。例えば:
"allowedGithubRepos": ["aws-samples/*", "awslabs/smithy"]
組織aws-sampleのすべてのリポジトリとリポジトリawslabs/smithyがCodeGuruレビュアーを使用できるようにします。
allowedGithubReposを更新したら、ブートストラップCDKが必要で、スタックを展開します。
コマンドを実行します:
npx cdk bootstrap --profile {PROFILE_NAME} "aws://unknown-account/unknown-region"
PROFILE_NAME ~/.aws/configファイルの名前付きプロファイルの1つに置き換えます。"aws://unknown-account/unknown-region"を使用できます。コマンドを実行します:
npx cdk deploy --profile {PROFILE_NAME}
PROFILE_NAME ~/.aws/configファイルの名前付きプロファイルの1つに置き換えます。 展開が完了すると、これと同様の出力を受け取ります。
✅ 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アクションを呼び出すときに、 ARNと地域の役割を使用します。codeguru-reviewerアクションを呼び出すときに、バケット名を使用します。 ワークフローには、次のテンプレートのいずれかを使用できます。
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ランのArtifacsとして保存します。これにより、リポジトリにアクセスできる人なら誰でもSARIF形式の推奨事項をダウンロードできます。
また、AWSコンソールのすべての推奨事項を確認できます。
詳細については、CodeGuru Reviewerのドキュメントを参照してください。
許可されている組織とリポジトリのみが、CodeGuruレビュアーを実行するIAMの役割を引き受けることができることに注意してください。このため、 pushイベントでのみCodeGuruレビュアーアクションを実行することをお勧めします。アクションは、 pull_requestが発信したリポジトリがAllowリストの一部である場合にのみ、 pull_requestsで成功します。
さらに、このリポジトリをフォークするユーザーのアクションの失敗を回避するために、 id: iam-roleで役割の仮定ステップにラベルを付け、次のすべてのワークフローステップをガードします。
if: steps.iam-role.outcome == 'success'
そのため、フォークが役割を引き受けることが許可されていない場合、それらは実行されません。
詳細については、貢献を参照してください。
このライブラリは、MIT-0ライセンスに基づいてライセンスされています。ライセンスファイルを参照してください。