GitHub 向け導入ガイド

技術サポートが必要ですか?   導入支援のご依頼・ご相談       

GitHub Actions に Sider Scan を導入する方法について記述します。

1. 前提条件

GitHub でソース管理していることが条件となります。 また、Sider Scan の解析結果を保存するため、AWS のアカウントおよび S3 のバケット作成とアクセス権限も必要となります。

2. GitHub Actions 設定ファイル (siderscan.yml)の作成

下記の内容を .github/workflows フォルダにファイル名を siderscan.yml として配置してください。

すぐに、CI/CDが動き始めて、mainブランチにコミットしたときにSider Scanの解析が始まります。指定したメールアドレスに解析結果の通知を受信できれば設定完了です。

ユーザーの環境によって編集が必要な箇所が2点あります。

  1. 解析レポートの受信用メールアドレス
    Sider Scan は、ソースコードの解析が終わり、確認が必要なコードが検出された場合にメールで通知を行います。その際の通知を受け取るメールアドレスを記載下さい。下記のyml ファイルでは44行目になります。yourname@example.com を適切なアドレスに編集ください。
  2. AWS S3 の設定
    解析結果の詳細画面を AWS S3 に置くことを想定しています。AWS アカウントの AWS_ACCESS_KEY_ID_FOR_SIDERSCANAWS_SECRET_ACCESS_KEY_FOR_SIDERSCAN は、GitHub の各リポジトリの設定 “Settings” の “Secrets” に登録します。また、設定ファイル内の「S3のバケットURL(30行目)」「リージョン(65行目)」「S3のバケット名(67行目)」にはお使いの環境の情報を記述してください。

注意点

以下の設定例では、S3 に保存した解析結果の詳細画面を誰でも閲覧可能な状態となっています。実運用の際は、IP制限をかけるなど、貴社のセキュリティポリシーに合うように、S3 のアクセス制限の設定をお願いいたします。詳しくはこちらの資料を参照ください。

name: Sider Scan Runner

on:
  push:
    branches:
      - main

jobs:
  scan-job:
    runs-on: ubuntu-20.04
    container:
      image: sider/sider_scan_runner:latest
      env:
        TZ: Asia/Tokyo
    steps:
      - uses: actions/checkout@v2
      - name: Create a sample .siderscan.json if needed
        run: |
          if [ ! -e .siderscan.json ]; then
            cat - << 'JSON' >> .siderscan.json
          {
            "report": {
              "mail": {
                "to": ["${SIDERSCAN_MAIL_TO}"],
                "useBuiltInProvider": true
              }
            },
            "scan": {
              "result": {
                "url": "https://S3のバケットURL/${GITHUB_REPOSITORY}/${GITHUB_RUN_NUMBER}"
              }
            },
            "enableSiderScanTracing": {
              "userEmail": "${SIDERSCAN_MAIL_TO}"
            }
          }
          JSON
            echo 'CREATED .siderscan.json'
          fi
      - run: tmpscanjson=$(mktemp) && envsubst < .siderscan.json > "$tmpscanjson" && mv "$tmpscanjson" .siderscan.json
        env:
          # Sider Scanの解析結果を必要に応じてお送りします
          # 受信メールアドレスを設定してください
          SIDERSCAN_MAIL_TO: yourname@example.com
      - name: Download the latest radump
        continue-on-error: true
        run: |
          wget --header "Accept: application/vnd.github.v3+json" --header "Authorization: token ${{github.token}}" https://api.github.com/repos/${{github.repository}}/actions/artifacts -O - \
            | grep -o 'https://[^"]*/zip' \
            | head -n 1 \
            | wget -P /tmp --header "Authorization: token ${{github.token}}" --input-file - \
            && unzip /tmp/zip output.radump -d $GITHUB_WORKSPACE
      - name: Start analysis
        run: sider run $GITHUB_WORKSPACE
      - name: Upload radump
        uses: actions/upload-artifact@v2
        with:
          name: radump
          path: output.radump
      - name: Publish to S3 bucket
        uses: opspresso/action-s3-sync@master
        env:
          AWS_ACCESS_KEY_ID: ${{secrets.AWS_ACCESS_KEY_ID_FOR_SIDERSCAN}}
          AWS_SECRET_ACCESS_KEY: ${{secrets.AWS_SECRET_ACCESS_KEY_FOR_SIDERSCAN}}
          AWS_REGION: リージョン
          FROM_PATH: scan_result
          DEST_PATH: "s3://S3のバケット名/${{github.repository}}/${{github.run_number}}/scan_result"
          OPTIONS: "--acl public-read"

Sider Scan は、初回の解析はリポジトリ全体のソースコードを解析します。2回目以降の解析に関しては、前回の解析内容を取得して、前回解析時から変更のあったファイルのみ分析します。

3. より高度な設定

Sider Scan 本体に関する高度な設定やオプション設定の詳細に関しては、

Sider Scan の高度な設定
Sider Scan 設定リファレンスガイド

を参照下さい。