자습서: 4단계 파이프라인 생성 - AWS CodePipeline

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

자습서: 4단계 파이프라인 생성

이제 자습서: 간단한 파이프라인 생성(S3 버킷) 또는 자습서: 간단한 파이프라인 (CodeCommit리포지토리) 만들기에서 첫 번째 파이프라인을 생성했으므로 더 복잡한 파이프라인 생성을 시작할 수 있습니다. 이 자습서에서는 소스용 GitHub 리포지토리, 프로젝트를 빌드하는 Jenkins 빌드 서버, 빌드된 코드를 스테이징 서버에 배포하는 CodeDeploy 애플리케이션을 사용하는 4단계 파이프라인을 만드는 과정을 안내합니다. 다음 다이어그램은 초기 3단계 파이프라인을 보여줍니다.

소스 작업이 포함된 소스 단계, Jenkins 작업이 포함된 빌드 단계, 배포 작업이 포함된 배포 단계를 보여주는 다이어그램입니다.

파이프라인이 생성된 후 Jenkins도 사용하여 코드를 테스트하는 테스트 작업으로 단계를 추가하도록 이 파이프라인을 편집합니다.

이 파이프라인을 생성하기 전에 필요한 리소스를 구성해야 합니다. 예를 들어, 소스 코드에 GitHub 리포지토리를 사용하려면 먼저 리포지토리를 만들어야 파이프라인에 추가할 수 있습니다. 설정의 일부로 이 자습서에서는 데모용으로 EC2 인스턴스에서 Jenkins의 설정에 대해 안내합니다.

중요

이 프로시저에서 파이프라인에 추가하는 대부분의 작업에는 파이프라인을 생성하기 전에 생성해야 하는 AWS 리소스가 포함됩니다. AWS 소스 액션의 리소스는 항상 파이프라인을 생성한 AWS 지역과 동일한 지역에 생성해야 합니다. 예를 들어 미국 동부 (오하이오) 지역에서 파이프라인을 생성하는 경우 CodeCommit 리포지토리는 미국 동부 (오하이오) 지역에 있어야 합니다.

파이프라인을 생성할 때 지역 간 작업을 추가할 수 있습니다. AWS 지역 간 작업을 위한 리소스는 작업을 실행하려는 AWS 지역과 동일한 지역에 있어야 합니다. 자세한 정보는 에 지역 간 액션 추가 CodePipeline을 참조하세요.

이 자습서를 시작하기 전에 시작하기 CodePipeline의 일반적인 사전 조건을 이미 완료했어야 합니다.

1단계: 사전 조건 완료

Jenkins와 AWS CodePipeline 통합하려면 함께 사용하려는 모든 Jenkins 인스턴스에 Jenkins용 CodePipeline 플러그인을 설치해야 합니다. CodePipeline 또한 Jenkins 프로젝트와 간의 권한에 사용할 전용 IAM 사용자 또는 역할을 구성해야 합니다. CodePipeline Jenkins를 통합하는 가장 쉬운 방법은 Jenkins 통합을 위해 생성한 IAM 인스턴스 역할을 사용하는 EC2 인스턴스에 Jenkins를 설치하는 것입니다. CodePipeline Jenkins 작업에 대한 파이프라인의 링크가 성공적으로 연결되려면 Jenkins 프로젝트에서 사용된 포트에 대한 인바운드 연결을 허용하도록 서버 또는 EC2 인스턴스에 프록시 및 방화벽 설정을 구성해야 합니다. 해당 포트(예: HTTPS 연결만 사용하기 위해 Jenkins를 보호한 경우 443 및 8443 또는 HTTP 연결을 허용한 경우 80 및 8080)에 대한 연결을 허용하기 전에 액세스 제어를 적용하고 사용자를 인증하도록 Jenkins를 구성했는지 확인합니다. 자세한 내용은 Jenkins 보호를 참조하십시오.

참고

이 자습서에서는 코드 샘플을 사용하고 샘플을 Haml에서 HTML로 변환하는 빌드 단계를 구성합니다. 의 단계에 따라 GitHub 리포지토리에서 오픈 소스 샘플 코드를 다운로드할 수 있습니다. 샘플을 리포지토리에 복사 또는 복제합니다. GitHub .zip 파일뿐만 아니라 GitHub 리포지토리의 전체 샘플이 필요합니다.

