다루는 내용
∙ AWS CodePipeline 이란?
∙ Requirement
∙ AWS CodePipeline 생성
∙ CodePipeline 설정 변경
실습
AWS CodePipeline 이란?
CodePipeline은 어플리케이션을 개발하여 서비스에 이르기까지의 워크플로우를 Source, Build, Test, Deploy 각 단계 별로 관리할 수 있다.
Requirement
소스준비
소스의 Build 과정도 포함되므로 Build가 필요한 소스를 준비한다.
https://github.com/awslabs/aws-codepipeline-jenkins-aws-codedeploy_linux 에서 샘플 소스를 다운 받는다. 해당 소스는 Ruby로 작성되어 있다. 다운 받은 파일은 압축 형태로 S3에 업로드 한다.
※ 압축을 풀었을 때 아래 파일 리스트 들이 있는지 확인한다. (폴더가 하나 더 있으면 안 된다.)
※ CodePipeline의 소스를 S3에 두고 사용할 경우 S3 버킷은 Versioning이 Enabled 상태여야한다.
Jenkins 서버 준비
Build 단계에서 Jenkins를 사용할 것이므로 Jenkins 서버를 준비한다.
1. IAM Role 생성
Jenkins 서버로 사용될 EC2 인스턴스에 권한을 주기 위해 IAM Role을 만든다.
· Role Name : JenkinsAccess 입력
· Permissions : AWSCodePipelineCustomActionAccess
· Trust Relationships : ec2.amazonaws.com
2. EC2 인스턴스 생성
· JenkinsAccess IAM Role을 이용하여 생성한다.
· Jenkins는 default로 8080 포트를 사용하므로 Security Group에서 허용한다.
· Jenkins 설치
· Jenkins 실행
3. Jenkins 설정
· http://ec2-instance-ip:8080 접속
· Jenkins 관리 → 플러그인 관리 → 설치 가능 → 필터 : AWS CodePipeline Plugin for Jenkins → 지금 다운로드하고 재시작 후 설치하기
· 설치가 끝나고 실행중인 작업이 없으면 Jenkins 재시작. 체크
· 대시보드로 이동 클릭
· 새로운 Item 클릭
· Item 이름 : MyDemoProject 입력 → Freestyle project 선택 → OK 클릭
· 필요한 경우 concurrent 빌드 실행 선택
· 소스 코드 관리
– AWS CodePipeline 선택
– AWS Region : US_WEST_2 선택
– Category : Build 선택
– Provider : MyJenkinsProviderName 입력
· 빌드 유발
– Poll SCM 선택
– * * * * * 입력
· Build
– Execute shell 선택
– rake 입력
· 빌드 후 조치
– AWS CodePipeline Publisher 선택
– 추가 클릭
· 저장 클릭
CodeDeploy 준비
1. IAM Role 생성
· EC2에서 사용할 IAM Role 생성
– Role Name : CodeDeploy-EC2
– Permissions :
– Trust Relationships : ec2.amazonaws.com
· CodeDeploy에서 사용할 IAM Role 생성
– Role Name : CodeDeploy-Service
– Permissions : AWSCodeDeployRole
– Trust Relationships : codedeploy.us-west-2.amazonaws.com
2. EC2 인스턴스 생성
· IAM Role : CodeDeploy-EC2
· User data
· 웹 서비스가 실행될 것이므로 80포트를 허용한다.
3. CodeDeploy 설정
· Application Name : CodeDeployDemo 입력
· Deployment Group Name : CodeDeployDemo1 입력
· Add Instances : 생성한 인스턴스 선택
· Service Role ARN : CodeDeploy-Service 선택
· Create Application 클릭
· Deploy New Revision 클릭
· Application : CodeDeployDemo 선택
· Deployment Group : CodeDeployDemo1 선택
· Revision Type : My application is stored in Amazon S3 선택
· Revision Location : https://s3-us-west-2.amazonaws.com/arang-lab/aws-codepipeline-jenkins-aws-codedeploy_linux-master.zip 입력
· Deploy Now 클릭
CodeDeploy 생성은 완료되었으나 배포과정에서 fail이 발생한다.
빌드 과정을 진행하지 않아서 발생한 문제이므로 무시해도 된다.
AWS CodePipeline 생성
1. 콘솔에서 Get started 클릭
2. Name 섹션에서
· Pipeline name : myCodePipelineLab 입력
· Next step 클릭
3. Source 섹션에서
· Source Provider : Amazon S3 선택
· Amazon S3 location : 소스 경로 입력
https://s3-us-west-2.amazonaws.com/arang-lab/aws-codepipeline-jenkins-aws-codedeploy_linux-master.zip 입력
· Next step 클릭
4. Build 섹션에서
· Build provider : Add Jenkins 선택
· Privider name : MyJenkinsProviderName 입력
· Server URL : http://54.218.15.210:8080/ 입력
· Project name : MyDemoProject 입력
Jenkins 설정에서 입력한 정보들을 입력한다.
· Next step 클릭
5. Beta 섹션에서
· Deployment provider : AWS CodeDeploy 선택
· Application name : CodeDeployDemo 선택
· Deployment group : CodeDeployDemo1 선택
· Next step 클릭
6. Service Role 섹션에서
CodePipeline Service에서 사용할 IAM Role을 생성한다.
· Create role 클릭
· Allow 클릭
· Next step 클릭
· Create pipeline 클릭
CodePipeline 설정 변경
1. Build 오류
소스를 Jenkins에서 빌드할 때 오류가 발생한다.
Jenkins 서버에 Ruby 소스를 빌드하기 위해 rake를 설치하고, haml을 사용하기 위해 설치해준다.
2. CodePipeline 재실행
· Build 단계에서 실패한 화면
· Release change 클릭하여 재실행
소스 확인, 빌드, 배포 과정이 모두 정상적으로 실행된다.
3. 확인
· http://54.218.26.167/ 접속