# CodePush 게이트 적용하기

Microsoft가 App Center를 종료한 뒤, 팀들은 호스팅 CodePush 서비스로 옮기거나 Microsoft가 오픈소스로 공개한 서버를 직접 운영합니다. 서비스마다 CLI가 다르고, 모두 액세스 키로 배포합니다. Mocco가 그 키를 보관하다가 게이트가 승인된 뒤 배포 단계에 전달합니다. 먼저 [파이프라인에 토큰 발급하기](https://www.mocco.club/docs/ko/articles/yjbg5q-pipeline)를 설정하세요. 이 페이지는 키와 서비스별 명령을 다룹니다.

키는 Mocco의 **OTA updates** 페이지, **Your OTA tool** 탭에서 도구를 **CodePush (hosted)**로 고르고 `acme-production` 같은 이름으로 저장합니다. 프로바이더 ID는 `ota-codepush`입니다. 전달받은 값은 배포 job의 `$OTA_TOKEN`에 들어 있습니다.

## Revopush

Revopush의 **Settings**에서 **Add new key**를 선택해 액세스 키를 만듭니다. 키는 계정에 속하며 기본적으로 60일 뒤에 만료됩니다. [Revopush CI setup](https://revopush.org/ci-cd-automation-with-bitrise-codepush)을 참고하세요.

```bash
npx @revopush/code-push-cli login --accessKey "$OTA_TOKEN"
npx @revopush/code-push-cli release-react <app> android -d Production --description "${GITHUB_SHA}"
```

롤백은 `revopush rollback <app> Production`으로 합니다. [releasing](https://docs.revopush.org/cli/releasing-updates)과 [rolling back](https://docs.revopush.org/cli/rolling-back-updates)을 참고하세요.

## Codemagic CodePush

**OTA Updates**의 **Manage Access Keys**에서 키를 생성합니다. 만료 시점은 직접 정하고, 키는 한 번만 표시되며, 같은 곳의 **Revoke access**로 폐기할 수 있습니다. [Codemagic CodePush security](https://docs.codemagic.io/rn-codepush/security-and-access/)를 참고하세요.

```bash
npx @codemagic/code-push-cli login "https://codepush.pro" --accessKey "$OTA_TOKEN"
npx @codemagic/code-push-cli release-react <app> android -d Production
```

롤백은 `code-push rollback <app> Production`으로 합니다. [CLI quick reference](https://docs.codemagic.io/rn-codepush/cli-quick-reference/)를 참고하세요.

## Bitrise CodePush

Bitrise CodePush CLI는 `BITRISE_API_TOKEN`에서 Bitrise API 토큰을 읽습니다. Release Management와 필요한 프로젝트로 범위를 제한하고 만료일을 지정한 **workspace API token**을 권장합니다. [workspace API tokens](https://docs.bitrise.io/en/bitrise-platform/workspaces/workspace-api-token.html)를 참고하세요.

```bash
export BITRISE_API_TOKEN="$OTA_TOKEN"
codepush push --bundle --platform android --deployment Production --app-version 1.0.0 --app-id <app id>
```

롤백은 `codepush rollback --deployment Production --app-id <app id>`로 합니다. [Bitrise CodePush CLI](https://github.com/bitrise-io/bitrise-plugins-codepush-cli)를 참고하세요.

## 자체 호스팅 code-push-server

Microsoft의 `code-push-server` 저장소는 보관(archived) 상태입니다. 이 저장소에서 빌드하는 CLI가 `code-push-standalone`입니다. `code-push-standalone access-key add "mocco-ci" --ttl 30d`로 키를 만든 다음 그 키로 배포합니다.

```bash
code-push-standalone login https://<your server> --accessKey "$OTA_TOKEN"
code-push-standalone release-react <app> android -d Production
```

롤백은 `code-push-standalone rollback <app> Production`으로 합니다. [CLI README](https://github.com/microsoft/code-push-server/blob/main/cli/README.md)를 참고하세요.

## 교체하기

네 서비스의 키는 모두 만료되거나 폐기할 수 있습니다. 새 키를 만들고, Mocco에서 토큰 카드의 **Rotate**를 선택해 붙여 넣은 뒤, 서비스에서 이전 키를 폐기하세요. 기본 만료 기간이 있는 서비스는 키가 만료되기 전에 교체하세요. 그렇지 않으면 다음 배포가 실패합니다.