이 자습서는 다음 사항도 가정합니다.

  • Jenkins를 설치 및 관리하고 Jenkins 프로젝트를 생성하는 데 익숙합니다.

  • Jenkins 프로젝트를 호스팅하는 동일한 컴퓨터나 인스턴스에 Rake 및 Haml gem for Ruby를 설치했습니다.

  • Rake 명령을 터미널이나 명령줄에서 실행할 수 있도록 필요한 시스템 환경 변수를 설정했습니다(예: Windows 시스템의 경우 Rake를 설치한 디렉터리를 포함하도록 PATH 변수 수정).

샘플을 리포지토리에 복사 또는 복제합니다. GitHub

샘플을 복제하고 GitHub 리포지토리로 푸시하려면
  1. GitHub 리포지토리에서 샘플 코드를 다운로드하거나 리포지토리를 로컬 컴퓨터에 복제합니다. 다음과 같은 두 가지 샘플 패키지가 있습니다.

  2. 리포지토리에서, [Fork]를 선택하여 샘플 리포지토리를 Github 계정의 리포지토리에 복제합니다. 자세한 내용은 설명서를 참조하십시오. GitHub

Jenkins 통합에 사용할 IAM 역할 생성

가장 좋은 방법은 Jenkins 서버를 호스팅할 EC2 인스턴스를 시작하고 IAM 역할을 사용하여 인스턴스에 상호 작용에 필요한 권한을 부여하는 것입니다. CodePipeline

  1. AWS Management Console 로그인하고 https://console.aws.amazon.com/iam/ 에서 IAM 콘솔을 엽니다.

  2. IAM 콘솔의 탐색 창에서 역할을 선택한 후 역할 생성을 선택합니다.

  3. 신뢰할 수 있는 유형의 엔터티 선택에서 AWS 서비스(을)를 선택합니다. Choose the service that will use this role(이 역할을 사용할 서비스 선택) 아래에서 EC2를 선택합니다. Select your use case(사용 사례 선택) 아래에서 EC2를 선택합니다.

  4. 다음: 권한을 선택합니다. Attach permissions policies(권한 정책 연결) 페이지에서 AWSCodePipelineCustomActionAccess 관리형 정책을 선택한 다음, Next: Tags(다음: 태그)를 선택합니다. 다음: 검토를 선택합니다.

  5. 검토 페이지의 역할 이름에 Jenkins 통합을 위해 특별히 생성할 역할 이름 (예: JenkinsAccess) 을 입력한 다음 역할 생성을 선택합니다.

Jenkins를 설치할 EC2 인스턴스를 생성할 때는 3단계: 인스턴스 세부 정보 구성에서 인스턴스 역할 (예:) 을 선택해야 합니다. JenkinsAccess

인스턴스 역할 및 Amazon EC2에 대한 자세한 내용은 Amazon EC2의 IAM 역할, IAM 역할을 사용하여 Amazon EC2 인스턴스에서 실행 중인 애플리케이션에 대한 권한 부여, AWS 서비스에 대한 권한을 위임할 역할 생성을 참조하세요.

Jenkins와 Jenkins용 플러그인 설치 및 구성 CodePipeline

