

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# CodeBuild용 타사 소스 리포지토리 샘플
<a name="sample-third-party-source"></a>

이 섹션에서는 타사 소스 리포지토리와 CodeBuild 간의 샘플 통합에 대해 설명합니다.


| 샘플 | 설명 | 
| --- | --- | 
|  BitBucket pull 요청 및 웹후크 필터 샘플 – [CodeBuild용 'Bitbucket pull 요청 및 웹후크 필터' 샘플 실행](sample-bitbucket-pull-request.md) 참조  |  이 샘플에서는 Bitbucket 리포지토리를 사용하여 풀 요청을 생성하는 방법을 보여줍니다. 또한 Bitbucket webhook를 통해 CodeBuild를 트리거하여 프로젝트 빌드를 생성하는 방법을 보여줍니다.  | 
|  GitHub Enterprise Server 샘플 – [CodeBuild용 GitHub Enterprise Server 샘플 실행](sample-github-enterprise.md) 참조  |  이 샘플에서는 GitHub Enterprise Server 리포지토리에 인증서가 설치되어 있을 때 CodeBuild 프로젝트를 설정하는 방법을 보여 줍니다. 또한 코드 변경이 GitHub Enterprise Server 리포지토리로 푸시될 때마다 CodeBuild가 다시 빌드되도록 Webhook를 활성화하는 방법도 보여줍니다.  | 
|  GitHub pull 요청 및 웹후크 필터 샘플 – [CodeBuild용 GitHub pull 요청 및 웹후크 필터 샘플 실행](sample-github-pull-request.md) 참조  |  이 샘플에서는 GitHub Enterprise Server 리포지토리를 사용하여 pull 요청을 생성하는 방법을 보여줍니다. 또한 코드 변경이 GitHub Enterprise Server 리포지토리로 푸시될 때마다 CodeBuild가 다시 빌드되도록 Webhook를 활성화하는 방법도 보여줍니다.  | 

# CodeBuild용 'Bitbucket pull 요청 및 웹후크 필터' 샘플 실행
<a name="sample-bitbucket-pull-request"></a>

AWS CodeBuild 는 소스 리포지토리가 Bitbucket일 때 웹후크를 지원합니다. 즉, 소스 코드가 Bitbucket 리포지토리에 저장된 CodeBuild 빌드 프로젝트의 경우, Webhook는 코드 변경이 리포지토리에 푸시될 때마다 소스 코드를 다시 빌드하는 데 사용할 수 있습니다. 자세한 내용은 [Bitbucket Webhook 이벤트](bitbucket-webhook.md) 단원을 참조하십시오.

이 샘플에서는 Bitbucket 리포지토리를 사용하여 풀 요청을 생성하는 방법을 보여줍니다. 또한 Bitbucket webhook를 통해 CodeBuild를 트리거하여 프로젝트 빌드를 생성하는 방법을 보여줍니다.

