2 분 소요

CI / CD

  • CI/CD (Continuous Integration/Continuous Deployment) 는 애플리케이션 개발과 배포 프로세스를 자동화하여 소프트웨어 개발과정을 더욱 효율적으로 만드는 개념입니다.

  • CI는 개발자가 코드 변경 사항을 공유 레포지토리에 자주 통합하는 과정을 의미하며, CD는 코드 변경 사항을 자동으로 테스트, 빌드, 배포하는 과정을 의미합니다.

  • CI/CD 파이프라인은 소프트웨어 개발 단계를 자동화하여 코드의 품질을 유지하고, 버그를 조기에 발견하여 수정할 수 있도록 합니다.

  • 코드 변경이 발생하면 CI 서버가 자동으로 코드를 가져와 빌드하고 테스트를 실행합니다. 테스트가 성공하면 CD 단계에서 애플리케이션을 자동으로 배포합니다.


AWS CodeBuild

  • AWS CodeBuild는 완전 관리형 빌드 서비스로, 소스 코드를 가져와 컴파일, 테스트, 패키징 등의 작업을 자동화하여 소프트웨어 프로젝트를 빌드할 수 있도록 지원합니다.

  • CI/CD (Continuous Integration/Continuous Deployment) 파이프라인에서 핵심적인 역할을 수행하는 도구입니다.

  • AWS CodeBuild는 소스 코드 빌드 및 테스트 프로세스를 자동화하기 위해 사용됩니다.

  • 다양한 프로그래밍 언어와 프레임워크를 지원하며, 소스 코드가 저장된 저장소(예: GitHub, AWS CodeCommit)와 연동하여 소스 코드의 변경 사항을 감지하고 자동으로 빌드 작업을 실행합니다.

  • CodeBuild는 빌드 환경을 사전 구성하여 필요한 의존성 패키지를 설치하고, 빌드 스크립트를 실행하여 컴파일, 테스트, 패키징 등의 작업을 수행합니다.

  • 빌드 과정은 병렬로 실행되어 빠른 결과를 제공하며, 확장성이 뛰어나서 동시에 여러 빌드를 처리할 수 있습니다.

  • CodeBuild는 자체 빌드 환경을 생성하거나, 빌드 환경 이미지를 사용하여 빌드 작업을 실행할 수 있습니다.

  • 이미지는 AWS에서 제공하는 사전 구성된 환경 또는 사용자 지정 Docker 이미지를 선택할 수 있습니다. 이를 통해 빌드 환경을 프로젝트에 맞게 조정할 수 있습니다.


image

AWS CodeBuild 실습

https://github.com/oolralra/awstest 레포지토리를 Fork하여 내 깃허브로 가져온다.

image

image

Code build 과정에서 깃허브에 액세스하려면 토큰 인증이 필요하다.
깃허브에서 토큰을 생성하여 따로 .txt 파일로 저장해둔다. (도큰 키는 다시 열람 불가능)

image

서버 생성에 앞서 Codedeploy가 인스턴스에 접근할 수 있는 권한을 만들기 위해 IAM 으로 이동한다.

image

image

사용 사례 `EC2` 를 선택한다.
`AmazonS3FullAccess` , `AWSCodeDeployFullAccess` 정책을 추가한다.
`EC2CodeDeploy` 라는 역할 이름으로 생성한다.

image

`CodeDeploy` 라는 이름의 EC2 인스턴스를 생성한다.
Amazon Linux 운영 체제 선택 (프리티어)
`all-allow` 라는 보안 그룹을 생성하고 모든 인바운드를 트래픽을 허락한다. (실습을 위함)
# 아마존 리눅스의 경우 사용자가 ec2-user이다. 사용자 이름을 변경하여 SSH로 인스턴스 접근.

yum -y install ruby // ruby로 이루어진 codedeploy-agent를 위해 ruby를 설치한다
wget https://aws-codedeploy-ap-south-1.s3.ap-south-1.amazonaws.com/latest/install // 에이전트 다운로드
chmod +x ./install
./install auto
systemctl enable --now codedeploy-agent
# 코드디플로이는 외부와 통신을 하기때문에 적어도 outbound 트래픽은 허용이 되어야함. =프라이빗 서브넷에 있으면 안되고, 만약 프라이빗서브넷에 둔다면 NAT gateway가 필요함.
yum -y install httpd
systemctl enable --now httpd
curl localhost // verify

image

image

image

image

이제 빌드 및 디플로이 설정을 하면된다. aws의 개발자도구로 이동한다.
내 깃허브 계정을 토큰으로 연결 한 후 몇가지 사항을 체크하여 생성한다.
깃허브 레포지토리에서 buildspec.yml 파일의 correctto8 로 수정한다.

image

빌드가 정상적으로 성공됨을 확인할 수 있다.
`전체 로그 보기`를 통해서 빌드 로그를 상세히 확인할 수 있습니다.

image

이제는 deploy를 설정한다.

image

image

image

배포 그룹을 생성한다.
`AWSCodeDeployRole` 권한을 가진 IAM 역할을 추가한다. 

image

image

`CodeDeploy` 라는 이름의 디플로이를 생성한다.
`test-dg` 라는 deploy 배포 권한을 가진 그룹 이름으로 생성한다.
deploy-agent를 설치했던 EC2 인스턴스를 선택한다.
로드밸런서를 통해 DEPLOY도 가능 하나, 현재 실습은 단일 인스턴스에 배포할 예정이므로 설정하지 않는다.

image

이제 파이프라인을 생성한다.

image

image

image

image

image

먼저 소스인 Github를 선택하고 내 Github아이디와 연결한다.
빌드 공급을 Codebuild 선택, 앞서 만든 test_PJ를 선택한다.
생성했던 `test_app` , `test_dg` 앱과 배치 그룹을 선택하여 파이프라인을 생성합니다.

image

소스, 빌드, 배포 가 성공적으로 이루어지고 파이프라인이 생성됨을 확인할 수 있습니다. 

image

인스턴스의 IP 접속하면 index.html이 확인됩니다.

image

레포지토리에서 index.html에 내용을 추가합니다.

image

파이프라인에서 수정사항을 받아 자동으로 배포되는 것을 확인할 수 있습니다.

실습과제) ec2 인스턴스에 톰캣을 설치하고 appspec.yml 파일을 적절히 수정해서 test.jsp 파일이 배포되도록 해보세요.

<서버주소>:8080/test.jsp

접속했을때 test.jsp 의 파일이 뜨도록. + test.jsp를 수정했을때 수정된 사항이 webhook을 통해 반영되는지도 확인해보세요!

댓글남기기