젠킨스와 젠킨스용 플러그인을 설치하려면 CodePipeline
  1. Jenkins를 설치할 EC2 인스턴스를 생성하고 3단계: 인스턴스 세부 정보 구성에서 생성한 인스턴스 역할 (예:) 을 선택했는지 확인합니다. JenkinsAccess EC2 인스턴스 생성에 대한 자세한 내용은 Amazon EC2 사용 설명서의 Amazon EC2 인스턴스 시작하기를 참조하세요.

    참고

    사용할 Jenkins 리소스가 이미 있는 경우, 이 리소스를 사용할 수 있지만, 특정 IAM 사용자를 생성하고, AWSCodePipelineCustomActionAccess 관리형 정책을 이 사용자에게 적용한 다음, Jenkins 리소스의 해당 사용자에 대한 액세스 자격 증명을 구성하고 사용해야 합니다. Jenkins UI를 사용하여 자격 증명을 공급하려면 HTTPS만 허용하도록 Jenkins를 구성합니다. 자세한 정보는 문제 해결 CodePipeline을 참조하세요.

  2. EC2 인스턴스에 Jenkins를 설치합니다. 자세한 내용은 Jenkins 설치Jenkins 시작 및 액세스제품 및 서비스 통합 CodePipelinedetails of integration with Jenkins에 대한 Jenkins 설명서를 참조하십시오.

  3. Jenkins를 시작하고 홈 페이지에서 [Manage Jenkins]를 선택합니다.

  4. [Manage Jenkins] 페이지에서 [Manage Plugins]를 선택합니다.

  5. [Available] 탭을 선택하고, [Filter] 검색 상자에서, AWS CodePipeline을 입력합니다. 목록에서 Jenkins용 CodePipeline 플러그인을 선택하고 지금 다운로드를 선택하고 재시작 후 설치를 선택합니다.

  6. [Installing Plugins/Upgrades] 페이지에서 [Restart Jenkins when installation is complete and no jobs are running]을 선택합니다.

  7. [Back to Dashboard]를 선택합니다.

  8. 기본 페이지에서 [New Item]을 선택합니다.

  9. 항목 이름에 Jenkins 프로젝트의 이름 (예:) 을 입력합니다. MyDemoProject [Freestyle project]를 선택한 다음, [OK]를 선택합니다.

    참고

    프로젝트 이름이 요구 사항을 충족하는지 확인하세요. CodePipeline 자세한 정보는 할당량 입력 AWS CodePipeline을 참조하세요.

  10. 프로젝트의 구성 페이지에서 [Execute concurrent builds if necessary] 확인란을 선택합니다. [Source Code Management]에서, [AWS CodePipeline]를 선택합니다. EC2 인스턴스에 Jenkins를 설치하고 와 Jenkins 간의 CodePipeline 통합을 위해 생성한 IAM 사용자의 AWS CLI 프로필로 구성한 경우 다른 필드는 모두 비워 두십시오.

  11. [Advanced] 를 선택하고 Provider에 표시되는 작업 제공자의 이름을 입력합니다 CodePipeline (예:). MyJenkinsProviderName 이 이름은 고유해야 하며 기억하기 쉬워야 합니다. 이 자습서 후반부에 파이프라인에 빌드 작업을 추가할 때 및 테스트 작업을 추가할 때 이 이름을 사용할 것입니다.

    참고

    이 작업 이름은 의 작업에 대한 이름 지정 요구 사항을 충족해야 합니다. CodePipeline 자세한 정보는 할당량 입력 AWS CodePipeline을 참조하세요.

  12. [Build Triggers]에서 모든 상자의 선택을 취소한 다음 [Poll SCM]을 선택합니다. [Schedule]에서 다음과 같이 5개의 별표를 공백으로 구분하여 입력합니다.

    * * * * *

    이 투표는 CodePipeline 1분마다 실시됩니다.

  13. [Build]에서 [Add build step]을 선택합니다. 쉘 실행(Amazon Linux, RHEL 또는 Ubuntu Server) 배치 명령 실행(Windows Server)을 선택하고 다음을 입력합니다.

    rake
    참고

    rake를 실행하는 데 필요한 변수 및 설정을 사용하여 환경을 구성해야 합니다. 그렇지 않으면 빌드가 실패합니다.

  14. 빌드 후 작업 추가를 선택한 다음 게시자를 선택합니다AWS CodePipeline . [Add]를 선택한 다음, [Build Output Locations]에서 위치를 비워 둡니다. 이 구성이 기본 구성입니다. 이렇게 하면 빌드 프로세스 마지막에 압축된 파일이 생성됩니다.

  15. [Save]를 선택하여 Jenkins 프로젝트를 저장합니다.

2단계: 파이프라인 생성 CodePipeline

자습서의 이 부분에서는 Create Pipeline 마법사를 사용하여 파이프라인을 생성합니다.

