WiseN

Amazon CodePipeline

Nov 24,2015   |   AWS

작성자_GS Neotek

페이스북 공유하기 트위터 공유하기
Blog thumbnail

다루는 내용


∙ 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/ 접속


 



 

 




참고