# CI에서 Lockpick 실행하기

릴리스를 배포할 때 Pulse로 사이트를 확인하고, 심각한 문제가 열려 있으면 빌드를 실패시키세요.

Node.js 20.9 이상이 있는 CI라면 어디서든 CLI를 실행할 수 있습니다. CI에서 Pulse를 실행하면 Lockpick에서 시작할 때와 같이 매달 허용량의 Pulse 스캔 한 번을 사용하므로, 모든 푸시마다 실행하지 말고 배포할 때 실행하세요.

## 워크플로 작성하기

CLI에 로그인한 상태에서 저장소 안에서 실행하세요.

```bash title="터미널"
lockpick ci init <site>
```

`.github/workflows/lockpick.yml` 파일을 작성합니다. 이 워크플로는 릴리스를 게시할 때, 그리고 Actions 탭에서 직접 시작할 때 실행됩니다. 사이트에 Pulse를 실행하고 결과를 기다리며, 열린 문제 중 `high` 이상의 심각도가 있으면 실패합니다. 작성 당시의 CLI 버전을 고정(pin)합니다.

* `--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는 실시간 진행 줄 대신 스캔 상태가 바뀔 때마다 한 줄씩 출력합니다. `--json`을 쓰면 결과만 출력합니다. 색상을 보여 주는 로그에서 색상을 쓰려면 `FORCE_COLOR=1`을 설정하세요.

## CLI와 릴리스 스캔 스크립트의 종료 코드

CLI와 독립 실행형 [릴리스 스캔 스크립트](/ko/docs/protect/release-scans)는 서로 다른 종료 코드 규칙을 씁니다. 작업이 어느 것을 실행하는지 확인하세요.

| 결과                   | `lockpick` CLI                                  | 독립 실행형 릴리스 스캔 스크립트 |
| -------------------- | ----------------------------------------------- | ------------------ |
| 문제 기준 이내로 완료됨        | 0                                               | 0                  |
| 열린 문제가 기준에 도달함       | 8                                               | 1                  |
| 스캔이 실패했거나 다른 오류가 발생함 | [CLI 종료 코드](/ko/docs/cli/install#exit-codes) 참고 | 1                  |

릴리스 스캔 스크립트는 사이트 범위의 CI 키(`LOCKPICK_CI_KEY`)를 사용합니다. CLI는 `LOCKPICK_KEY`와 승인된 권한을 사용합니다.