CodePipeline 자동 릴리스 프로세스를 만들려면
  1. http://console.aws.amazon.com/codesuite/codepipeline/home 에서 AWS Management Console 로그인하고 CodePipeline 콘솔을 엽니다.

  2. 필요하면, 리전 선택기를 사용하여 파이프라인 리소스가 위치하는 리전으로 리전을 변경합니다. 예를 들어 이전 자습서에서 us-east-2에 리소스를 만든 경우 리전 선택기가 미국 동부(오하이오)로 설정되어야 합니다.

    사용 가능한 지역 및 엔드포인트에 대한 자세한 내용은 AWS CodePipeline 엔드포인트 및 할당량을 참조하십시오. CodePipeline

  3. [Welcome] 페이지, [Getting started] 페이지 또는 [Pipelines] 페이지에서 Create pipeline(파이프라인 생성)을 선택합니다.

  4. 1단계: 파이프라인 설정 선택 페이지의 파이프라인 이름에 파이프라인 이름을 입력합니다.

  5. 파이프라인 유형에서 이 자습서의 목적에 맞는 V1을 선택합니다. V2를 선택할 수도 있지만 파이프라인 유형별 특성과 가격이 다르다는 점에 유의하십시오. 자세한 정보는 파이프라인 유형을 참조하세요.

  6. 서비스 역할에서 새 서비스 역할을 선택하면 IAM에서 서비스 역할을 생성할 수 CodePipeline 있습니다.

  7. [Advanced settings]의 설정은 기본값 그대로 두고, [Next]를 선택합니다.

  8. 2단계: 소스 단계 추가 페이지의 소스 공급자에서 선택합니다 GitHub.

  9. 연결에서 기존 연결을 선택하거나 새로 생성합니다. GitHub 소스 작업에 대한 연결을 만들거나 관리하려면 을 참조하십시오GitHub 연결.

  10. Step 3: Add build stage(단계 3: 빌드 단계 추가)에서 Jenkins 추가를 선택합니다. 제공자 이름에 Jenkins용 CodePipeline 플러그인에서 제공한 작업의 이름 (예: MyJenkinsProviderName) 을 입력합니다. 이 이름은 Jenkins용 CodePipeline 플러그인의 이름과 정확히 일치해야 합니다. [Server URL]에서 Jenkins가 설치된 EC2 인스턴스의 URL을 입력합니다. 프로젝트 이름에 Jenkins에서 만든 프로젝트의 이름 (예 MyDemoProject:) 을 입력하고 다음을 선택합니다.

  11. 4단계: 배포 단계 추가에서 에서 만든 CodeDeploy 애플리케이션과 배포 그룹을 다시 사용합니다. 자습서: 간단한 파이프라인 생성(S3 버킷) Deploy provider(배포 공급자)에서 CodeDeploy를 선택합니다. 애플리케이션 이름CodePipelineDemoApplication을 입력하거나 새로 고침 버튼을 선택한 다음, 목록에서 애플리케이션 이름을 선택합니다. 배포 그룹에서 CodePipelineDemoFleet을 입력하거나, 목록에서 이를 선택한 후 다음을 선택합니다.

    참고

    자체 리소스를 사용하거나 새 CodeDeploy 리소스를 만들 수 있지만 추가 비용이 발생할 수 있습니다.

  12. 5단계: 검토에서 정보를 검토한 다음, 파이프라인 생성을 선택합니다.

  13. 파이프라인이 자동으로 시작되고 파이프라인을 통해 샘플이 실행됩니다. 파이프라인이 Haml 샘플을 HTML로 빌드하고 배포 시 각 Amazon EC2 인스턴스에 웹 페이지로 배포할 때 진행 상황과 성공 및 실패 메시지를 볼 수 있습니다. CodeDeploy

3단계: 파이프라인에 다른 단계 추가

이제 테스트 단계를 추가한 다음 샘플에 포함된 Jenkins 테스트를 사용하는 해당 단계에 테스트 작업을 추가하여 웹 페이지에 콘텐츠가 있는지 여부를 확인합니다. 이 테스트는 데모용일 뿐입니다.

참고

파이프라인에 다른 단계를 추가하지 않은 경우 배포 작업의 이전이나 이후에 파이프라인의 스테이징 단계에 테스트 작업을 추가할 수 있습니다.

파이프라인에 테스트 단계 추가

인스턴스의 IP 주소 조회

코드를 배포한 인스턴스의 IP 주소를 확인하려면
  1. 파이프라인 상태가 [Succeeded]로 표시되면 스테이징 단계의 상태 영역에서 [Details]를 선택합니다.

  2. [Deployment Details] 섹션의 [Instance ID]에서 성공적으로 배포한 인스턴스 중 하나의 인스턴스 ID를 선택합니다.

  3. 인스턴스의 IP 주소를 복사합니다(예: 192.168.0.4). Jenkins 테스트에서 이 IP 주소를 사용할 것입니다.

