# CIでLockpickを実行する

リリース時にPulseでサイトを確認し、重大な検出事項が未解決のままならビルドを失敗させます。

CLIは、Node.js 20.9 以降が使えるどのCIでも動きます。CIでPulseを実行すると、Lockpickで開始した場合と同じく、毎回月間の利用枠からPulseスキャンを1回使います。プッシュのたびではなく、リリース時に実行することをおすすめします。

## ワークフローを作成する

リポジトリで、CLIにサインインした状態で実行します。

```bash title="ターミナル"
lockpick ci init <site>
```

このコマンドは `.github/workflows/lockpick.yml` を作成します。ワークフローは、リリースを公開したとき、またはActionsタブから手動で開始したときに実行されます。サイトでPulseを実行し、結果を待ちます。未解決の検出事項が `high` 以上の場合は失敗します。作成時のCLIのバージョンも固定されます。

* `--fail-on critical`、`high`、`medium`、`low` で基準を設定します。
* `--dry-run` を指定すると、ファイルを書かずにワークフローを表示します。
* `--file <path>` を指定すると、別の場所に書き込みます。`--force` を指定すると、既存のファイルを置き換えます。

CLIがローカルのアドレスにサインインしている場合、`ci init` は警告します。GitHubのランナーが届くのは、公開されているLockpickのアドレスだけだからです。その場合は、そのアドレスを `--host` で指定してください。

## キーを追加する

ワークフローは、リポジトリのシークレット `LOCKPICK_KEY` からキーを読み取ります。Pulseスキャンの開始を許可されたキーを使ってください。

```bash title="ターミナル"
gh secret set LOCKPICK_KEY
```

> **Careful**
>
> キーでできることは、サインインするときに許可した操作に限られます。CIのシークレットストアに保管し、リポジトリに入れないでください。不要になったら、Lockpick の **AIに追加** の **CLIとキー** タブで取り消してください。

## どこでも検出事項で失敗させる

`--fail-on` は、完了したスキャンで終わるコマンドのすべてで使えます。対象は `lockpick pulse`、`lockpick recheck`、`lockpick watch`、`lockpick deep start`、`lockpick findings` です。`lockpick ci check <run-id>` は、完了済みのスキャンに基準を適用します。このコマンドは、スキャンを開始したり利用枠を使ったりしません。また、スキャンの経過時間（`--max-age-hours`）やカバレッジ（`--min-coverage`）でも失敗させられます。未解決の検出事項が基準に達すると、コマンドは終了コード 8 で終わります。そのため、どのCIでもビルドを止められます。

```bash title="ターミナル"
lockpick pulse <site> --fail-on high --timeout 900
```

CIでは、CLIはライブの進行表示の代わりに、スキャンの状態が変わるたびに1行ずつ表示します。`--json` を指定すると、結果だけを出力します。色を表示したいログでは、`FORCE_COLOR=1` を設定してください。

## CLIとリリーススキャンのスクリプトの終了コード

CLIと、単独の[リリーススキャンのスクリプト](/ja/docs/protect/release-scans)では、終了コードの決まりが異なります。ジョブがどちらを実行しているか確認してください。

| 結果                    | `lockpick` CLI                                  | 単独のリリーススキャンのスクリプト |
| --------------------- | ----------------------------------------------- | ----------------- |
| 検出事項の基準を超えずに完了        | 0                                               | 0                 |
| 未解決の検出事項が基準に達した       | 8                                               | 1                 |
| スキャンが失敗したか、別のエラーが発生した | [CLIの終了コード](/ja/docs/cli/install#exit-codes)を参照 | 1                 |

リリーススキャンのスクリプトは、サイト単位のCIキー（`LOCKPICK_CI_KEY`）を使います。CLIは `LOCKPICK_KEY` と、承認された権限を使います。