**참고**  
Webhook를 사용할 때 사용자가 예상치 못한 빌드를 트리거할 수 있습니다. 이 위험을 줄이려면 [webhook 사용 모범 사례](webhooks.md#webhook-best-practices) 섹션을 참조하세요.

**Topics**
+ [사전 조건](#sample-bitbucket-pull-request-prerequisites)
+ [1단계: Bitbucket을 사용하여 빌드 프로젝트 생성 및 웹후크 활성화](#sample-bitbucket-pull-request-create)
+ [2단계: Bitbucket 웹후크를 사용하여 빌드 트리거](#sample-bitbucket-pull-request-trigger)

## 사전 조건
<a name="sample-bitbucket-pull-request-prerequisites"></a>

 이 샘플을 실행하려면 AWS CodeBuild 프로젝트를 Bitbucket 계정에 연결해야 합니다.

**참고**  
 CodeBuild에서 Bitbucket으로 권한을 업데이트했습니다. 이전에 프로젝트를 Bitbucket에 연결했지만 지금 Bitbucket 연결 오류를 수신한 경우 다시 연결하여 CodeBuild에 webhook 관리 권한을 부여해야 합니다.

## 1단계: Bitbucket을 사용하여 빌드 프로젝트 생성 및 웹후크 활성화
<a name="sample-bitbucket-pull-request-create"></a>

 다음 단계에서는 Bitbucket을 소스 리포지토리로 사용하여 AWS CodeBuild 프로젝트를 생성하고 웹후크를 활성화하는 방법을 설명합니다.

1. [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) AWS CodeBuild 콘솔을 엽니다.

1.  CodeBuild 정보 페이지가 나타나면 **빌드 프로젝트 생성**을 선택합니다. 그렇지 않을 경우, 탐색 창에서 **빌드**를 확장한 후 **빌드 프로젝트**를 선택하고 **빌드 프로젝트 생성**을 선택합니다.

1. **빌드 프로젝트 생성**을 선택합니다.

1. **프로젝트 구성**에서 다음과 같이 합니다.  
**프로젝트 이름**  
이 빌드 프로젝트의 이름을 입력합니다. 빌드 프로젝트 이름은 각 AWS 계정에서 고유해야 합니다. 또한 선택에 따라 빌드 프로젝트에 대한 설명을 포함하여 다른 사용자가 이 프로젝트의 용도를 이해하도록 도울 수 있습니다.

1. **소스**에서 다음과 같이 합니다.  
**소스 공급자**  
**Bitbucket**을 선택합니다. Bitbucket과 연결(다시 연결)하는 지침을 따르고 **승인**을 선택합니다.  
**리포지토리**  
**내 Bitbucket 계정의 리포지토리**를 선택합니다.  
이전에 Bitbucket 계정에 연결한 적이 없으면 Bitbucket 사용자 이름과 앱 암호를 입력하고 **Bitbucket 보안 인증 저장**을 선택합니다.  
**Bitbucket 리포지토리**  
Bitbucket 리포지토리의 URL을 입력합니다.

1. **기본 소스 webhook 이벤트**에서 다음을 선택합니다.
**참고**  
**기본 소스 webhook 이벤트** 섹션은 이전 단계에서 **Bitbucket 계정의 리포지토리**를 선택한 경우에만 표시됩니다.

   1. 프로젝트를 생성할 때 **코드 변경이 이 리포지토리로 푸시될 때마다 다시 빌드**를 선택합니다.

   1. **이벤트 유형**에서 하나 이상의 이벤트를 선택합니다.

   1. 이벤트가 빌드를 트리거할 때를 필터링하려면 **Start a build under these conditions(다음 조건에서 빌드를 시작)**에서 하나 이상의 선택적 필터를 추가합니다.

   1. 이벤트가 트리거되지 않을 때를 필터링하려면 **Don't start a build under these conditions(다음 조건에서 빌드를 시작하지 않음)**에서 하나 이상의 선택적 필터를 추가합니다.

   1. 필요한 경우 **필터 그룹 추가**를 선택하여 다른 필터 그룹을 추가합니다.

   Bitbucket webhook 이벤트 유형 및 필터에 대한 자세한 내용은 [Bitbucket Webhook 이벤트](bitbucket-webhook.md) 섹션을 참조하세요.

1. **환경**에서 다음과 같이 합니다.  
**환경 이미지**  
다음 중 하나를 선택합니다.    
다음에서 관리하는 Docker 이미지를 사용하려면 AWS CodeBuild:  
**관리형 이미지**를 선택한 후 **운영 체제**, **런타임**, **이미지** 및 **이미지 버전**에서 옵션을 선택합니다. 사용 가능한 경우 **환경 유형**에서 항목을 선택합니다.  
다른 도커 이미지를 사용하려면:  
**사용자 지정 이미지**를 선택합니다. **환경 유형**에서 **ARM**, **Linux**, **Linux GPU** 또는 **Windows**를 선택합니다. **Other registry(다른 레지스트리)**를 선택한 경우 **External registry URL(외부 레지스트리 URL)**에 Docker Hub의 도커 이미지 이름 및 태그를 `docker repository/docker image name` 형식으로 입력합니다. **Amazon ECR**을 선택하는 경우 **Amazon ECR 리포지토리**와 **Amazon ECR 이미지를** 사용하여 AWS 계정에서 도커 이미지를 선택합니다.  
프라이빗 도커 이미지를 사용하려면:  
**사용자 지정 이미지**를 선택합니다. **환경 유형**에서 **ARM**, **Linux**, **Linux GPU** 또는 **Windows**를 선택합니다. **Image registry(이미지 레지스트리)**에서 **Other registry(다른 레지스트리)**를 선택한 다음 프라이빗 도커 이미지에 대한 보안 인증 정보의 ARN을 입력합니다. 보안 인증은 Secrets Manager에서 생성됩니다. 자세한 내용은 *AWS Secrets Manager 사용 설명서*의 [What Is AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/)를 참조하세요.  
**서비스 역할**  
다음 중 하나를 선택합니다.  
   + CodeBuild 서비스 역할이 없는 경우 **새 서비스 역할**을 선택합니다. **역할 이름**에 새 역할의 이름을 입력합니다.
   + CodeBuild 서비스 역할이 있는 경우 **기존 서비스 역할**을 선택합니다. **역할 ARN**에서 서비스 역할을 선택합니다.
콘솔을 사용하여 빌드 프로젝트를 생성하거나 업데이트하는 경우, 이와 동시에 CodeBuild 서비스 역할을 만들 수 있습니다. 기본적으로 역할은 해당 빌드 프로젝트에서만 작동합니다. 콘솔을 사용하여 이 서비스 역할을 다른 빌드 프로젝트와 연결하는 경우 다른 빌드 프로젝트에서 작동하도록 역할이 업데이트됩니다. 하나의 서비스 역할은 최대 10개의 빌드 프로젝트에서 작동할 수 있습니다.

1. **Buildspec**에서 다음 중 하나를 수행합니다.
   + **buildspec 파일 사용**을 선택하여 소스 코드 루트 디렉터리에 있는 buildspec.yml 파일을 사용합니다.
   + **빌드 명령 삽입**을 선택하여 콘솔에서 빌드 명령을 삽입합니다.

   자세한 내용은 [buildspec 참조](build-spec-ref.md) 단원을 참조하십시오.

1. **결과물**에서 다음과 같이 합니다.  
**유형**  
다음 중 하나를 선택합니다.  
   + 빌드 출력 아티팩트를 생성하지 않으려면 **No artifacts(아티팩트 없음)**를 선택합니다.
   + S3 버킷에 빌드 출력을 저장하려면 **Amazon S3**를 선택하고 다음 작업을 수행합니다.
     + 빌드 출력 ZIP 파일이나 폴더에 프로젝트 이름을 사용하려는 경우 **이름**을 비워 둡니다. 그렇지 않으면 이름을 입력합니다. 기본적으로 결과물 이름은 프로젝트의 이름입니다. 다른 이름을 사용하려면 결과물 이름 상자에 해당 이름을 입력합니다. ZIP 파일을 출력하려면 zip 확장명을 포함시킵니다.
     + [**Bucket name**]에서 출력 버킷의 이름을 선택합니다.
     + 이 절차의 앞부분에서 **빌드 명령 삽입**을 선택한 경우 **출력 파일**에 빌드 출력 ZIP 파일 또는 폴더에 넣으려는 빌드의 파일 위치를 입력합니다. 위치가 여러 개인 경우 각 위치를 쉼표로 구분합니다(예: `appspec.yml, target/my-app.jar`). 자세한 내용은 [buildspec 구문](build-spec-ref.md#build-spec-ref-syntax)의 `files` 설명을 참조하십시오.  
**추가 구성**  
**Additional configuration(추가 구성)**을 확장하고 옵션을 적절하게 설정합니다.

1. **빌드 프로젝트 생성**을 선택합니다. **검토** 페이지에서 **빌드 시작**을 선택하여 빌드를 실행합니다.

## 2단계: Bitbucket 웹후크를 사용하여 빌드 트리거
<a name="sample-bitbucket-pull-request-trigger"></a>

Bitbucket 웹후크를 사용하는 프로젝트의 경우 Bitbucket 리포지토리가 소스 코드의 변경을 감지하면 빌드를 AWS CodeBuild 생성합니다.

1. [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) AWS CodeBuild 콘솔을 엽니다.

1. 탐색 창에서 **빌드 프로젝트**를 선택한 다음 webhook에서 Bitbucket 리포지토리와 연결된 프로젝트를 선택합니다. Bitbucket webhook 프로젝트 생성에 대한 자세한 내용은 [1단계: Bitbucket을 사용하여 빌드 프로젝트 생성 및 웹후크 활성화](#sample-bitbucket-pull-request-create) 섹션을 참조하세요.

1. 프로젝트의 Bitbucket 리포지토리에서 코드를 변경합니다.

1. Bitbucket 리포지토리에서 풀 요청을 생성합니다. 자세한 내용은 [API 요청 생성](https://www.atlassian.com/git/tutorials/making-a-pull-request)을 참조하십시오.

1. Bitbucket Webhook 페이지에서 **View request(요청 보기)**를 선택하여 최신 이벤트 목록을 봅니다.

1. **세부 정보 보기**를 선택하여 CodeBuild에서 반환되는 응답에 대한 세부 정보를 확인합니다. 값이 다음과 같을 것입니다.

   ```
   "response":"Webhook received and build started: https://us-east-1.console.aws.amazon.com/codebuild/home..."
   "statusCode":200
   ```

1. Bitbucket 풀 요청 페이지로 이동하여 빌드 상태를 확인합니다.

# CodeBuild용 GitHub Enterprise Server 샘플 실행
<a name="sample-github-enterprise"></a>

AWS CodeBuild 는 GitHub Enterprise Server를 소스 리포지토리로 지원합니다. 이 샘플에서는 GitHub Enterprise Server 리포지토리에 인증서가 설치되어 있을 때 CodeBuild 프로젝트를 설정하는 방법을 보여 줍니다. 또한 코드 변경이 GitHub Enterprise Server 리포지토리로 푸시될 때마다 CodeBuild가 다시 빌드되도록 Webhook를 활성화하는 방법도 보여줍니다.

**Topics**
+ [사전 조건](#sample-github-enterprise-prerequisites)
+ [1단계: GitHub Enterprise Server를 사용하여 빌드 프로젝트 생성 및 웹후크 활성화](#sample-github-enterprise-running)

## 사전 조건
<a name="sample-github-enterprise-prerequisites"></a>

1. CodeBuild 프로젝트에 대한 개인 액세스 토큰을 생성합니다. GitHub Enterprise 사용자를 생성하고 이 사용자를 위한 개인 액세스 토큰을 생성하는 것이 좋습니다. 이 토큰을 CodeBuild 프로젝트를 생성할 때 사용할 수 있도록 클립보드에 복사합니다. 자세한 내용은 GitHub Help 웹 사이트의 [Creating a personal access token for the command line](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/)을 참조하십시오.

   개인 액세스 토큰을 생성할 때 정의에 **리포지토리** 범위를 포함시킵니다.  
![\[정의의 repo 범위입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/scopes.png)

1. GitHub Enterprise Server에서 인증서를 다운로드합니다. CodeBuild는 인증서를 사용하여 리포지토리에 신뢰할 수 있는 SSL 연결을 만듭니다.

   **Linux/macOS 클라이언트:**

   터미널 창에서 다음 명령을 실행합니다.

   ```
   echo -n | openssl s_client -connect HOST:PORTNUMBER \
       | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /folder/filename.pem
   ```

   명령에서 자리 표시자를 다음 값으로 바꿉니다.

   *HOST*. GitHub Enterprise Server 리포지토리의 IP 주소입니다.

   *PORTNUMBER*. 연결에 사용하는 포트 번호입니다(예: 443).

   *folder*. 인증서를 다운로드한 폴더입니다.

   *filename*. 인증서 파일의 파일 이름입니다.
**중요**  
인증서를 .pem 파일로 저장합니다.

   **Windows 클라이언트:**

   브라우저를 사용하여 GitHub Enterprise Server에서 인증서를 다운로드합니다. 사이트의 인증서 세부 정보를 보려면 자물쇠 아이콘을 선택합니다. 인증서를 내보내는 방법에 대한 자세한 내용은 브라우저 설명서를 참조하십시오.
**중요**  
인증서를 .pem 파일로 저장합니다.

1. S3 버킷으로 인증서 파일을 업로드합니다. S3 버킷을 생성하는 방법에 대한 자세한 내용은 [S3 버킷을 생성하려면 어떻게 해야 합니까?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket.html)를 참조하십시오. S3 버킷으로 객체를 업로드하는 방법에 대한 자세한 내용은 [버킷에 파일 및 폴더를 업로드하려면 어떻게 해야 합니까?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)를 참조하십시오.
**참고**  
이 버킷은 빌드와 동일한 AWS 리전에 있어야 합니다. 예를 들어, CodeBuild가 미국 동부(오하이오) 리전에서 빌드를 실행하도록 명령을 지정하는 경우, 버킷도 미국 동부(오하이오) 리전에 있어야 합니다.

## 1단계: GitHub Enterprise Server를 사용하여 빌드 프로젝트 생성 및 웹후크 활성화
<a name="sample-github-enterprise-running"></a>

1. [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) AWS CodeBuild 콘솔을 엽니다.

1.  CodeBuild 정보 페이지가 나타나면 **빌드 프로젝트 생성**을 선택합니다. 그렇지 않을 경우, 탐색 창에서 **빌드**를 확장한 후 **빌드 프로젝트**를 선택하고 **빌드 프로젝트 생성**을 선택합니다.

1. **프로젝트 이름**에 이 빌드 프로젝트의 이름을 입력합니다. 빌드 프로젝트 이름은 각 AWS 계정에서 고유해야 합니다. 또한 선택에 따라 빌드 프로젝트에 대한 설명을 포함하여 다른 사용자가 이 프로젝트의 용도를 이해하도록 도울 수 있습니다.

1. **소스**의 **소스 공급자**에서 **GitHub Enterprise Server**를 선택합니다.
   + **계정 자격 증명 관리**를 선택한 다음 **개인 액세스 토큰**을 선택합니다. **서비스**에서 **Secrets Manager(권장)**를 선택하고 보안 암호를 구성합니다. 그런 다음 **GitHub Enterprise 개인 액세스 토큰**에서 개인 액세스 토큰을 입력하고 **저장**을 선택합니다.
   + **리포지토리 URL**에 리포지토리 이름을 포함하여 리포지토리에 대한 경로를 입력합니다.
   + **추가 구성**을 확장합니다.
   + 코드 변경이 이 리포지토리로 푸시될 때마다 다시 빌드하려면 **코드 변경이 이 리포지토리로 푸시될 때마다 다시 빌드**를 선택합니다.
   + GitHub Enterprise Server 프로젝트 리포지토리에 연결되어 있는 동안 SSL 경고를 무시하려면 **안전하지 않은 SSL 활성화**를 선택합니다.
**참고**  
**Enable insecure SSL(안전하지 않은 SSL 활성화)**는 테스트 용도로만 사용하는 것이 좋습니다. 프로덕션 환경에 사용하면 안 됩니다.  
![\[GitHub Enterprise Server 프로젝트 리포지토리 구성입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/github-enterprise.png)

1. **환경**에서 다음과 같이 합니다.

   [**Environment image**]에서 다음 중 하나를 수행합니다.
   + 에서 관리하는 도커 이미지를 사용하려면 **관리형 이미지를** AWS CodeBuild선택한 다음 **운영 체제**, **런타임**, **이미지**(Image) 및 **이미지 버전**에서 선택합니다. 사용 가능한 경우 **환경 유형**에서 항목을 선택합니다.
   + 다른 도커 이미지를 사용하려면 **사용자 지정 이미지**를 선택합니다. **환경 유형**에서 **ARM**, **Linux**, **Linux GPU** 또는 **Windows**를 선택합니다. **Other registry(다른 레지스트리)**를 선택한 경우 **External registry URL(외부 레지스트리 URL)**에 Docker Hub의 도커 이미지 이름 및 태그를 `docker repository/docker image name` 형식으로 입력합니다. **Amazon ECR**을 선택하는 경우 **Amazon ECR 리포지토리**와 **Amazon ECR 이미지를** 사용하여 AWS 계정에서 도커 이미지를 선택합니다.
   + 프라이빗 도커 이미지를 사용하려면 **사용자 지정 이미지**를 선택합니다. **환경 유형**에서 **ARM**, **Linux**, **Linux GPU** 또는 **Windows**를 선택합니다. **Image registry(이미지 레지스트리)**에서 **Other registry(다른 레지스트리)**를 선택한 다음 프라이빗 도커 이미지에 대한 보안 인증 정보의 ARN을 입력합니다. 보안 인증은 Secrets Manager에서 생성됩니다. 자세한 내용은 AWS Secrets Manager사용 설명서의 [AWS Secrets Manager 이란?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) 섹션을 참조하세요.**

1. **서비스 역할**에서 다음 중 하나를 수행합니다.
   + CodeBuild 서비스 역할이 없는 경우 **새 서비스 역할**을 선택합니다. **역할 이름**에 새 역할의 이름을 입력합니다.
   + CodeBuild 서비스 역할이 있는 경우 **기존 서비스 역할**을 선택합니다. **역할 ARN**에서 서비스 역할을 선택합니다.
**참고**  
콘솔을 사용하여 빌드 프로젝트를 생성하거나 업데이트하는 경우, 이와 동시에 CodeBuild 서비스 역할을 만들 수 있습니다. 기본적으로 역할은 해당 빌드 프로젝트에서만 작동합니다. 콘솔을 사용하여 이 서비스 역할을 다른 빌드 프로젝트와 연결하는 경우 다른 빌드 프로젝트에서 작동하도록 역할이 업데이트됩니다. 하나의 서비스 역할은 최대 10개의 빌드 프로젝트에서 작동할 수 있습니다.

1. **추가 구성**을 확장합니다.

   CodeBuild를 사용하여 VPC에서 작업을 수행하려는 경우:
   + **VPC**에서 CodeBuild가 사용하는 VPC ID를 선택합니다.
   + **VPC 서브넷**에서 CodeBuild가 사용하는 리소스가 포함된 서브넷을 선택합니다.
   + **VPC 보안 그룹**에서 CodeBuild가 VPC의 리소스에 대한 액세스를 허용하기 위해 사용하는 보안 그룹을 선택합니다.

   자세한 내용은 [Amazon Virtual Private Cloud AWS CodeBuild 와 함께 사용](vpc-support.md) 단원을 참조하십시오.

1. **Buildspec**에서 다음 중 하나를 수행합니다.
   + **buildspec 파일 사용**을 선택하여 소스 코드 루트 디렉터리에 있는 buildspec.yml 파일을 사용합니다.
   + **빌드 명령 삽입**을 선택하여 콘솔에서 빌드 명령을 삽입합니다.

   자세한 내용은 [buildspec 참조](build-spec-ref.md) 단원을 참조하십시오.

1. **결과물**의 **유형**에서 다음 중 하나를 수행합니다.
   + 빌드 출력 아티팩트를 생성하지 않으려면 **No artifacts(아티팩트 없음)**를 선택합니다.
   + S3 버킷에 빌드 출력을 저장하려면 **Amazon S3**를 선택하고 다음 작업을 수행합니다.
     + 빌드 출력 ZIP 파일이나 폴더에 프로젝트 이름을 사용하려는 경우 **이름**을 비워 둡니다. 그렇지 않으면 이름을 입력합니다. 기본적으로 결과물 이름은 프로젝트의 이름입니다. 다른 이름을 사용하려면 결과물 이름 상자에 해당 이름을 입력합니다. ZIP 파일을 출력하려면 zip 확장명을 포함시킵니다.
     + [**Bucket name**]에서 출력 버킷의 이름을 선택합니다.
     + 이 절차의 앞부분에서 **빌드 명령 삽입**을 선택한 경우 **출력 파일**에 빌드 출력 ZIP 파일 또는 폴더에 넣으려는 빌드의 파일 위치를 입력합니다. 위치가 여러 개인 경우 각 위치를 쉼표로 구분합니다(예: `appspec.yml, target/my-app.jar`). 자세한 내용은 [buildspec 구문](build-spec-ref.md#build-spec-ref-syntax)의 `files` 설명을 참조하십시오.

1. **Cache type(캐시 유형)**에서 다음 중 하나를 선택합니다.
   + 캐시를 사용하지 않으려면 [**No cache**]를 선택합니다.
   + Amazon S3 캐시를 사용하려면 **Amazon S3**를 선택하고 다음을 수행합니다.
     + **버킷**에서 캐시가 저장된 S3 버킷의 이름을 선택합니다.
     + (선택 사항) **캐시 경로 접두사**에 Amazon S3 경로 접두사를 입력합니다. **Cache path prefix(캐시 경로 접두사)** 값은 디렉터리 이름과 비슷합니다. 따라서 캐시를 버킷의 동일한 디렉터리에 저장할 수 있습니다.
**중요**  
경로 접두사 끝에 후행 슬래시(/)를 추가하지 마십시오.
   +  로컬 캐시를 사용하려면 **로컬**을 선택한 다음 하나 이상의 로컬 캐시 모드를 선택해야 합니다.
**참고**  
Docker 계층 캐시 모드는 Linux에서만 사용할 수 있습니다. 이 모드를 선택할 경우 프로젝트를 권한이 있는 모드에서 실행해야 합니다.

   캐시를 사용하면 빌드 환경의 재사용 가능한 특정 부분이 캐시에 저장되고 빌드 전반에서 사용되기 때문에 상당한 빌드 시간을 절약할 수 있습니다. buildspec 파일에 캐시를 지정하는 것에 대한 자세한 정보는 [buildspec 구문](build-spec-ref.md#build-spec-ref-syntax) 단원을 참조하십시오. 캐싱에 대한 자세한 정보는 [성능을 개선하기 위한 캐시 빌드](build-caching.md)을 참조하십시오.

1. **빌드 프로젝트 생성**을 선택합니다. 빌드 프로젝트 페이지에서 **빌드 시작**을 선택합니다.

# CodeBuild용 GitHub pull 요청 및 웹후크 필터 샘플 실행
<a name="sample-github-pull-request"></a>

AWS CodeBuild 는 소스 리포지토리가 GitHub인 경우 웹후크를 지원합니다. 즉, 소스 코드가 GitHub 리포지토리에 저장된 CodeBuild 빌드 프로젝트의 경우, Webhook는 코드 변경이 리포지토리에 푸시될 때마다 소스 코드를 다시 빌드하는 데 사용할 수 있습니다. CodeBuild 샘플은 [AWS CodeBuild 샘플](https://github.com/aws-samples/aws-codebuild-samples)을 참조하세요.

**참고**  
Webhook를 사용할 때 사용자가 예상치 못한 빌드를 트리거할 수 있습니다. 이 위험을 줄이려면 [webhook 사용 모범 사례](webhooks.md#webhook-best-practices) 섹션을 참조하세요.

**Topics**
+ [1단계: GitHub로 빌드 프로젝트 생성 및 웹후크 활성화](#sample-github-pull-request-running)
+ [2단계: 웹후크가 활성화되어 있는지 확인](#verification-checks)

## 1단계: GitHub로 빌드 프로젝트 생성 및 웹후크 활성화
<a name="sample-github-pull-request-running"></a>

1. [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) AWS CodeBuild 콘솔을 엽니다.

1.  CodeBuild 정보 페이지가 나타나면 **빌드 프로젝트 생성**을 선택합니다. 그렇지 않을 경우, 탐색 창에서 **빌드**를 확장한 후 **빌드 프로젝트**를 선택하고 **빌드 프로젝트 생성**을 선택합니다.

1. **빌드 프로젝트 생성**을 선택합니다.

1. **프로젝트 구성**에서 다음과 같이 합니다.  
**프로젝트 이름**  
이 빌드 프로젝트의 이름을 입력합니다. 빌드 프로젝트 이름은 각 AWS 계정에서 고유해야 합니다. 또한 선택에 따라 빌드 프로젝트에 대한 설명을 포함하여 다른 사용자가 이 프로젝트의 용도를 이해하도록 도울 수 있습니다.

1. **소스**에서 다음과 같이 합니다.  
**소스 공급자**  
**GitHub**를 선택하세요. GitHub와 연결(다시 연결)하는 지침을 따르고 **승인**을 선택합니다.  
**리포지토리**  
**내 GitHub 계정의 리포지토리**를 선택합니다.  
**GitHub 리포지토리**  
GitHub 리포지토리의 URL을 입력합니다.

1. **기본 소스 webhook 이벤트**에서 다음을 선택합니다.
**참고**  
**기본 소스 webhook 이벤트** 섹션은 이전 단계에서 **내 GitHub 계정의 리포지토리**를 선택한 경우에만 표시됩니다.

   1. 프로젝트를 생성할 때 **코드 변경이 이 리포지토리로 푸시될 때마다 다시 빌드**를 선택합니다.

   1. **이벤트 유형**에서 하나 이상의 이벤트를 선택합니다.

   1. 이벤트가 빌드를 트리거할 때를 필터링하려면 **Start a build under these conditions(다음 조건에서 빌드를 시작)**에서 하나 이상의 선택적 필터를 추가합니다.

   1. 이벤트가 트리거되지 않을 때를 필터링하려면 **Don't start a build under these conditions(다음 조건에서 빌드를 시작하지 않음)**에서 하나 이상의 선택적 필터를 추가합니다.

   1. 필요한 경우 **필터 그룹 추가**를 선택하여 다른 필터 그룹을 추가합니다.

   GitHub Webhook 이벤트 유형 및 필터에 대한 자세한 내용은 [GitHub Webhook 이벤트](github-webhook.md) 섹션을 참조하세요.

1. **환경**에서 다음과 같이 합니다.  
**환경 이미지**  
다음 중 하나를 선택합니다.    
다음에서 관리하는 Docker 이미지를 사용하려면 AWS CodeBuild:  
**관리형 이미지**를 선택한 후 **운영 체제**, **런타임**, **이미지** 및 **이미지 버전**에서 옵션을 선택합니다. 사용 가능한 경우 **환경 유형**에서 항목을 선택합니다.  
다른 도커 이미지를 사용하려면:  
**사용자 지정 이미지**를 선택합니다. **환경 유형**에서 **ARM**, **Linux**, **Linux GPU** 또는 **Windows**를 선택합니다. **Other registry(다른 레지스트리)**를 선택한 경우 **External registry URL(외부 레지스트리 URL)**에 Docker Hub의 도커 이미지 이름 및 태그를 `docker repository/docker image name` 형식으로 입력합니다. **Amazon ECR**을 선택하는 경우 **Amazon ECR 리포지토리** 및 **Amazon ECR 이미지**를 사용하여 AWS 계정의 Docker 이미지를 선택합니다.  
프라이빗 도커 이미지를 사용하려면:  
**사용자 지정 이미지**를 선택합니다. **환경 유형**에서 **ARM**, **Linux**, **Linux GPU** 또는 **Windows**를 선택합니다. **Image registry(이미지 레지스트리)**에서 **Other registry(다른 레지스트리)**를 선택한 다음 프라이빗 도커 이미지에 대한 보안 인증 정보의 ARN을 입력합니다. 보안 인증은 Secrets Manager에서 생성됩니다. 자세한 내용은 *AWS Secrets Manager 사용 설명서*의 [What Is AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/)를 참조하세요.  
**서비스 역할**  
다음 중 하나를 선택합니다.  
   + CodeBuild 서비스 역할이 없는 경우 **새 서비스 역할**을 선택합니다. **역할 이름**에 새 역할의 이름을 입력합니다.
   + CodeBuild 서비스 역할이 있는 경우 **기존 서비스 역할**을 선택합니다. **역할 ARN**에서 서비스 역할을 선택합니다.
콘솔을 사용하여 빌드 프로젝트를 생성하거나 업데이트하는 경우, 이와 동시에 CodeBuild 서비스 역할을 만들 수 있습니다. 기본적으로 역할은 해당 빌드 프로젝트에서만 작동합니다. 콘솔을 사용하여 이 서비스 역할을 다른 빌드 프로젝트와 연결하는 경우 다른 빌드 프로젝트에서 작동하도록 역할이 업데이트됩니다. 하나의 서비스 역할은 최대 10개의 빌드 프로젝트에서 작동할 수 있습니다.

1. **Buildspec**에서 다음 중 하나를 수행합니다.
   + **buildspec 파일 사용**을 선택하여 소스 코드 루트 디렉터리에 있는 buildspec.yml 파일을 사용합니다.
   + **빌드 명령 삽입**을 선택하여 콘솔에서 빌드 명령을 삽입합니다.

   자세한 내용은 [buildspec 참조](build-spec-ref.md) 단원을 참조하십시오.

1. **결과물**에서 다음과 같이 합니다.  
**유형**  
다음 중 하나를 선택합니다.  
   + 빌드 출력 아티팩트를 생성하지 않으려면 **No artifacts(아티팩트 없음)**를 선택합니다.
   + S3 버킷에 빌드 출력을 저장하려면 **Amazon S3**를 선택하고 다음 작업을 수행합니다.
     + 빌드 출력 ZIP 파일이나 폴더에 프로젝트 이름을 사용하려는 경우 **이름**을 비워 둡니다. 그렇지 않으면 이름을 입력합니다. 기본적으로 결과물 이름은 프로젝트의 이름입니다. 다른 이름을 사용하려면 결과물 이름 상자에 해당 이름을 입력합니다. ZIP 파일을 출력하려면 zip 확장명을 포함시킵니다.
     + [**Bucket name**]에서 출력 버킷의 이름을 선택합니다.
     + 이 절차의 앞부분에서 **빌드 명령 삽입**을 선택한 경우 **출력 파일**에 빌드 출력 ZIP 파일 또는 폴더에 넣으려는 빌드의 파일 위치를 입력합니다. 위치가 여러 개인 경우 각 위치를 쉼표로 구분합니다(예: `appspec.yml, target/my-app.jar`). 자세한 내용은 [buildspec 구문](build-spec-ref.md#build-spec-ref-syntax)의 `files` 설명을 참조하십시오.  
**추가 구성**  
**Additional configuration(추가 구성)**을 확장하고 옵션을 적절하게 설정합니다.

1. **빌드 프로젝트 생성**을 선택합니다. **검토** 페이지에서 **빌드 시작**을 선택하여 빌드를 실행합니다.

## 2단계: 웹후크가 활성화되어 있는지 확인
<a name="verification-checks"></a>

1. [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) AWS CodeBuild 콘솔을 엽니다.

1. 탐색 창에서 **프로젝트 빌드**를 선택합니다.

1. 다음 중 하나를 수행하세요.
   + webhook를 검증하려는 빌드 프로젝트의 링크를 선택한 후 **빌드 세부 정보**를 선택합니다.
   + webhook를 검증하려는 빌드 프로젝트 옆에 있는 라디오 버튼을 선택하고 **세부 정보 보기**를 선택한 후 **빌드 세부 정보**를 선택합니다.

1. **기본 소스 webhook 이벤트**에서 **Webhook** URL 링크를 선택합니다.

1. GitHub 리포지토리의 **설정** 페이지에 있는 **웹후크**에서 **Pull 요청** 및 **Push**가 선택되었는지 확인합니다.

1. GitHub 프로필 설정의 **개인 설정**, **애플리케이션**, **승인된 OAuth 앱에서** 선택한 AWS 리전에 액세스할 수 있는 권한이 애플리케이션에 부여되었음을 확인할 수 있습니다.

# 자습서: 인증서 스토리지에 S3를 사용하여 CodeBuild에서 Fastlane을 사용한 Apple 코드 서명
<a name="sample-fastlane"></a>

[fastlane](https://docs.fastlane.tools/)은 iOS 및 Android 앱의 베타 배포 및 릴리스를 자동화하는 오픈 소스 자동화 도구로 널리 사용됩니다. 스크린샷 생성, 코드 서명 처리, 애플리케이션 릴리스와 같은 모든 지루한 작업을 처리합니다.

## 사전 조건
<a name="sample-fastlane-prerequisites"></a>

이 자습서를 완료하려면 먼저 다음과 같은 사전 조건을 설정해야 합니다.
+ 의 경우 AWS 계정
+ [Apple 개발자 계정](https://developer.apple.com/)
+ 인증서를 저장하기 위한 S3 버킷
+ 프로젝트에 설치된 fastlane - fastlane 설치 [가이드](https://docs.fastlane.tools/getting-started/ios/setup/)

## 1단계: 로컬 시스템에서 S3를 사용하여 Fastlane Match 설정
<a name="sample-fastlane-S3"></a>

[Fastlane Match](https://docs.fastlane.tools/actions/match/)는 [Fastlane 도구](https://fastlane.tools/) 중 하나이며 로컬 개발 환경과 CodeBuild 모두에서 코드 서명을 위한 원활한 구성을 지원합니다. Fastlane Match는 모든 코드 서명 인증서와 프로비저닝 프로필을 Git 리포지토리/S3 버킷/Google 클라우드 스토리지에 저장하고, 필요한 경우 필요한 인증서와 프로필을 다운로드하여 설치합니다.

이 예제 구성에서는 Amazon S3 버킷을 설정하고 스토리지에 사용합니다.

****

1. 프로젝트에서 일치 항목 초기화:

   ```
   fastlane match init
   ```

1. 메시지가 표시되면 스토리지 모드로 S3를 선택합니다.

1. S3를 사용하도록 `*Matchfile*`을 업데이트합니다.

   ```
   storage_mode("s3")
      s3_bucket("your-s3-bucket-name")
      s3_region("your-aws-region")
      type("appstore") # The default type, can be: appstore, adhoc, enterprise or development
   ```

## 2단계: Fastfile 설정
<a name="sample-fastlane-S3-fastfile"></a>

다음 경로로 `Fastfile`을 생성하거나 업데이트합니다.

CodeBuild에서는 앱을 빌드하고 서명할 때마다 Fastlane Match를 실행해야 합니다. 이를 수행하는 가장 쉬운 방법은 앱을 빌드하는 경로에 `match` 작업을 추가하는 것입니다.

```
default_platform(:ios)

platform :ios do
  before_all do
    setup_ci
  end
  
  desc "Build and sign the app"
  lane :build do
    match(type: "appstore", readonly: true)
    gym(
      scheme: "YourScheme",
      export_method: "app-store"
    )
  end
end
```

**참고**  
일치 작업이 올바르게 작동하려면 `Fastfile`의 `before_all `섹션에 `setup_ci`를 추가해야 합니다. 이렇게 하면 적절한 권한이 있는 임시 Fastlane 키체인이 사용됩니다. 이를 사용하지 않으면 빌드 실패 또는 일관되지 않은 결과가 표시될 수 있습니다.



## 3단계: `fastlane match` 명령을 실행하여 각 인증서 및 프로필 생성
<a name="sample-fastlane-S3-certificates"></a>

지정된 유형(예: 개발, 앱 스토어, 임시, 엔터프라이즈)에 대한 fastlane match 명령은 원격 스토어에서 사용할 수 없는 경우 인증서와 프로필을 생성합니다. 인증서와 프로필은 fastlane에서 S3에 저장합니다.

```
bundle exec fastlane match appstore
```

명령 실행은 대화식으로 이루어지며 fastlane은 인증서 복호화를 위한 암호 설정을 요청합니다.

## 4단계: 프로젝트에 대한 애플리케이션 파일 생성
<a name="sample-fastlane-S3-appfile"></a>

프로젝트에 적합한 애플리케이션 파일을 생성하거나 추가합니다.

****

1. 프로젝트 빌드 요구 사항에 따라 [Gymfile](http://docs.fastlane.tools/actions/gym/#gymfile), [Appfile](http://docs.fastlane.tools/advanced/Appfile/), [Snapfile](http://docs.fastlane.tools/actions/snapshot/#snapfile), [Deliverfile](http://docs.fastlane.tools/actions/deliver/#editing-the-deliverfile)을 생성하거나 추가합니다.

1. 원격 리포지토리에 변경 사항을 커밋합니다.

## 5단계: Secrets Manager에서 환경 변수 생성
<a name="sample-fastlane-S3-secrets"></a>

fastlane 세션 쿠키 및 일치하는 암호를 저장하기 위한 보안 암호 2개를 생성합니다. Secrets Manager에서 보안 암호를 생성하는 방법에 대한 자세한 내용은 [AWS Secrets Manager 보안 암호 생성](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)을 참조하세요.

****

1. 다음과 같이 fastlane 세션 쿠키에 액세스합니다.

   1. 보안 암호 키 - `FASTLANE_SESSION`

   1. 보안 암호 값 - 로컬 시스템에서 다음 명령을 실행하여 생성된 세션 쿠키입니다.
**참고**  
이 값은 `~/.fastlane/spaceship/my_appleid_username/cookie` 로컬 파일에서 인증 후 사용할 수 있습니다.

      ```
      fastlane spaceauth -u <apple account>
      ```

1. Fastlane Match 암호 - Fastlane Match가 S3 버킷에 저장된 인증서와 프로필을 해독하도록 하려면 일치 설정 단계에서 구성한 암호화 암호를 CodeBuild 프로젝트의 환경 변수에 추가해야 합니다.

   1. 보안 암호 키 - `MATCH_PASSWORD`

   1. 보안 암호 값 - *<암호를 일치시켜 인증서 해독>* 3단계에서 인증서를 생성하는 동안 암호가 설정됩니다.

**참고**  
Secrets Manager에서 위의 보안 암호를 생성할 때는 `/CodeBuild/` 접두사를 사용하여 보안 암호 이름을 지정해야 합니다.

## 6단계: 컴퓨팅 플릿 생성
<a name="sample-fastlane-S3-fleet"></a>

프로젝트의 컴퓨팅 플릿을 생성합니다.

****

1. 콘솔에서 CodeBuild로 이동하여 새 컴퓨팅 플릿을 생성합니다.

1. 'macOS'를 운영 체제로 선택하고 적절한 컴퓨팅 유형과 이미지를 선택합니다.

## 7단계: CodeBuild에서 프로젝트 생성
<a name="sample-fastlane-S3-project"></a>

CodeBuild에서 프로젝트를 생성합니다.



****

1. [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) AWS CodeBuild 콘솔을 엽니다.

1. 빌드 프로젝트를 생성합니다. 자세한 내용은 [빌드 프로젝트 만들기(콘솔)](create-project.md#create-project-console) 및 [빌드 실행(콘솔)](run-build-console.md) 섹션을 참조하세요.

1. 소스 공급자(예: GitHub, CodeCommit)를 설정합니다. 이는 iOS 프로젝트 소스 리포지토리이며 인증서 리포지토리가 아닙니다.

1.  **환경**에서 다음과 같이 합니다.
   + **예약 용량**을 선택합니다.
   + **플릿**에서 위에서 생성한 플릿을 선택합니다.
   + CodeBuild가 자동으로 생성할 서비스 역할의 이름을 입력합니다.
   + 아래 환경 변수를 제공합니다.
     + 이름: `MATCH_PASSWORD`, 값: *<secrets arn>*, 유형: Secrets Manager(MATCH\$1PASSWORD의 경우 5단계에서 생성된 보안 암호 ARN)
     + 이름: `FASTLANE_SESSION`, 값: *<secrets arn>*, 유형: Secrets Manager(FASTLANE\$1SESSION의 경우 5단계에서 생성된 보안 암호 ARN)

1. **Buildspec**에서 다음을 추가합니다.

   ```
   version: 0.2
   
   phases:
     install:
       commands:
         - gem install bundler
         - bundle install
     build:
       commands:
         - echo "Building and signing the app..."
         - bundle exec fastlane build
     post_build:
       commands:
         - echo "Build completed on date"
   
   artifacts:
     files:
       - '*/.ipa'
     name: app-$(date +%Y-%m-%d)
   ```

## 8단계: IAM 역할 구성
<a name="sample-fastlane-S3-role"></a>

프로젝트가 생성되면 CodeBuild 프로젝트의 서비스 역할에 인증서가 포함된 S3 버킷에 액세스할 수 있는 권한이 있는지 확인합니다. 다음 정책을 역할에 추가하세요.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::your-s3-bucket-name"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::your-s3-bucket-name/*"
        }
    ]
}
```

------

## 9단계: 빌드 실행
<a name="sample-fastlane-S3-run"></a>

빌드를 실행합니다. CodeBuild에서 빌드 상태 및 로그를 검토할 수 있습니다.

작업이 완료되면 작업 로그를 볼 수 있습니다.

## 문제 해결
<a name="sample-fastlane-S3-troubleshooting"></a>
+ 인증서 가져오기에 문제가 발생하면 S3 액세스를 위해 IAM 권한이 올바르게 설정되었는지 확인합니다.
+ 인증서 복호화에 문제가 발생하면 MATCH\$1PASSWORD 환경 변수에서 올바른 암호를 설정해야 합니다.
+ 코드 서명 문제의 경우 Apple Developer 계정에 필요한 인증서 및 프로필이 있고 Xcode 프로젝트의 번들 식별자가 프로비저닝 프로필의 번들 식별자와 일치하는지 확인합니다.

## 보안 고려 사항
<a name="sample-fastlane-considerations"></a>

다음은 이 자습서의 보안 고려 사항입니다.
+ S3 버킷에 저장 데이터 암호화를 비롯한 적절한 보안 설정이 있는지 확인합니다. 특히 버킷에 퍼블릭 액세스 권한이 없는지 확인하고 액세스 권한이 필요한 CodeBuild 및 시스템으로만 액세스를 제한합니다.
+ 를 사용하여 MATCH\$1PASSWORD 및 FASTLANE\$1SESSION과 같은 민감한 정보를 AWS Secrets Manager 저장하는 것이 좋습니다.

이 샘플은 인증서 스토리지용 Amazon S3를 통해 CodeBuild에서 Fastlane을 사용하여 iOS 코드 서명을 위한 설정을 제공합니다. 특정 프로젝트 요구 사항 및 CodeBuild 환경에 따라 일부 단계를 조정해야 할 수 있습니다. 이 접근 방식은 AWS 서비스를 활용하여 AWS 에코시스템 내에서 보안 및 통합을 강화합니다.

# 자습서: 인증서 스토리지에 GitHub를 사용하여 CodeBuild에서 Fastlane을 사용한 Apple 코드 서명
<a name="sample-fastlane-github"></a>

[fastlane](https://docs.fastlane.tools/)은 iOS 및 Android 앱의 베타 배포 및 릴리스를 자동화하는 오픈 소스 자동화 도구로 널리 사용됩니다. 스크린샷 생성, 코드 서명 처리, 애플리케이션 릴리스와 같은 모든 지루한 작업을 처리합니다.

이 샘플은 GitHub를 인증서 및 프로비저닝 프로필의 스토리지로 사용하여 Mac 플릿에서 실행되는 CodeBuild 프로젝트에서 Fastlane을 사용하여 Apple 코드 서명을 설정하는 방법을 보여줍니다.

## 사전 조건
<a name="sample-fastlane-github-prerequisites"></a>

이 자습서를 완료하려면 먼저 다음과 같은 사전 조건을 설정해야 합니다.
+ 의 경우 AWS 계정
+ [Apple 개발자 계정](https://developer.apple.com/)
+ 인증서를 저장하기 위한 프라이빗 GitHub 리포지토리
+ 프로젝트에 설치된 fastlane - fastlane 설치 [가이드](https://docs.fastlane.tools/getting-started/ios/setup/)

## 1단계: 로컬 시스템에서 GitHub를 사용하여 Fastlane Match 설정
<a name="sample-fastlane-github-certificates"></a>

[Fastlane Match](https://docs.fastlane.tools/actions/match/)는 [Fastlane 도구](https://fastlane.tools/) 중 하나이며 로컬 개발 환경과 CodeBuild 모두에서 코드 서명을 위한 원활한 구성을 지원합니다. Fastlane Match는 모든 코드 서명 인증서와 프로비저닝 프로필을 Git 리포지토리/S3 버킷/Google 클라우드 스토리지에 저장하고, 필요한 경우 필요한 인증서와 프로필을 다운로드하여 설치합니다.

이 예제 구성에서는 스토리지용 Git 리포지토리를 설정하고 사용합니다.

****

1. 프로젝트에서 일치 항목 초기화:

   ```
   fastlane match init
   ```

1. 메시지가 표시되면 GitHub를 스토리지 모드로 선택합니다.

1. GitHub를 사용하도록 `*Matchfile*`을 업데이트합니다.

   ```
   git_url("https://github.com/your-username/your-certificate-repo.git")
   storage_mode("git")
   type("development") # The default type, can be: appstore, adhoc, enterprise or development
   ```

**참고**  
fastlane이 성공적으로 인증하고 복제할 수 있도록 Git 리포지토리에 HTTPS URL을 입력해야 합니다. 그렇지 않으면 일치 항목을 사용하려고 할 때 인증 오류가 표시될 수 있습니다.

## 2단계: Fastfile 설정
<a name="sample-fastlane-github-fastfile"></a>

다음 경로로 `Fastfile`을 생성하거나 업데이트합니다.

CodeBuild에서는 앱을 빌드하고 서명할 때마다 Fastlane Match를 실행해야 합니다. 이를 수행하는 가장 쉬운 방법은 앱을 빌드하는 경로에 `match` 작업을 추가하는 것입니다.

```
default_platform(:ios)

platform :ios do
  before_all do
    setup_ci
  end
  
  desc "Build and sign the app"
  lane :build do
    match(type: "appstore", readonly: true)
    gym(
      scheme: "YourScheme",
      export_method: "app-store"
    )
  end
end
```

**참고**  
일치 작업이 올바르게 작동하려면 `Fastfile`의 `before_all `섹션에 `setup_ci`를 추가해야 합니다. 이렇게 하면 적절한 권한이 있는 임시 Fastlane 키체인이 사용됩니다. 이를 사용하지 않으면 빌드 실패 또는 일관되지 않은 결과가 표시될 수 있습니다.

## 3단계: `fastlane match` 명령을 실행하여 각 인증서 및 프로필 생성
<a name="sample-fastlane-github-certificates"></a>

지정된 유형(예: 개발, 앱 스토어, 임시, 엔터프라이즈)에 대한 fastlane match 명령은 원격 스토어에서 사용할 수 없는 경우 인증서와 프로필을 생성합니다. 인증서와 프로필은 fastlane에서 GitHub에 저장합니다.

```
bundle exec fastlane match appstore
```

명령 실행은 대화식으로 이루어지며 fastlane은 인증서 복호화를 위한 암호 설정을 요청합니다.

## 4단계: 프로젝트에 대한 애플리케이션 파일 생성
<a name="sample-fastlane-github-appfile"></a>

프로젝트에 적합한 애플리케이션 파일을 생성하거나 추가합니다.

****

1. 프로젝트 빌드 요구 사항에 따라 [Gymfile](http://docs.fastlane.tools/actions/gym/#gymfile), [Appfile](http://docs.fastlane.tools/advanced/Appfile/), [Snapfile](http://docs.fastlane.tools/actions/snapshot/#snapfile), [Deliverfile](http://docs.fastlane.tools/actions/deliver/#editing-the-deliverfile)을 생성하거나 추가합니다.

1. 원격 리포지토리에 변경 사항을 커밋합니다.

## 5단계: Secrets Manager에서 환경 변수 생성
<a name="sample-fastlane-github-secrets"></a>

fastlane 세션 쿠키 및 일치하는 암호를 저장하기 위한 보안 암호 3개를 생성합니다. Secrets Manager에서 보안 암호를 생성하는 방법에 대한 자세한 내용은 [AWS Secrets Manager 보안 암호 생성](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)을 참조하세요.

****

1. 다음과 같이 fastlane 세션 쿠키에 액세스합니다.

   1. 보안 암호 키 - `FASTLANE_SESSION`

   1. 보안 암호 값 - 로컬 시스템에서 다음 명령을 실행하여 생성된 세션 쿠키입니다.
**참고**  
이 값은 `~/.fastlane/spaceship/my_appleid_username/cookie` 로컬 파일에서 인증 후 사용할 수 있습니다.

      ```
      fastlane spaceauth -u <Apple_account>
      ```

1. Fastlane Match 암호 - Fastlane Match가 Git 리포지토리에 저장된 인증서와 프로필을 해독하도록 하려면 일치 설정 단계에서 구성한 암호화 암호를 CodeBuild 프로젝트의 환경 변수에 추가해야 합니다.

   1. 보안 암호 키 - `MATCH_PASSWORD`

   1. 보안 암호 값 - `<match passphrase to decrypt certificates>` 3단계에서 인증서를 생성하는 동안 암호가 설정됩니다.

1. Fastlane `MATCH_GIT_BASIC_AUTHORIZATION` - *일치*에 대한 기본 권한 부여를 설정합니다.

   1. 보안 암호 키: 

      `MATCH_GIT_BASIC_AUTHORIZATION`

   1. 보안 암호 값 - 값은 `username:password` 형식의 사용자 이름 및 개인 액세스 토큰(PAT)의 base64 인코딩 문자열이어야 합니다. 다음 명령을 사용하여 생성할 수 있습니다.

      ```
      echo -n your_github_username:your_personal_access_token | base64
      ```

      GitHub 콘솔의 **프로필 > 설정 > 개발자 설정 > 개인 액세스 토큰**에서 PAT를 생성할 수 있습니다. 자세한 내용은 [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) 가이드를 참조하세요.

**참고**  
Secrets Manager에서 위의 보안 암호를 생성할 때는 `/CodeBuild/` 접두사를 사용하여 보안 암호 이름을 지정해야 합니다.

## 6단계: 컴퓨팅 플릿 생성
<a name="sample-fastlane-github-fleet"></a>

프로젝트의 컴퓨팅 플릿을 생성합니다.

****

1. 콘솔에서 CodeBuild로 이동하여 새 컴퓨팅 플릿을 생성합니다.

1. `macOS`를 운영 체제로 선택하고 적절한 컴퓨팅 유형과 이미지를 선택합니다.

## 7단계: CodeBuild에서 프로젝트 생성
<a name="sample-fastlane-github-project"></a>

CodeBuild에서 프로젝트를 생성합니다.

****

1. [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) AWS CodeBuild 콘솔을 엽니다.

1. 빌드 프로젝트를 생성합니다. 자세한 내용은 [빌드 프로젝트 만들기(콘솔)](create-project.md#create-project-console) 및 [빌드 실행(콘솔)](run-build-console.md) 섹션을 참조하세요.

1. 소스 공급자(예: GitHub, CodeCommit)를 설정합니다. 이는 iOS 프로젝트 소스 리포지토리이며 인증서 리포지토리가 아닙니다.

1.  **환경**에서 다음과 같이 합니다.
   + **예약 용량**을 선택합니다.
   + **플릿**에서 위에서 생성한 플릿을 선택합니다.
   + CodeBuild가 자동으로 생성할 서비스 역할의 이름을 입력합니다.
   + 아래 환경 변수를 제공합니다.
     + 이름: `MATCH_PASSWORD`, 값: *<secrets arn>*, 유형: Secrets Manager(MATCH\$1PASSWORD의 경우 5단계에서 생성된 보안 암호 ARN)
     + 이름: `FASTLANE_SESSION`, 값: *<secrets arn>*, 유형: Secrets Manager(FASTLANE\$1SESSION의 경우 5단계에서 생성된 보안 암호 ARN)
     + 이름: `MATCH_GIT_BASIC_AUTHORIZATION`, 값: *<secrets ARN>*, 유형: Secrets Manager Secrets ARN(`MATCH_GIT_BASIC_AUTHORIZATION`의 경우 5단계에서 생성됨)

1. **Buildspec**에서 다음을 추가합니다.

   ```
   version: 0.2
   
   phases:
     install:
       commands:
         - gem install bundler
         - bundle install
     build:
       commands:
         - echo "Building and signing the app..."
         - bundle exec fastlane build
     post_build:
       commands:
         - echo "Build completed on date"
   
   artifacts:
     files:
       - '*/.ipa'
     name: app-$(date +%Y-%m-%d)
   ```

## 8단계: 빌드 실행
<a name="sample-fastlane-github-run"></a>

빌드를 실행합니다. CodeBuild에서 빌드 상태 및 로그를 검토할 수 있습니다.

작업이 완료되면 작업 로그를 볼 수 있습니다.

## 문제 해결
<a name="sample-fastlane-github-troubleshooting"></a>
+ GitHub 리포지토리에 액세스하는 데 문제가 발생하면 개인 액세스 토큰과 MATCH\$1GIT\$1BASIC\$1AUTHORIZATION 환경 변수를 다시 확인합니다.
+ 인증서 복호화에 문제가 발생하면 MATCH\$1PASSWORD 환경 변수에서 올바른 암호를 설정해야 합니다.
+ 코드 서명 문제의 경우 Apple Developer 계정에 필요한 인증서 및 프로필이 있고 Xcode 프로젝트의 번들 식별자가 프로비저닝 프로필의 번들 식별자와 일치하는지 확인합니다.

## 보안 고려 사항
<a name="sample-fastlane-github-considerations"></a>

다음은 이 자습서의 보안 고려 사항입니다.
+ 인증서용 GitHub 리포지토리를 비공개로 유지하고 액세스를 정기적으로 감사합니다.
+ 를 사용하여 MATCH\$1PASSWORD 및 FASTLANE\$1SESSION과 같은 민감한 정보를 AWS Secrets Manager 저장하는 것이 좋습니다.

이 샘플은 인증서 스토리지용 GitHub를 통해 CodeBuild에서 Fastlane을 사용하여 iOS 코드 서명을 위한 설정을 제공합니다. 특정 프로젝트 요구 사항 및 CodeBuild 환경에 따라 일부 단계를 조정해야 할 수 있습니다. 이 접근 방식은 AWS 서비스를 활용하여 AWS 에코시스템 내에서 보안 및 통합을 강화합니다.