배포 테스트를 위해 Jenkins 프로젝트 생성

Jenkins 프로젝트를 만들려면
  1. Jenkins를 설치한 인스턴스에서, Jenkins를 열고 기본 페이지에서 [New Item]을 선택합니다.

  2. 항목 이름에 Jenkins 프로젝트의 이름 (예:) 을 입력합니다. MyTestProject [Freestyle project]를 선택한 다음, [OK]를 선택합니다.

    참고

    프로젝트 이름이 CodePipeline 요구 사항을 충족하는지 확인하세요. 자세한 정보는 할당량 입력 AWS CodePipeline을 참조하세요.

  3. 프로젝트의 구성 페이지에서 [Execute concurrent builds if necessary] 확인란을 선택합니다. [Source Code Management]에서, [AWS CodePipeline]를 선택합니다. EC2 인스턴스에 Jenkins를 설치하고 Jenkins와 Jenkins 간의 CodePipeline 통합을 위해 생성한 IAM 사용자의 AWS CLI 프로필로 구성한 경우 다른 필드는 모두 비워 두십시오.

    중요

    Jenkins 프로젝트를 구성하고 있고 Amazon EC2 인스턴스에 설치되지 않았거나 Windows 운영 체제를 실행하는 EC2 인스턴스에 설치한 경우, 프록시 호스트 및 포트 설정에 필요한 필드를 작성하고 Jenkins와 (과) 간의 통합을 위해 구성한 IAM 사용자 또는 역할의 자격 증명을 제공하십시오. CodePipeline

  4. [Advanced]를 선택하고, [Category]에서 [Test]를 선택합니다.

  5. 공급자에 빌드 프로젝트에 사용한 것과 동일한 이름 (예:) 을 입력합니다. MyJenkinsProviderName 이 이름은 이 자습서의 후반부에서 파이프라인에 테스트 작업을 추가할 때 사용됩니다.

    참고

    이 이름은 작업에 필요한 CodePipeline 이름 지정 요구 사항을 충족해야 합니다. 자세한 정보는 할당량 입력 AWS CodePipeline을 참조하세요.

  6. [Build Triggers]에서 모든 상자의 선택을 취소한 다음 [Poll SCM]을 선택합니다. [Schedule]에서 다음과 같이 5개의 별표를 공백으로 구분하여 입력합니다.

    * * * * *

    이 투표는 CodePipeline 1분마다 실시됩니다.

  7. [Build]에서 [Add build step]을 선택합니다. Amazon Linux, RHEL 또는 Ubuntu Server 인스턴스에 배포하는 경우 쉘 실행을 선택합니다. 그런 다음 다음을 입력합니다. 여기서 IP 주소는 이전에 복사한 EC2 인스턴스의 주소입니다.

    TEST_IP_ADDRESS=192.168.0.4 rake test

    Windows Server 인스턴스를 배포하는 경우 배치 명령 실행을 선택한 후 다음을 입력합니다. 여기서, IP 주소는 앞에서 복사한 EC2 인스턴스의 주소입니다.

    set TEST_IP_ADDRESS=192.168.0.4 rake test
    참고

    테스트에서는 포트 번호를 기본값인 80으로 간주합니다. 다른 포트를 지정하려면 다음과 같이 테스트 포트 설명문을 추가합니다.

    TEST_IP_ADDRESS=192.168.0.4 TEST_PORT=8000 rake test
  8. 빌드 후 작업 추가를 선택한 다음 게시자를 선택합니다AWS CodePipeline . [Add]는 선택하지 마십시오.

  9. [Save]를 선택하여 Jenkins 프로젝트를 저장합니다.

네 번째 단계 생성

