Jenkins CI & CD
⚙️ Ops/CI & CD2024. 6. 13. 21:48Jenkins CI & CD

Jenkins CI & CD + Nginx Reverse Proxy예전에 Declaretive Pipeline 방식의 Blue/Green 무중단 배포와 FreeStyle 방식으로 구현을 했었고그 이후로 아예 안써서 거의 잊어버렸는데, 최근 다시 쓸일이 생겨 재 포스팅합니다.지난번 Nginx의 Reverse Proxy 용도는 Blue/Green 무중단 배포 시 Active/Standby Container의 트래픽 방향 전환용도 였다면이번에 Nginx를 Reverse Proxy로 사용한 이유는 Jenkins와 Product Server는 내부망에 있으므로,Proxy를 이용해 Public WebHook Trigger를 Jenkins 인스턴스에 접근시킬 목적으로 사용합니다.Docker Custom Bridge ..

⚙️ Ops/CS2023. 9. 29. 16:31Context Switching & Thread Scheduling

📘 Process 구조 운영체제에서 모든 프로그램은 실행을 하면 메모리로 올라와서 프로세스로 올려집니다. 📌 프로세스의 구조 MetaData (PID, Mode, Priority ... 등등) Data(Heap) Files Code MainThread (Stack, Instruction Pointer) Stack은 메모리 영역으로 지역 변수가 저장되고 기능이 실행되는 영역입니다. Instruction Pointer는 스레드가 실행할 다음 명령어 주소의 포인트 역할만 합니다. 프로세스의 Stack, Instruction 부분만 제외하면 나머지 모든 스레드들이 MetaData, Data, Files, Code를 공유합니다. 📘 Context Switching 각각의 어플리케이션과 프로세스는 독립적으로 실행됩..

⚙️ Ops/CI & CD2023. 6. 12. 17:56Blue & Green 무중단 배포 (Jenkins + Nginx Reverse Proxy)

무중단 배포 - Blue Green Deployment 지난번에 구축한 Jenkins + Github Webhook Trigger + AWS EC2, RDS ELB를 연동해서 간단한 CICD 배포 성공을 하고, 사내 요구사항 변경으로 무중단 배포(zero-downtime)를 구축한 기록을 작성합니다. 설계할 배포 구조 새로운 버전이 Git에 병합되면, Github Webhook을 통해 Jenkins에 신호가 들어오고, 젠킨스는 최신 버전의 Jar 파일을 빌드합니다. 젠킨스는 Blue에 Health check를 합니다. Blue가 살아있다면 신버전을 Green에 배포하면 되고, 살아있지 않다면 Blue에 배포하면 됩니다. 그림상 Blue가 살아있는 것으로 판단됩니다. 따라서 젠킨스는 Green에 배포를 하..

⚙️ Ops/AWS2023. 6. 8. 15:50EC2 <-> ELB 연동 (Application LoadBalancer)

EC2 LoadBalancer 연동 Application LoadBalancer를 EC2와 연동합니다. HTTPS를 적용하기 전 HTTP로 먼저 테스트하기 위해 생성합니다. HTTPS는 프로덕트를 본격적으로 이전할때 인증서와 함꼐 적용해보겠습니다. HTTPS Redirect 방법은 나중에 글 올릴게염 일단 로드밸런싱 알고리즘을 Default인 Round Robin 방식으로 쓰다가 추후 요구사항 변경시, LOR 알고리즘이나 커스텀한 알고리즘으로 변경할 수 있는지도 알아봐야 합니다. Target Group 생성 Target Group의 Routing Algorithm은 기본적으로 Round Robin 방식입니다. Instance 타입 -> 내 EC2 인스턴스 할당 HTTP: 8080 으로 지정 LoadBan..

⚙️ Ops/CI & CD2023. 6. 6. 16:53Jenkins - Declarative Pipeline을 이용한 CI & CD 구축

Jenkins Pipeline 구축 Jenkins의 Item중 선언형 Pipeline으로 구축을 완료해서 글을 작성합니다. 저번에 Free Style Project로 Jenkins CICD를 구현했었는데, 요구사항이 변경함에 따라 Declarative Pipeline Script를 이용한 Jenkins CICD를 구축해보았습니다. 스크립트를 먼저 작성해놓고 Pipeline을 구축해보도록 하겠습니다!! Jenkins Credential, JDK, Gradle, SSH, Token 등 Jenkins Web에서의 모든 설정이 완료되었다는 가정하에 글을 썼습니다. 내용 추가 (Jenkins Git 관련 이슈 해결) Jenkins Credentials의 SSH와 프로젝트 구성의 SSH가 일치하는지 체크 만약 SS..

⚙️ Ops/CI & CD2023. 6. 2. 11:20[Jenkins] Jenkins 분산 빌드 파이프라인 구축 정리

Jenkins 정리 환경 Jenkins Version 2.407 분산 빌드 환경 사용 (Local = Agent, EC2 = Controller) 추후 빌드 속도에 따라 Local을 LightSail로 변경의 소지가 있습니다. 목차 EC2 생성 + 환경 세팅 스크립트 작성 Jenkins Credential 등록 (SSH Key, Github Token, Docker Hub Token 생성 & 입력 & 등록) Jenkins Plugin 설치 Local Jenkins Controller에서 노드 등록 EC2 생성 + 환경 세팅 스크립트 작성 EC2를 생성하기 전, 보안그룹의 포트를 열고 허용할 IP대역을 추가해줍니다. 보안 그룹 생성 내 Local의 공인 IP를 확인하여 EC2 Instance에서 사용할 포..

⚙️ Ops/Docker2023. 5. 30. 16:22Docker Private Registry 구축

Docker Container Registry 구축 Docker Hub에 프로젝트 내용을 올리면 안되니 Local에 이미지들을 저장합니다. Docker Login $ docker login -u [닉네임] Docker Registry Base Image 가져오기 $ docker pull registry:latest insecure 설정 아래 내용 전부 다 작성, Local-IP 부분엔 자신의 로컬머신 or 인스턴스 IP를 적는다 $ vi /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": {"max-size": "100m"}, "storage-driver":"..

image