시리즈 순서
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] > 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 |
댓글