Jenkins 테스트 작업을 포함하는 파이프라인에 단계를 추가하려면
  1. 에 AWS Management Console 로그인하고 http://console.aws.amazon.com/codesuite/codepipeline/home 에서 CodePipeline 콘솔을 엽니다.

  2. 이름에서 생성한 파이프라인의 이름을 선택합니다 MySecondPipeline.

  3. 파이프라인 세부 정보 페이지에서 [Edit]를 선택합니다.

  4. [Edit] 페이지에서 [+ Stage]를 선택하여 빌드 단계 바로 다음에 단계를 추가합니다.

  5. 새 단계의 이름 필드에 이름(예: Testing)을 입력한 다음, + Add action group(+ 작업 그룹 추가)을 선택합니다.

  6. 작업 이름에 MyJenkinsTest -Action을 입력합니다. 테스트 제공자에서 Jenkins에서 지정한 제공자 이름 (예:) 을 선택합니다. MyJenkinsProviderName 프로젝트 이름에 Jenkins에서 만든 프로젝트의 이름 (예:) 을 입력합니다. MyTestProject 입력 아티팩트에서 기본 이름이 인 Jenkins 빌드의 아티팩트를 선택한 다음 완료를 BuildArtifact선택합니다.

    참고

    Jenkins 테스트 작업은 Jenkins 빌드 단계에서 빌드된 애플리케이션에서 실행되므로 이 테스트 작업에 대한 입력 아티팩트에 빌드 아티팩트를 사용하십시오.

    입력 및 출력 아티팩트 및 파이프라인의 구조에 대한 자세한 내용은 CodePipeline 파이프라인 구조 참조 단원을 참조하십시오.

  7. [Edit] 페이지에서 [Save pipeline changes]를 선택합니다. [Save pipeline changes] 대화 상자에서 [Save and continue]를 선택합니다.

  8. 새로운 단계가 파이프라인에 추가되었더라도 변경 사항에 의해 파이프라인이 다시 실행되도록 트리거되지 않았으므로 해당 단계의 상태가 [No executions yet]으로 표시됩니다. 개정된 파이프라인을 통해 샘플을 실행하려면 파이프라인 세부 정보 페이지에서 변경 사항 릴리스를 선택합니다.

    파이프라인 보기에 파이프라인의 상태 및 작업과 해당 네 단계를 통해 실행되는 개정 상태가 표시됩니다. 파이프라인이 모든 단계를 통해 실행되는 데 걸리는 시간은 아티팩트의 크기, 빌드 및 테스트 작업의 복잡성, 그리고 기타 요인에 따라 달라집니다.

4단계: 리소스 정리

이 자습서를 완료한 후에는 사용한 파이프라인과 리소스를 삭제해야 이 리소스를 계속 사용할 경우 부과되는 요금을 피할 수 있습니다. 계속 사용하지 않으려면 파이프라인 CodePipeline, CodeDeploy 애플리케이션 및 관련 Amazon EC2 인스턴스, 마지막으로 아티팩트를 저장하는 데 사용된 Amazon S3 버킷을 삭제하십시오. GitHub 리포지토리와 같은 다른 리소스를 계속 사용하지 않으려면 해당 리소스를 삭제할지 여부도 고려해야 합니다.

이 자습서에서 사용한 리소스를 정리하려면
  1. 로컬 Linux, macOS 또는 Unix 머신에서 터미널 세션을 열거나 로컬 Windows 머신에서 명령 프롬프트를 열고, delete-pipeline 명령을 실행하여 생성한 파이프라인을 삭제합니다. MySecondPipeline의 경우, 다음 명령을 입력합니다.

    aws codepipeline delete-pipeline --name "MySecondPipeline"

    이 명령은 아무 것도 반환하지 않습니다.

  2. CodeDeploy 리소스를 정리하려면 정리의 지침을 따르세요.

  3. 인스턴스 리소스를 정리하려면 Jenkins를 설치한 EC2 인스턴스를 삭제합니다. 자세한 내용은 인스턴스 정리를 참조하십시오.

  4. 파이프라인을 더 생성하거나 CodePipeline 다시 사용하지 않으려는 경우 파이프라인의 아티팩트를 저장하는 데 사용되는 Amazon S3 버킷을 삭제하십시오. 버킷을 삭제하려면 버킷 삭제의 지침을 따릅니다.

  5. 이 파이프라인에 다른 리소스를 다시 사용하지 않으려는 경우, 해당 특정 리소스에 대한 지침을 따라 이를 삭제하는 것을 고려하십시오. 예를 들어 리포지토리를 삭제하려면 GitHub 웹 사이트에서 리포지토리 삭제의 지침을 따르십시오. GitHub