본문 바로가기

전체 글53

자동 배포 전체 개요 드디어 자동 배포 시스템 구축을 완료했다 !!!! (2023년 12월 20일 완료) 역시나 삽질의 연속이었다. 이제부터 하나씩 페이지를 만들면서 기록을 남겨보려고 한다.그 전에, 전체적인 개요도를 먼저 공유한다.어느정도 지식이 있는 개발자면 아래 그림만 봐도 알것 같긴 하다. 참고로 여기에 사용된 툴은 1. 젠킨스 2. Ansible3. Docker 등이다.   크게 두가지 단계로 나뉜다.1. ECR 에 docker image 를 push2. ECR 에 push 된 docker image 를 EC2 로 pull 해서 run 위 구성도의 번호표를 보면서 순서대로 따라가 보자. 릴리즈 할 준비가 되었다면  1. 각 backend, frontend 의 release branch 에 최종 수정사항을 반영한다. .. 2024. 10. 31.
1. ECR에 Docker image push (1/3) 앞서 얘기했듯이 , 나의 자동배포 단계는 크게 두가지 단계로 나뉜다.1. ECR 에 docker image 를 push2. ECR 에 push 된 docker image 를 EC2 로 pull 해서 run 1번부터 찬찬히 풀어나가 보자.어디서부터 어디까지를 해야할지 좀 애매하지만, 열정이 풍부한 개발자들이 이 페이지를 볼거라는 생각에 최대한 자세히 쪼개보려고 한다. 1. Git 브랜치 관리 우선 Release 를 위해서는 별도의 Git brach 를 관리하는것이 좋다.필자는 release/1.x , release/2.x , ... 로 관리하곤 한다.develop 브랜치에 반영된 커밋들중에 1. 꼭 필요한 커밋2. 안정성이 확보된 커밋들만 추려서 release 브랜치에 반영하고 버전업을 한다. 보통은 fu.. 2024. 10. 31.
1. ECR에 Docker image push (2/3) 3. Jenkins 셋업총 4개의 젠킨스 프로젝트가 필요하다. 필자의 경우 백앤드,프론트앤드가 같이 있는 서비스다.1. 자동 배포 리포지터리를 감지해서 새로운 수정사항이 merge 되면 자동 배포를 수행하는 총괄 젠킨스 프로젝트2. 백앤드 프로젝트를 Docker 이미지로 만들어서 ECR 로 push 하는 젠킨스 프로젝트3. 프론트앤드 프로젝트를 Docker 이미지로 만들어서 ECR 로 push 하는 젠킨스 프로젝트4. 위의 이미지들을 EC2 로 pull 해서 서비스를 돌리게하는 젠킨스 프로젝트 말로하면 좀 헷갈리는데 그림으로 이해해 보자.위의 2번,3번은 하는일은 같은 프로젝트이다. 백앤드,프론트앤드로 소스가 다를뿐 실제 내부적으로 하는일은 같다.아래 그림에서 프론트앤드,백앤드 중에 하나는 없다고 생각하.. 2024. 10. 31.
1. ECR에 Docker image push (3/3) 4. Jenkins pipeline 구성 앞장까지 젠킨스 프로젝트 구성을 마쳤다.이제 젠킨스가 실제로 일을 할 수 있는 파이프라인 스크립트 구성을 해야 한다.여기서 해야하는 일이 무엇인지 잊지 말자"백앤드(프론트앤드) 프로젝트를 빌드해서 Docker image 를 만들고, 이를 ECR 에 Push 하는 것" 이다. 이를 위해서는 총 3단계 작업이 필요하다. 1. Docker image build2. AWS Login (from jenkins)3. push to ECR 필자는 순서를 바꾸어서 2번 로그인 단계를 제일먼저 작성했다. 1>  AWS Login from jenkins지금 하는 모든것은 자동 배포를 위한 작업이므로 사람이 수작업으로 AWS 에 로그인해서 작업을 하는것이 아니라 젠킨스가 모든일을 해.. 2024. 10. 31.
2. EC2에서 Pull & Run (1/3) 앞장까지 ECR 에 필요한 Docker image 를 넣어놨다.이제 이를 EC2 에서 가져와서 실행시켜야 한다. 그림으로 보면 더 이해가 빠르겠지? ECR 로 push 하는것까지는 각각의 개별 프로젝트의 젠킨스가 담당했다.하지만 EC2 에서의 일은 각각의 프로젝트에서 담당하지 않고 총괄 프로젝트가 담당하도록 했다.(물론 내가 선택한 방법일 뿐이다. 원리만 알면 어떤 아이디어로 어떻게 실행시킬지는 각자의 영역) 이를 위해서는 ansible 이라는 새로운 툴이 도입되어야 한다.ansible 에 대한 설명은 인터넷 세상에 널려있으니 알아서 깨우치면 된다. (하나 추천하자면 https://brunch.co.kr/@growthminder/66 요기 정도)이해하기 나름이겠지만 필자는"playbook 이라는 스크립트.. 2024. 10. 31.
2. EC2에서 Pull & Run (2/3) 5. Pull 단계 셋업 이제 준비는 다 됐다. ECR 에서 댕겨와보자.stage('Pull with Ansible') { steps { script { sh "ansible-playbook -i /etc/ansible/hosts ./pull-playbook.yml -e ecr_url=${ECR_URL} -e frontend_build_number=${FRONTEND_BUILD_NUMBER} -e backend_build_number=${BACKEND_BUILD_NUMBER}" } }}* 이제는 보자마자 이해될거 같다.* pull-playbook.yml 파일을 실행시키는데 필요한 외부 변수들을 함께 셋업해준다.* 필자는 계속 빌드 넘버를 넘겨서 각 .. 2024. 10. 31.
2. EC2에서 Pull & Run (3/3) 6. Run 단계 셋업이제 ECR 로부터 필요한 docker image 들을 서버를 실행해야 하는 컴퓨터인 EC2 로 댕겨왔다.실행만 시키면 된다. stage('Run with Ansible') { steps { script { sh "ansible-playbook -i /etc/ansible/hosts ./run-playbook.yml -e ecr_url=${ECR_URL} -e frontend_build_number=${FRONTEND_BUILD_NUMBER} -e backend_build_number=${BACKEND_BUILD_NUMBER}" } }}* 이젠 정말 설명 안해도 알아야 된다.* run-playbook.yml 파일만 보면 되겠다... 2024. 10. 31.
3. 릴리즈 담당자가 할일 시스템이 다 구축 되었다.그럼 릴리즈 담당자가 할일은 무엇일까? 다시 전체 그림으로 정리를 해보자. 앞에까지 위 그림의 빨간색 부분을 한것이다.1번은 개발 커밋, release 브랜치로 머지 커밋등이기에 릴리즈 담당자 역할에선 제외! 저 그림상의 5번에 해당하는것이 릴리즈 담당자가 할일이다.그래서 결국 할일은?바로 deployment repository 에 릴리즈 수정 커밋을 하나 반영하는게 전부다. Jenkins 의 입장에서 도식화를 다시 해보면 다음 그림과 같다저 1번의 총괄 젠킨스 프로젝트만 트리거 시켜주면 그 이후는 알아서 다 자동으로 되게 된다.그 트리거 시켜주는 역할을 1번의 총괄 젠킨스 프로젝트의 Jenkinsfile 에 서브 프로젝트들의 빌드 번호만 업데이트 시켜 주면 된다. 아래 커밋처럼.. 2024. 10. 31.
4. 전체 정리 앞에서 열심히 설명했지만사실 이게 웹페이지로 설명하려니 여간 힘든게 아니다.오프라인에서 화이트보드에 그림 그리면서 설명하면 개발자들은 뚝딱 알아먹을거 같은데 , 그럴수도 없고 ^^;; 그래서 각각 필요한 부분들에 대한 걸 그림과 파일로 정리해보려고 한다.이 포스팅을 다 읽어준 사람에 대한 선물로 ㅎ 1. 서브 프로젝트 (프론트앤드도 동일하니 여기서는 백앤드만 기술) 1-1. 파이프라인 Jenkinsfile더보기pipeline { agent any environment { ECR_URL = 'xxxxx.dkr.ecr.ap-southeast-1.amazonaws.com' } stages { stage('Login to AWS ECR') { s.. 2024. 10. 31.
1. Jenkins 란? Jenkins 같은 녀석들을 CI/CD 도구라고 부른다.CI/CD 는 뭐야..?? (구축하다보면, 산넘어 산이다.. 이걸 하고 싶은데 이걸 하기 위해서는 또다른 무언가를 알아야 되고, 또다른 무언가를 알기 위해서는 또또다른 무언가를 알아야 되고.. 하…..) CI (Continuous Integration)한글로 “지속적 통합” 이라고 한다. (대부분이 그렇듯이 한글로 바꾸면 없어보인다)위키에 잘 설명되어 있다. (위키백과: 지속적 통합) 한줄 정의 : 모든 개발자가 소스를 받았을때 에러 없는 상태의 소스코드를 관리하는 것 팀원이 많아질수록 코드의 변경량이 많아지고, 누군가가 일일이 감시하지 않는한 문제가 되는 코드가 들어올수밖에 없다.이를 사람이 일일이 모니터링 하는것은 불가능하다.CI는 개발자가 서버.. 2024. 10. 29.
2. Jenkins Install 1. Jenkins download먼저 설치파일을 다운받아야 한다.Jenkins download and deployment설치하려는 서버의 OS 에 맞는 SW를 다운로드한다.Jenkins 홈페이지에 친절하게 install 과정이 설명되어 있다.우리 서버는 Ubuntu 니 Jenkins book 에 Linux  페이지를 참고해서 설치하면 된다.  curl 을 통해 LTS 버전 설치curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee \ /usr/share/keyrings/jenkins-keyring.asc > /dev/nullecho deb [signed-by=/usr/share/keyrings/jenkins-keyr.. 2024. 10. 29.
3. Jenkins 에서 Gerrit 프로젝트 빌드하기 Jenkins 에 새로운 프로젝트를 생성하고 빌드하는 방법에 대해 알아보자.gerrit 의 memore_client repository 를 예시로 설명한다.1. http://xxxx.xxx (셋업한 젠킨스서버의 주소)  로그인 → 홈화면에 [+ 새로운 Item] 선택 2. 원하는 이름 넣고 → Freestyle project 선택 → OK이제 프로젝트 설정을 채워야 한다. 3. 소스코드관리 → Git 선택Git repository 설정이 펼쳐진다. 하나씩 보자.3-1) Repository URLGit 저장소의 URL 주소 : memore_client 의 repository 정보를 적는다 (모르겠으면 gerrit 에서 clone 명령어를 보면 된다.)ssh://AriGerrit@review.aribio.n.. 2024. 10. 29.