전체 글
sudo 권한 부여
💡 sudo : 일반 사용자가 일시적으로 root 관리자 권한을 얻는 명령어 위 sudo 명령어를 일반 사용자가 사용하기 위한 방법 /etc/sudoers 파일에 일반 사용자 / 그룹이 등록되어 있어야 한다. /etc/sudoers 파일은 readonly 속성을 가지고 있어 편집하기 위한 두가지 방법 sudoers 파일 관리 application 사용 → 추천 (문법 및 적합성 검사도 해줌 !) visudo -f /etc/sudoers 편집 권한 변경 및 부여 → 추천 안함 (권한 회수를 깜빡할 수 도 있기 때문 !) chmod u+x /etc/sudoers chmod 640 /etc/sudoers sudoers 파일 하단에 sudo 권한을 부여할 설정을 작성한다. sudo 명령어를 처음 사용할 시 비밀..
ArgoCD Manage Secrets
👀 Epilogue DB Pod 매니페스트 파일 정의 다하고.. MySQL 시크릿도 다 정의해주고.. namespace 안에 apply로 적용을 다 한 상태에서.. argoCD로 배포만 하면 되는데.. 왜 Sync failed로 인해서 에러가 발생하는 것일까..😢 에러 로그 탐색 ! 유효하지 않는 데이터 에러 Deployment.spec.template.spec.containers[1].. 위 변수는 다음과 같은 secret을 참조하는 데이터다. ... - name: MYSQL_USER valueFrom: secretKeyRef: name: mysql-secret key: username ... 여기서 시크릿에 대한 문제인 것을 확인하였다. 결론은 시크릿과 매니페스트 데이터 매칭을 제대로 설정하지 않아서..
DB Pod 생성하기
📌 목표 Kubernetes Cluster에 DB Pod를 띄워보자 ! MySQL을 사용하는.. SpringBoot의 백엔드와 연결하기 위해.. 먼저 준비물 ! Deployment Secret Persistent Volume (PV) Persistent Volume Claim (PVC) 위 것들이 왜 필요한지는 직접 매니페스트 파일을 작성하면서 알아보자 ▪︎ DB Deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: db-mysql labels: app: db-mysql spec: replicas: 1 selector: matchLabels: app: db-mysql template: metadata: labels: app: db-my..
Jenkins Front-End Dockerizing
👀 Epilogue 앞선 Jenkins로 React 빌드를 진행하였다. 빌드 산출물을 배포하기 위해선 Docker Image로 패키징 해야 한다. Dockerfile을 작성하고 Jenkins로 Dockerizing을 진행해보자! ⚡ Leggo ▪ Nginx 설정 파일 /conf/conf.d/default.conf에 Nginx 설정 파일 필요 server { listen 80; location / { root /usr/share/nginx/html; index index.html index.htm; try_files $uri $uri/ /index.html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/ngin..
Jenkins Front-End React Build
👀 Epilogue Jenkins로 React 빌드를 해보자 ! ⚡ Leggo ▪ React Build 개발 모드로 프로그램 실행 $ npm start 실제 배포 시 빌드 명령어 $ npm run build 배포 환경에서 사용할 파일들 압축 형태로 제공 index.html 최적화하여 배포 테스트용으로 serve라고 하는 간단한(한 번만 사용하는) 서버를 npm을 통해 설치하는 명령어 npm insatll -g serve npx serve -s build // 한번만 실행 현재 개발 단계에서 [ Front-End → Back-End ] 요청 타겟팅 설정 파일 path check Movie-project/back/src/main/movie-project/src/setProxy.ts webpack을 사용하지 ..
ArgoCD Application Create
👀 Epilogue CI 파이프라인에서 Kubernetes Deployment Manifest 파일의 도커 이미지 태그 수정을 완료하였다. 이제는 수정된 버전의 도커 이미지를 가지고 새로 업그레이드나 배포를 해야할 차례..! 위 과정에서 GitOps의 Operation 툴인 ArgoCD를 사용하고자 하는데.. ArgoCD로 Kubernetes 클러스터 내의 리소스들을 관리하기 위해서는 사전에 Application을 만들어줘야한다. 콘솔로 세팅 YAML 파일로 세팅 두 가지 세팅 방법이 있는데 우리는 아무래도 선언적으로 설정하는게 편하다보니 (맞죠?) .. YAML 파일 작성을 통해 Application을 만들어 보고자 한다 ! ⚡ Leggo Edit as YAML apiVersion: argoproj.i..
Jenkins Kubernetes Manifest Deploy
👀 Epilogue 현재 프로젝트에 적용할 CD 파이프라인 소개 도커 이미지 빌드 도커 이미지 Docker Hub Registry에 Push Kubernetes Deployment Manifest 파일에 도커 이미지 태그 수정 ArgoCD가 수정 사항을 감지하여 새로 Push 된 Docker Image를 가지고 배포를 진행한다. 이로써 GitOps 환경이 구축이 된다. 진짜 역대급으로 힘들었고 시간 많이 잡아먹었던 파이프라인 Stage 왜냐고 물으신다면 이 빌드 숫자를 보아하니..^^ ⚡ Leggo Jenkinsfile environment{ ... gitToken = credentials('github-repo-access-token') } ... stage('Kubernetes Manifest Upd..
Jenkins Docker Image Push
👀 Epilogue 험난한 과정을 거친 후 도커 이미지 빌드 파이프라인을 성공하였다 ! 이제는 빌드한 이미지를 가지고 도커 허브 레지스트리에 Push를 해보자 ~ ⚡ Leggo Jenkinsfile ... stage('Docker Image Push'){ steps{ container('docker'){ withDockerRegistry([credentialsId: 'docker-access-key', url: "" ]){ sh "docker push ${dockerHubRegistry}:${currentBuild.number}" sh "docker push ${dockerHubRegistry}:latest" /* Wait Uploading */ sleep 10 sh "docker rmi ${docker..
Jenkins Back-End Dockerizing
👀 Epilogue 역시나 험난한 트러블 슈팅기 도커가 없다고 하는 거 같아요.. ⚡ Leggo 플러그인 설치 Docker Docker Pipeline 실패.. uname -a 를 통해 OS 정보 확인 + uname -a Linux default-hp930 5.4.0-99-generic #112-Ubuntu SMP Thu Feb 3 13:50:55 UTC 2022 x86_64 GNU/Linux 도커 설치 스크립트 추가 sudo apt-get update sudo apt-get install docker.io sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker agent pod에서 sudo: not found 문제로 실패 해결책 apt-get update && a..
Jenkins Back-End Gradle Build
👀 Epilogue 백엔드 Gradle 빌드 시 매우 많은 트러블 이슈 발생 Gradle 빌드 명령어 이슈.. Test 제외 빌드 명령어 ./gradlew build --exclude-task -test Gradle 빌드 세팅 파일 찾지 못하는 이슈.. Gradle 권한 오류.. etc.. 그중에서 제일 애를 먹었던 이슈를 해결했던 과정을 소개하고자 한다. ⚡ Leggo Jenkinsfile ... stage('Gradle Jar Build'){ steps{ dir('back'){ sh ''' chmod +x gradlew ./gradlew build --exclude-task test ''' } } post{ failure{ echo 'Gradle jar build failure!' } success{..