1. CI(Continuous Integration)/ CD (Continuous Delivery)
- 지속적인 통합 CI(Continuous Integration)
- 모든 개발자가 개발한 코드를 공유 리포지토리에 하루에도 여러 번 코드를 커밋
하고 병합
하는 것
- 지속적인 전달 CD (Continuous Delivery)
- 개발팀이 짧은 주기로 소프트웨어를 개발하고 언제든지 운영 환경
으로 안정적으로 배포
하는 것
2. AWS에서의 CI/CD flow
3. AWS에서의 CI/CD를 위한 서비스
1. Code Commit
1) Code Commit이란?
- 소스에 대한 형상 관리를 해 주는 서비스로 AWS에서의
깃허브
와 같은 역할이라고 생각하면 된다.
- 클라우드에서 자산을 비공개로 저장하여 관리하는 데 사용한다.
- 기본적으로는 깃허브와 동일하게
push
, pull
, commit
등의 기능이 있고, git
과 동일한 명령어를 사용한다.
2) Code Commit 특징
Code Commit
은 높은 서비스 가용성과 내구성을 제공해서 하드웨어와 소프트웨어를 자체적으로 관리하는 부담을 줄여 준다.
- 클라우드 내에서 서버가 자체적으로 운영되고 있다. ->
git
과의 차이
- 코드를 안전하게 저장할 수 있다.
- 코드에서 공동 작업이 가능하다.
- 이메일을 통해서 자동 알림을 하고, 버전 관리 프로그램을 쉽게 확장할 수 있다.
- AWS가 아니더라도 다른 서비스와 호환이 가능하다.
git
기반의 리포지토리여서 Code Commit
으로 마이그레이션
이 가능하다.
git
의 도구를 모두 사용할 수 있다.
3) Code Commit 사용법
Code Commit
으로 가 리포지토리를 선택해 주면 리포지토리 생성
이라는 버튼이 뜬다.
- 해당 버튼을 누르고
리포지토리
의 정보를 입력해 준 후 생성하면 된다.
git의 리포지토리
와 기능은 동일하지만 Private
하다.
2. Code Build
1) Code Build이란?
- 클라우드 상의 완전 관리형 빌드 서비스
- 소스 코드를 컴파일하고 단위 테스트를 실행한다. 또한 배포 준비가 완료된 아티팩트를 생성한다.
- 자체 빌드 서버를 프로비저닝하거나 관리 및 확장할 필요가 없다. 또한 널리 사용되는 프로그래밍 언어 및 빌드 도구에 맞게 사전 패키지된 빌드 환경을 제공한다.
- 최대 빌드 요청 수에 맞게 자동으로 확장된다.
2) Code Build 작동 방식
Code Pipeline
- Code Build
- CloudWatch Logs
자동화가 된다.
- 해당 목적지의 빌드 서버로 코드를 배포해 주는 역할을
Code Build
가 하게 된다.
3) 빌드 프로젝트 생성
① 새 프로젝트 생성 및 프로젝트 이름 입력, 소스 선택
- 다음과 같이
Code Build
로 접속해 빌드
-> 프로젝트 빌드
로 들어가 빌드 프로젝트 생성
을 눌러 준다.
- 상단에 먼저 프로젝트의 이름을 입력해 준다.
- 소스에서는 소스의 공급자를 선택할 수 있는데 소스 공급자의 종류는 다음과 같다.
- 이때
GitHub
를 선택해 주면 Git 계정
과 연동해 주어야 한다.
- 다음과 같이
Git 계정
과 연동해 주어야 Git 리포지토리
를 가지고 올 수 있기 때문이다.
② 환경 설정
- 다음과 같이
환경 이미지
를 선택해 준다.
운영 체제
를 선택해 주면 그 운영 체제
에 따른 런타임
과 이미지
, 이미지 버전
이 뜨게 된다.
③ 서비스 설정
- 서비스를 설정해 준다. 만약 기존 서비스가 있다면
기존 서비스 역할
을 선택해 주고, 새로운 서비스 역할을 생성해 연결해 주고 싶다면 새 서비스 역할
을 선택해 주면 된다.
④ Buildsped 추가
Build Script
추가가 필요하다.
- 소스 파일에
BuildSpec
이라는 파일을 넣어 Build Script
를 만드는 경우 buildspec 파일 사용
을 선택하면 된다.
- 만약 직접
Build Script
입력을 할 시 빌드 명령 삽입
을 선택해 준다.
- 이때
편집기로 전환
을 누르면 다음과 같이 빌드 명령 예시가 뜨게 된다.
- 해당 위치에
Build Script
를 넣어 주는데 만약 gradlew
을 하게 되면 gradle 명령어
를 해당 영역에 입력하면 된다.
⑤ 아티팩트(Artifact) 추가
- 생성 후 추가해도 무관하다.
- 빌드가 진행된 이후에 배포(Deployment)에서 알아야 될 파라미터라고 생각하면 된다.
AWS Artifact
란 자신에게 해당되는 규정 준수와 관련된 정보를 제공하는 신뢰할 수 있는 중앙 리소스이다.
⑥ 프로젝트 생성
- 이를 통해 프로젝트를 생성한다. 브런치 설정은 추후에 추가도 가능하나 빌드 프로젝트 생성 과정에서도 가능하다.
3. Code Deploy
- EC2 인스턴스, 온프레미스 인스턴스, 서버리스 lambda 함수 또는 ECS로 애플리케이션 배포를 자동화하는 AWS에서 제공하는 배포 서비스이다.
- 다양한 애플리케이션 콘텐츠(예: 코드, 서버리스 AWS Lambda 함수, 웹 및 구성 파일, 패키지, 스크립트, 멀티미디어 파일)를 무제한 배포가 가능하다.
4. Code Pipeline
1) Code Pipeline이란?
- 1, 2, 3번에서 본 서비스들은 따로 동작하지 않는다. 다음 그림과 같이
CodeCommit
, CodeBuild
, CodeDeploy
가 모두 배포를 위한 하나의 파이프라인
이 되며 이것을 AWS Code Pipeline
이라고 부른다.
- 소프트웨어 릴리스 프로세스를 모델링하고 서버를 설정하거나 프로비저닝할 필요성을 줄일 수 있다.
AWS Management Console
또는 AWS command line interface(CLI)
를 사용하여 소프트웨어 릴리스 프로세스 단계를 정의할 수 있다.
- 피드백을 반복하고 각 코드 변경을 테스트해 버그를 포착하는 새로운 기능을 신속하게 릴리스할 수 있다.
- 모든 단계에서 자체 플러그 또는 사전 구축된 플러그인을 사용하여 필요에 맞추어 조정할 수 있다.
- 하나의 프로그램을 위해서는 총 두 개에서 세 개의 파이프라인이 필요하다. 개발을 위한 개발, 테스트를 위한 스테이징, 그리고 최종적으로 실제 사용자가 사용하는 프로덕션 파이프라인이 필요하다. (스테이징은 생략되기도 한다.)
2) Code Pipeline 생성
Code Pipeline
생성 단계는 다음과 같다.
- 먼저
파이프라인
의 이름 및 서비스, 역할을 설정하는 파이프라인 설정
단계를 거친다.
- 이후
Code Commit
에서 해 주었던 소스 스테이지
를 설정해 준다.
Code Build
단계에서 해 주었던 빌드 스테이지
를 설정해 준다.
- 최종적으로
Code Deploy
와 같이 배포 스테이지
를 설정해 준다.
- 이 모든 과정을 검토한 후 하나의
파이프라인
을 생성할 수 있다.