반응형

 

지난 번에 코드를 ECS Fargate로 배포하는 CI/CD pipeline을 구축했다.

이번에는 ECS Fargate가 아닌, EC2로 배포하는 CI/CD pipeline 구축을 정리해볼 예정이다.

(EC2를 사용하는 곳이 종종 있기 때문이다.)

 

1. CodeBuild 설정: 이번 포스팅

2. Codedeploy 설정

3. EC2 Ubuntu 설정

 

먼저, Codepipeline의 Source까지는 모두 이전 ecs cicd pipeline 포스팅과 동일하므로 생략한다.

* 이전 포스팅: https://countrymouse.tistory.com/entry/awscicd2

 

[AWS] CI/CD pipeline 구축 1. Bitbucket <-> Slack 연동

CI/CD 구축을 위한 단계 0. ECS fargate 생성 (Cluster, Service, task-definition, task) 1-1. Bitbucket에 코드 업로드 (git) 1-2. Bitbucket slack 연동 (PR 알람 노티를 위함) 2. Bitbucket AWS API Gateway..

countrymouse.tistory.com

 

그럼, Codebuild부터 시작해보자.

Codebuild는 별도 메뉴에서 생성하지 않았고, codepipeline를 만들 때 생성했다. (아래 프로젝트 생성)

입력아티팩트는, codepipeline의 source인 s3의 출력아티팩트 값과 동일해야 한다. 

codepipeline의 source부분의 '출력아티팩트'는 'SourceArtifact'로 설정되어 있다.

그리고, 출력아티팩트(BuildArtifact)는 이후 CodeDeploy의 입력아티팩트가 된다.

 

빌드에 사용할 소스와 빌드를 통해 산출되는 아티팩트는 각각 s3의 jane-bucket2에 저장된다.

그리고, build하는 데에 사용되는 buildspec.yml이 필요하다.

 

 

buildspec에는 code deploy에서 배포할 환경이 ubuntu이므로 별도의 docker 작업은 포함되지 않고

n 16.14.0 환경에서 빌드를 수행하게 도와준다.

  • n 은 우분투의 node.js 버전관리 플러그인

 

node_modules

그리고, 소스코드에선 node_modules를 포함하지 않았는데(무거워지니까), codebuild에서 npm install을 통해

코드 실행에 필요한 node_modules들을 생성시켜 준다.

Artifacts

그리고, 해당 빌드를 통해 저장할 파일들을 artifacts: files:에 넣어주는데, 보통 '**/*'로 전체를 artifacts(결과물)로 만들어준다.

(이 artifacts는 codebuild에 있었던 출력아티팩트 저장 위치(s3:jane-bucket2/jane-codepipeline7/BuildAritf/~에 업로드 된다.)

 

Cache

앞으로 해당 코드를 또 수행할 경우, cache를 해 두면 빌드 시간이 굉장히 줄어든다. 그래서 캐시를 전체를 설정한다.

version: 0.2

phases:
install:
commands:
- n 16.14.0
- echo Build starting on `date`
- node --version
build:
commands:
- npm install
- pwd
artifacts:
files:
- '**/*'
cache:
path:
- '**/*'
 

 

buildspec.yml은 다른 코드들과 동일하게 git에 같이 올려서(가장 상위 디렉토리에),

git pr merge가 발생할 때마다 api gateway -> lambda -> s3 를 통해 codebuild가 수행하며 사용된다.

 

다음 포스팅은 상당히 애 먹었던 codedeploy다.

반응형

+ Recent posts