본문 바로가기
[AWS]/CICD

[AWS][CICD] 2. CodeBuild 사용하기

by METAVERSE STORY 2022. 8. 16.
반응형
728x170

 

시리즈 순서

1. CodeCommit 사용하기

2. CodeBuild 사용하기

3. CodeDeploy 사용하기

4.CodePipeline 사용하기 

즉 AWS 서비스를 이용해서 CICD를 구축하는 것이 이번 시리즈의 목표이다. 

 

 

 

AWS CodeBuild란 무엇인가?

AWS CodeBuild는 소스 코드를 컴파일하는 단계부터 테스트 실행 후 소프트웨어 패키지를 개발하여 배포하는 단계까지 마칠 수 있는 완전관리형의 지속적 통합 서비스입니다. CodeBuild를 사용하면 자체 빌드 서버를 프로비저닝, 관리 및 확장할 필요가 없습니다. CodeBuild는 지속적으로 확장되며 여러 빌드를 동시에 처리하기 때문에 빌드가 대기열에서 대기하지 않고 바로 처리됩니다. 사전 패키징된 빌드 환경을 사용하면 신속하게 시작할 수 있으며 혹은 자체 빌드 도구를 사용하는 사용자 지정 빌드 환경을 만들 수 있습니다. CodeBuild에서는 사용한 컴퓨팅 리소스에 대한 분당 요금이 청구됩니다.

 

 

 

1. CodeBuild 구축하기

 

AWS CodeBuild 프로젝트 만들기 클릭 

 

 

프로젝트 이름을 작성한다.

빌드 배지 및 동시 빌드 제한 활성화는 선택하지 않았다. 

 

 

 

그 다음 소스를 추가한다.

소스는 CodeCommit Git, 등을 선택할 수 있다.

나는 AWS 서비스 만으로 CICD를 진행하려고 하기 때문에 AWS CodeCommit을 선택했다.

그 이후 리포지토리를 선택하고 자신이 원하는 브랜치를 선택한다. 

 

 

 

그 이후는 환경 구성이다. 이는 CodeBuild를 호출하여 빌드를 실행할 때 빌드 환경에 대한 정보를 제공해야 하기 때문에 필요하다. 빌드 환경은 CodeBuild를 실행하는데 사용하는 운영체제, 프로그래밍 언어 런타임 및 도구의 조합을 나타냅니다. 

나는 AWS에서 관리하는 이미지 유형을 선택하였다. 

플랫폼 이미지 식별자 정의
Amazon Linux 2 aws/codebuild/amazonlinux2-x86_64-standard:3.0 al2/standard/3.0
Amazon Linux 2 aws/codebuild/amazonlinux2-x86_64-standard:4.0 al2/4.0 4.0 4.0
Amazon Linux 2 aws/codebuild/amazonlinux2-aarch64-standard:1.0 al2/aarch64/standard/1.0
Amazon Linux 2 aws/codebuild/amazonlinux2-aarch64-standard:2.0 al2/2.0 2.0
Ubuntu 18.04 aws/codebuild/standard:4.0 ubuntu/standard/4.0
Ubuntu 20.04 aws/codebuild/standard:5.0 ubuntu/5.0
Ubuntu 22.04 aws/codebuild/standard:6.0 ubuntu/6.0 6.0
Windows 서버 코어 2019 aws/codebuild/windows-base:2019-1.0 해당 사항 없음
Windows 서버 코어 2019 aws/codebuild/windows-base:2019-2.0 해당 사항 없음

AWS에서 제공하는 도커 이미지이다.

Windows Server Core 2019 플랫폼의 기본 이미지는 다음 리전에서만 사용할 수 있습니다.

  • 미국 동부(버지니아 북부)
  • 미국 동부(오하이오)
  • 미국 서부(오레곤)
  • 유럽(아일랜드)

 이렇게 AWS에서 지원하는 이미지가 아니더라도 ECR을 사용하거나 다른 레지스트리를 사용하려면 사용자 지정 이미지를 선택하면 된다. 

 

그 이후 서비스 역할을 생성하여 계정에 서비스에 대한 역할을 생성한다. 

 

 

 

그 이후 Buildspec은 buildspec 파일 사용으로 놔두었다.

이는 Codecommit에 있는 루트 폴더 최상단에 따로 작성을 할 것이기 때문에 파일 사용을 누르고 파일 이름 역시 buildspec.yml이기 때문에 이름을 따로 선택하지 않아도 된다.

