AWS Codebuild로 자동 빌드 구축
08 Mar 2018AWS S3로 정적 웹 호스팅을 시작했지만 매번 블로그 글을 쓸 때마다 빌드해서 손으로 옮기는건 매우 귀찮은 일이다. 따라서 github에 push 할 때마다 자동으로 빌드하여 배포가 되도록한다. AWS의 codebuild 서비스를 사용할 것이다.
빌드 프로젝트 생성
먼저 AWS 콘솔에 로그인하여 codebuild에 들어간 후 프로젝트를 만든다.
아래와 같이 내용을 채워 넣는다.
1. 프로젝트 구성
- 프로젝트 이름 : 빌드 프로젝트의 이름을 기입한다.
2. 소스: 빌드 대상
- 소스 공급자 : Github
- 리포지토리 : 내 계정의 리포지토리 사용
- 리포지토리 선택 : Blog 소스가 있는 리포지토리 선택
- Git Clone 깊이 : 1
- Webhook : 체크, 체크시 푸시 할 때 마다 자동으로 이 빌드 프로젝트가 실행된다.
- 배지 : 체크 안함, 내용을 잘 모름
3. 환경: 빌드 방법
- 환경 이미지 : AWS CodeBuild에서 관리하는 이미지 사용
- 운영 체제 : Ubuntu
- 런타임 : Ruby (Jekyll은 ruby로 되어 있다)
- 런타임 버전 : aws/codebuild/ruby:2.3.1
- 권한이 있음 : 체크 안함
- 빌드 사양 : 소스 코드 루트 디렉터리에서 buildspec.yml 사용
- buildspec 이름 : buildspec.yml
- 인증서 : 인증서 설치 안함
4. 아티팩트: 이 빌드 프로젝트의 아티팩트를 넣을 위치
- 유형 : 아티팩트 없음, 일반적인 다른 어플리케이션에서는 아티팩트를 넣을 위치를 선택하게 되는데 jekyll 프로젝트를 s3에 넣을 경우 아티팩트 설정시 s3 루트 아래에 _site 폴더 생성 후 그 아래에 정적 웹 페이지가 들어간다고 하여 사용하지 않는다.
5. 캐시
- 유형 : 캐시 없음
6. 서비스의 역할
- 계정에 서비스 역할 생성 및 적당한 역할 이름 배정
7. VPC
- VPC : No VPC
8. 고급설정
s3에 빌드 결과를 넣는 과정에서 aws console 명령어를 사용해야 한다. 따라서 명령어 사용시 인증에 필요한 설정을 해주어야 한다. 환경 변수에 다음과 같은 이름을 추가하고 자신의 값을 넣는다.
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
buildspec.yml 생성
블로그 프로젝트의 root 바로 아래에 buildspec.yml 파일을 만들어서 build 방법을 명시해주어야 한다.
buildspec.yml
version: 0.2
phases:
install:
commands:
- gem install jekyll jekyll-paginate jekyll-sitemap jekyll-gist jekyll-feed
pre_build:
commands:
- export LC_ALL="en_US.UTF-8"
- locale-gen en_US en_US.UTF-8
- dpkg-reconfigure locales
build:
commands:
- echo "******** Building Jekyll site ********"
- jekyll build
- echo "******** Uploading to S3 ********"
- aws s3 sync _site/ s3://blog.hankyul.io
- version : 현재 0.2가 최신 설정이다. 0.1도 빌드 자체는 호환이 되지만 locale 설정이 안먹는다.
- phases > install > commands : 빌드 실행 전 설치해야 하는 gem을 설치한다.
- phases > pre_build > commands : 블로그에 영어 이외의 문자가 들어가 있어서 추가로 locale 설정이 필요하다.
- phases > build > commands : 실제 빌드 수행하고 s3에 빌드 결과를 동기화 한다.
이제 소스를 수정하고 github에 push 하면 자동으로 빌드가 되고 블로그 배포가 진행된다