본문 바로가기

CICD/EC2

(7)
EC2 CICD Automation - 7. Jenkins Pipeline Jenkins 세팅 시 만들었던, Jenkins User IAM의 권한을 수정한 후 Jenkins Credentials에 추가시켜줍니다. 그리고 파이프라인에서 사용해야 하는 Plug in을 설치해주도록 하겠습니다. 자, 이제 Pipeline Job을 만들어주도록 하겠습니다. 만들어진 Job에 Git Credentials ID 값과, AWS Credentials ID 값을 넣어주도록 합니다. 이유는, Pipeline에서는 코드에서 명령어를 실행해야 하다보니, 코드를 보면 WithAWS()~~ 라는 코드에 Credentials 값을 가지고 명령어를 수행할 수 있도록 구성되어있습니다. 젠킨스 변수에서 사실 String 변수로 넣어도 상관없지만, 변경하면 귀찮아지기 때문에 아무도 건들지 않을 만한 것으로 설정해..
EC2 CICD Automation - 6. CodeDeploy (Blue/Green) 자 이제 이전에 정상적으로 배포 된 서버의 AMI를 생성한 후, 이 서버의 AMI로 LC 및 ASG를 생성해주도록 하겠습니다. 이전에 AutoScaling 카테고리에 만들어진 LC에서 복사하여 시작해보도록 하겠습니다. Copy라고 뒤에 붙을텐데, 넘버링을 해주고, IAM 및 Userdata를 기존대로 넣어주겠습니다. 나머지 세팅은 기존과 동일하게 구성해주시면 됩니다. 기존 오토스케일링 그룹에서 시작구성을 바꿔 주신후 목표 / 최소 0 / 0 -> 2 / 2 로 늘려주시면 됩니다. (기존 2 / 2가 있으실 경우 4 / 4 로 늘려주신 후에 서버가 정상적으로 모두 늘어난다면, 2 / 2로 바꿔주시면 됩니다) 자, 이제 CodeDeploy DG를 만들어주도록 하겠습니다. 여기서 로드벨런서에 다시 붙여주는 작..
EC2 CICD Automation - 5. CodeDeploy (Rolling) CodeDeploy를 구성해 봅시다. Intro에서 어떠한 구성을 가지고 있는지 설명하였기 때문에 생략하고 넘어가겠습니다. 이전 포스트에서 appspec.yaml을 자세히 보셨다면 알 수 있겠지만, 모두 젠킨스 유저의 권한을 가지고 서비스를 배포하고 수행하게 됩니다. 따라서 배포되는 서버에서 젠킨스 유저가 있어야하며, jar를 실행하기 위한 jdk, CodeDeploy 배포에 필요한 Agent, 그리고 Jenkins 서버에 적용한 IAM Role을 적용해주어야 합니다. 먼저 서버에 Jenkins 유저를 세팅해줍시다. 배포하고자 하는 서버에서 다음 쉘을 수행하여 라이브러리 및 코드디플로이 에이전트를 설치해 줍시다. AWS Docs에서 CodeDeploy Agent는 EC2-USER에 세팅하기 때문에 ec2..
EC2 CICD Automation - 4. Jenkins Job 앞에서 정의한 코드커밋 레파지토리 이름과 동일하게 구성해주겠습니다. (그래야 변수명으로 코드를 적고 다른 잡에 컨씨 컨브이로 구성할 수 있기 때문에 편합니다.) 코드 커밋에서 repository url을 복사해주시고, 잡을 만들었으면, 소스 코드 관리에서 해당 url과 등록해놓은 credentials를 선택해줍니다. 이렇게 해서 잡을 런하게 되면, 젠킨스가 git clone 까지만 하게 되는 것이고 이제 순서에 따라서 빌드를 한 후 배포하는 형태를 구성하기 위해 아래와 같이 구축해주겠습니다. 첫 커맨드에서 젠킨스의 각 잡들이 제대로 수행되었는지 확인하기 위해 application.properties 파일의 변수를 바꿔주도록 하겠습니다. sudo sed -i "s/module_name=.*/module_n..
EC2 CICD Automation - 3. Jenkins, CodeCommit, S3 세팅 젠킨스 내부 세팅을 하도록 하겠습니다. 먼저 예제 소스가 Spring Boot Maven이기 때문에 Jenkins에 Maven을 세팅하겠습니다. 자 이제는, Git Clone을 해올 때, 권한이 있어야 하기 때문에 Credentials를 만들어 주도록 하겠습니다. 먼저 IAM으로 가서 계정을 만들고 권한을 준 후 Git Credentials를 만들어서 Jenkins에 등록하겠습니다. 권한을 필수 레파지토리만 읽고 가져올 수 있도록 상세하게 구성하는 것이 가장 좋습니다. 위와 같이 유저를 생성한 후에 유저에 들어가서 보안 자격 증명 탭에서 CodeCommit Repository에 대한 Git Credentials를 만들 수 있습니다. 자 이제 만들어진 Git Credentials을 아래와 같이 젠킨스에 등..
EC2 CICD Automation - 2. Jenkins 설치 AWS Basic Infrastructure에서 이어서 배포 자동화를 만들어 진행해보도록 하겠습니다. 연습해 볼 구성도는 아래와 같습니다. Jenkins 서버를 생성하고 세팅해보도록 하겠습니다. EC2 Type이 최소 t3.small은 되어야 하기 때문에 t3.small / EBS 20GB로 설정하여주시고 server tag와 보안그룹을 위와 같이 설정하여 주도록 하겠습니다. 프라이빗 서버이기 때문에 도메인으로 접근을 해야합니다. Target Group을 8080으로 만들어서 Jenkins서버를 연결해 준 후 Route53 Record에 젠킨스 도메인을 ALB DNS로 CNAME Record를 생성해주겠습니다. 이제 서버에서 아래와 같은 쉘 스크립트를 수행하여서 젠킨스 설치 및 젠킨스 유저를 세팅하도록 ..
EC2 CICD Automation - 1. Intro EC2에 자동화 배포를 구성할 때, 사용하는 가장 기본적인 구조를 보도록 하겠습니다. 개발자는 CodeCommit Repository에 Git Push를 하면서 소스 업데이트를 하고, 젠킨스에서 이 해당 Repository를 보고 있다가 Job Run을 수행하면서 Git clone 후 Build를 합니다. (만약 Flask와 같이 Jar 빌드등이 필요하지 않은 경우 Build 부분은 생략됩니다.) 이후 Build된 Jar 파일과, CodeDeploy가 배포를 하기 위해 어떤 수행을 할 것인지 정의해주는 appspec.yaml, 그리고 appspec.yaml에서 정의되어 실제 서비스를 수행할 deploy.sh 파일을 작성하여 세 파일을 zip으로 묶어 S3에 Job Build Number대로 버킷 구조를 ..