그 이후 배치 구성은 기본으로 한 후 넘어갔다. 

 

 

빌드 환경에서 아티펙트는 빌드 출력 결과물을 생성시키는 것이다. S3를 지정할 수 있으며 나는 따로 지정하지 않았다. 그 이후 로그는 S3로그를 선택하여 버킷을 지정해 주었고 경로 접두사에 cache를 지정해서 결과에 대한 로그를 S3에 남기게 한 후 빌드 프로젝트를 생성했다. 

 

 

 

2. buildspec.yml 작성하기 

그 다음 해야 하는 것이 yml을 작성하는 것이다.

위 그림처럼 Code Pipeline을 돌리면 yml 파일이 동작하고 yml파일의 스크립트대로 작동을 하기 때문에 yml 파일 작성이 중요하다. 

 

 

내가 구현하려고 하는 프로세스는

Codecommit을 통해 파일을 올리면 Codebuild를 통해 S3로 파일을 이동시킨다.

그 이후 CodeDeploy를 통해서 S3에 있는 파일을 EC2로 옮기는 것이다.

 

그러므로 buildspec.yml에 작성할 스크립트는 내 Codecommit에 있는 파일을 S3로 옮기는 것이다.

 

먼저 version은 0.2를 권장한다. 

그 이후 빌드 단계별로 원하는 명령을 입력한다. 위와 같이 install, build 뿐만 아니라 pre_build, post_build, artifacts등 다양한 명령이 존재한다.

나는 먼저 install을 통해서 pip 업그레이드 및 awscli를 설치해 두었다. 

aws cli 명령어를 사용하기 위해서 꼭 설치가 필요하므로 install 부분에 awscli를 설치하였다.

그 이후 build를 수행할 명령을 입력했다. echo를 통해서 Build가 시작한 날짜를 출력하였고

aws cp 명령어와 recursive를 통해서 하위에 있는 모든 폴더 및 파일을 S3로 옮길 수 있게 했다. 

 

version: 0.2

# 빌드 단계별로 원하는 명령을 입력합니다.
phases:
  # 빌드 전에 필요한 환경을 설치합니다.
  install:
    commands:
      - aws --version
      - pip install --upgrade pip 
      - pip install --upgrade awscli
  # 빌드를 수행할 명령을 입력합니다.
  build:
    commands:
      - echo Buile Phase >> Build started on `date`
      - aws s3 cp . s3://cicd-example-yang --recursive

 

 

 

 

그 이후 CodeCommit을 진행하는 루트 폴더의 최상위 위치에 buildspec.yml을 위치시킨 후 

git add .

git commit

git push를 진행해 리포지토리로 올려두었다.

 

 

그 이후 다시 CodeBuild로 돌아와 빌드 시작을 눌렀다.

 

 

 

그럼 이런식으로 단계 세부정보가 뜨면서 성공했는지 실패했는지 여부에 대한 기록이 뜨게 된다.

 

 

그렇다면 이런식으로 s3에 파일 및 폴더들이 모두옮겨진 것을 확인할 수 있다.

이 S3 객체를 보면 cache라는 폴더가 존재하는데 이는 CodeBuild를 생성할 때 로그를 S3에 남기기 위해 설정을 했기 때문에 남았다. 

이를 통해서 Codebuild를 통해 CodeCommit에 있는 폴더 및 파일을 S3로 옮기는 과정까지 마쳤다. 

 

 

 

 

참조 사이트

https://walkinpcm.blogspot.com/2019/12/aws-aws-codebuild.html

 

[AWS] AWS CodeBuild를 이용해서 프로젝트 빌드하기

개발 공부를 하면서 정리한 내용을 함께 공유하는 블로그입니다. Share the knowledge, the information for development.

walkinpcm.blogspot.com

 

 

 

 

반응형
그리드형

'[AWS] > CICD' 카테고리의 다른 글

[AWS] CI/CD, Pipeline 세미나 실습  (1) 2022.10.13
[AWS] CICD 시작하기  (0) 2022.10.06
[AWS][CICD] 4. CodePipeline 사용하기  (0) 2022.08.19
[AWS][CICD] 3. CodeDeploy 사용하기  (0) 2022.08.19
[AWS][CICD] 1. AWS CodeCommit 사용하기  (0) 2022.08.09

댓글