# TeamCity パイプラインでのローカルコードスキャンのセットアップ

デフォルトでは、Aikido はクラウド上でリポジトリをスキャンできます。コードへのアクセスを共有したくない場合は、Local Scanning オプションを使用できます。Aikido Security Local Scanner は、お使いの環境内（この場合は TeamCity Pipelines 内）で Aikido Security のスキャンを実行できるツールです。スキャンはパイプライン内で実行され、その結果が Aikido Security プラットフォームにアップロードされます。

## Local Scanning のセットアップ方法 <a href="#how-to-set-up-local-scanning" id="how-to-set-up-local-scanning"></a>

**前提条件**：Local Scanning が可能なアカウントを作成済みであることを確認してください。[Local Scanning アカウントの作成に関する詳細情報](https://help.aikido.dev/en/articles/9070345-how-to-create-an-account-for-local-scanning-on-aikido)。

### 1. 認証トークンを取得する <a href="#id-1-get-your-authentication-token" id="id-1-get-your-authentication-token"></a>

1. [Local Scanner セットアップページ](https://app.aikido.dev/settings/integrations/localscan)に移動します。
2. 認証トークンを生成してコピーします。このトークンは一度しか表示できないことに注意してください。
3. プロジェクトで Local Scanner を実行する際に、このトークンを引数 `--apikey` として追加します。
4.  このトークンをパイプラインシークレットとして保存します。

    ![API キーをシークレットとして安全に追加するためのアプリ設定画面。](https://help.aikidogov.us/_assets/69c05039f459/ucarecdn-9ba9b826-ae28-47cf-b61a-39381cc387ef.png)

### 2. Local Scanner を実行する <a href="#id-2-running-the-local-scanner" id="id-2-running-the-local-scanner"></a>

あとはリポジトリでスキャナーを実行するだけです。\
​\
ローカルスキャナーがデフォルトブランチに対してのみトリガーされるようにしてください。デフォルトでは、Aikido はリポジトリ内の 1 つのブランチ（通常は main または master ブランチ）に対して、依存関係とコードの問題のスキャンをサポートしています。そのため、Aikido プラットフォーム上でスキャン結果が混在しないよう、ローカルスキャナーはそのブランチでのみ実行することをお勧めします。これはパイプラインのセットアップ時に指定できます。

### Docker を使用する <a href="#using-docker" id="using-docker"></a>

TeamCity パイプラインでローカルスキャナーを使用する最も簡単な方法は、Docker イメージを使用することです。\
​\
YAML の例：

```yaml
jobs:
  Job1:
    name: Aikido Scan
    steps:
      - type: script
        name: Run aikido scan
        docker-image: aikidosecurity/local-scanner
        script-content: >-
          aikido-local-scanner scan ./ --apikey %AIKIDO_API_KEY%
          --repositoryname MyRepo --branchname main
    runs-on: Linux-Medium
```

コマンドを実行する際に、`--branchname` オプションを使用して対象のブランチを指定してください。

このリポジトリに対する初回のスキャンである場合、Aikido は指定した名前でリポジトリを作成し、すべてのスキャン結果を格納します。以降のスキャン結果は、Aikido 内のこのリポジトリ名の下に集約されます。

デフォルトではすべてのスキャンタイプが実行されます。一部のスキャンのみ（例：SAST スキャンのみ）を実行したい場合は、`--scan-types` オプションでスキャンタイプを指定できます。CLI オプションの詳細については[こちら](https://help.aikido.dev/en/articles/9027526-local-scanner-cli-options)をご覧ください。

スキャナーをリリースゲーティングモードまたは PR ゲーティングモードで実行することもできます。リリースゲーティングモードは、リリース前にリポジトリをスキャンする際に役立ち、リリース候補に未解決の問題がないことを確認できます。リリースゲーティングモードで実行すると、スキャン完了後に選択した重大度以上の未解決の問題がある場合、スキャナープロセスは失敗します。PR ゲーティングモードは、PR で新たに導入された可能性のある問題をスキャンするために使用できます。

リリースゲーティングモードまたは PR ゲーティングモードの詳細については、[こちらの記事](https://help.aikidogov.us/docs/docs-ja/code-scanning/local-code-scanning/pr-gating-for-code-using-local-scanner)をご覧ください。

### 3. スキャン結果を確認する <a href="#id-3-check-your-scanning-results" id="id-3-check-your-scanning-results"></a>

初回のスキャンが完了したら、Aikido Feed に移動して結果を確認できます。指定した名前のリポジトリが作成されており、スキャンのすべての結果が格納されています。
