目次
概要
前回投稿した内容へプラスアルファした内容になります。
また、脆弱性診断にはsnykを使用しております。
詳しい設定内容などの詳細が知りたい方はソースコードをご確認お願いいたします。
環境
- Kotlin 1.8.21
- Spring Boot 3.3.5
- Docker 20.10.23
- Docker Compose 2.15.1
構成
ざっくり以下のような形式になっています。
前回同様CIで、テストが全て正常終了しなければマージできないようにしてあります。
※理想はCIでECR等にDocker imageをプッシュやE2Eテストも実施する。
設定
pre-merge.yml
name: PR Checks
on:
push:
branches:
- master
pull_request:
branches:
- '*'
jobs:
# SEE: https://docs.snyk.io/integrations/ci-cd-integrations/github-actions-integration/snyk-gradle-jdk17-action
security-check:
name: Run Security Check
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@master
- name: Make gradlew executable
run: chmod +x ./gradlew
- name: Run Snyk to check for vulnerabilities
uses: snyk/actions/gradle-jdk17@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --severity-threshold=high
tests:
name: Run tests
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up JDK 17
uses: actions/setup-java@v1
with:
java-version: 17
- name: Make gradlew executable
run: chmod +x ./gradlew
- name: Run detekt
run: ./gradlew detekt
- name: Run test
run: ./gradlew test
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
DATABASE_USERNAME: ${{ secrets.DATABASE_USERNAME }}
DATABASE_PASSWORD: ${{ secrets.DATABASE_PASSWORD }}
- name: Run jacocoTestReport
run: ./gradlew jacocoTestReport
- name: Archive unit test results
uses: actions/upload-artifact@v4
with:
name: unit-test-report
path: build/reports/tests/test
- name: Archive coverage results
uses: actions/upload-artifact@v4
with:
name: code-coverage-report
path: build/reports/jacoco/test/html
実行結果
- 脆弱性診断
以下のような形式で脆弱性を検知し、エラーで弾いてくれる。
なお、4段階のレベルを指定でき、下記キャプチャは3番目の"high"を指定した結果です。
詳しくはこちらを参照お願いします。
また、テスト実行結果やカバレッジレポートは、SummaryのArtifactsにあります。