본문 바로가기

CICD

(21)
ECS CICD Automation - 4. Jenkins Job (Rolling) 이제 ECS의 배포 순서를 다시 간단하게 순서를 나열하면 다음과 같습니다. 1. Git Clone 2. Maven Build & S3 Upload (사실 안 해도 됨 그래서 생략 할 예정) 3. Create Docker file & Docker Build -> ECR Push 4. Create Task Definition (Modifiy ECR URL Version) & Update Service (Modify Task Definition Version) 젠킨스 세팅에 관한 부분은 EC2 CICD부터 수행해오며 모두 되어 있기 때문에, 해당 포스트만 보실 경우 앞 포스트들을 보며 세팅을 하시거나 아니면 알아서 잘 세팅한 후 진행하시면 됩니다. 는 아니고 ecs에서 아래와 같이 CLI를 수행해야하기 때문에..
ECS CICD Automation - 3. ECS Cluster 구축 먼저, ECS 구조를 이해 할 필요가 있습니다. 가장 먼저, Task Definition을 알아 봅시다. Task Definition은 ECR에서 어떤 도커 이미지를 가지고 컨테이너를 띄울 것인지, 포트 포워딩, Network mode, 로그, 모니터링 등 실제 띄워지는 컨테이너 구성에 대한 정의를 하는 것으로 구성되어있습니다. Service는 각각의 Task Definition을 통해 어떤 세팅의 컨테이너를 가지고 올 것인지 정하고, 배포 방식과, 로드벨런서 등 컨테이너가 시작되면 어떠한 방식으로 서비스할 것인지 정의하는 부분입니다. 마지막으로 ECS Cluster가 구성되며, ECS Cluster는 기본적으로 EC2 서버들로 구성됩니다 (Fargate는 서버리스) 이렇게 생성된 클러스터 EC2 안에 ..
ECS CICD Automation - 2. Docker 설치 및 Docker Image 생성 EC2에서 세팅된 젠킨스 서버를 그대로 사용하도록 하겠습니다. 먼저, 젠킨스 서버에서 ECR에 대해 pull push를 모두 할 수 있어야 하기 때문에, 해당 IAM Role을 추가해주겠습니다. 물론 더 상세하게 쪼개서 Policy를 만든 다음, 권한을 주시는게 가장 좋습니다. 이제 젠킨스 서버에서 다음 쉘 스크립트를 수행해서 도커를 깔아주도록 하겠습니다. sudo amazon-linux-extras install -y epel sudo amazon-linux-extras install -y docker sudo service docker start sudo usermod -aG docker $USER docker info docker 명령어를 sudo 없이 사용하기 위해 위에 명령어를 쳐도 바로 적용되..
ECS CICD Automation - 1. Intro ECS CICD 자동화를 구성할 때, 기본 구조를 보도록 하겠습니다. 개발자는 CodeCommit Repository에 Git Push를 하면서 소스 업데이트를 하고, 젠킨스에서 이 해당 Repository를 보고 있다가 Job Run을 수행하면서 Git clone 후 Build를 합니다. (만약 Flask와 같이 Jar 빌드등이 필요하지 않은 경우 Build 부분은 생략됩니다.) 이후 Build된 Jar 파일과 해당 Jar파일을 수행할 수 있게끔 세팅된 Base Image를 가지고 도커파일을 만들고, Jar파일을 해당 도커이미지에 Add하여 도커 빌드를 한 후, ECR에 Push하게 됩니다. 컨테이너 이미지 버전에 맞춰 Task Definition을 만들어주고, 블루그린 배포를 하게 된다면, CodeD..
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..