분류 전체보기
-
리로이 젠킨스 CI/CD 구현 3스파르타코딩클럽/최종프로젝트 - DevQuiz 2024. 1. 29. 17:34
merge되면 도커허브까지 이미지가 푸시되는 CI를 완성하였다. 다음은 도커허브에 푸시된 이미지를 도커컴포즈가 받아서 배포하는 CD를 만들어보아야한다. 처음에는 CI/CD에서 쉘스크립트를 제대로 짜지 못해서 CI/CD용 EC2에서 배포까지 함께 되고있는 상황이었다. 배포 EC2가 실행중인 상태에서 동시에 배포가 2개나 되는 비효율적인 상황이 만들어졌다. 어떻게 해결하였는지는 CD 과정을 작성하며 함께 기록하였다. 프로젝트 생성 사용할 깃허브 URL을 입력한다. 아래에도 이렇게 작성하였다. 그리고 다른 프로젝트가 빌드된 이후에 빌드가 될 수 있도록 이렇게 매개변수를 넣어주었다 아래 네가지 선택지는 빌드가 안정적일때만 / 빌드가 불안정할때도 / 빌드가 실패했을때도 / 빌드가 중단되더라도 트리거를 한다는 내용..
-
리로이 젠킨스 CI/CD 구현 2스파르타코딩클럽/최종프로젝트 - DevQuiz 2024. 1. 26. 05:45
파이프라인 구현 젠킨스 UI 왼쪽에서 new Item 파이프라인 선택 후 이름을 입력한 다음 OK버튼을 누르면 된다. 레포지토리 URL 입력 깃태그를 사용하여 버전관리를 하기 때문에 해당 내용을 입력한다. SCM에서 트리거하여 받아오기 때문에 이렇게 체크 SCM 을 GIT으로 설정하고 다시 깃허브 repo URL을 입력한다. 그리고 아래의 credentials는 깃허브 액세스토큰을 저장한 것을 선택 브랜치는 default branch를 적어주면 된다. 아래의 파이프라인에서는 이렇게 입력한 다음 저장을 누르면 파이프라인 생성이 끝난다. 트러블슈팅 1. 깃태그를 하는데도 자동으로 CI가 되지않는다 왜? - dev (default branch) 에 merge 되었을때만 자동으로 CI가 진행되기 때문에 그 이전..
-
리로이 젠킨스 CI/CD 구현 1스파르타코딩클럽/최종프로젝트 - DevQuiz 2024. 1. 25. 00:22
도커컴포즈로 나름 배포도 되고 있기 때문에 이제 셀프 배포를 벗어난 배포 자동화를 구현하여야 했다. 깃허브액션을 사용하여 쉽게 CI/CD를 적용할지, 러닝커브는 크지만 한번 해두면 든든한 젠킨스로 해볼지 고민이 많았으나, CI/CD에 집중할 수 있는 여건이 되어 젠킨스를 한번 사용해 보기로 하였다. 젠킨스에 대해 젠킨스 파이프라인 : 자동화 작업의 순서를 정의한 스크립트 언어 Declarative(선언적) 방식 또는 스크립트 파이프라인 구성방식 젠킨스 파이프라인 섹션 Agent Section - 여러 슬레이드 노드를 사용할 경우 어떤 노드에 일을 시킬 것인지 지정 또는 노드뿐만 아니라 젠킨스 내부 도커 컨테이너에서 수행할 명령 지정도 가능 Stage Section - 어떤 일을 처리할 것인지 정의 (카테..
-
도커파일부터 도커컴포즈까지스파르타코딩클럽/최종프로젝트 - DevQuiz 2024. 1. 21. 19:27
도커컴포즈를 배포하기 위해 백엔드와 프론트엔드를 묶은 도커컴포즈 파일을 만들었다. 아래는 도커파일부터 이미지 빌드 및 배포, 그리고 도커컴포즈 yml파일을 통한 실행까지의 과정과 트러블슈팅을 간략히 작성하였다. Dockerfile 도커컴포즈에 필요한 이미지는 MySQL REDIS 백엔드 (스프링) 프론트엔드 4개이며 DB는 공식이미지를 다운받으면 되므로 백엔드와 프론트엔드를 도커파일로 작성하였다. 백엔드 도커파일 도커파일 - 빌드 실패 FROM gradle:8-jdk17-focal LABEL purpose='Backend' \ version='1.0' WORKDIR /app COPY gradle/wrapper ./gradle/wrapper \ src ./src \ README.md ./README.md ..
-
코인 저장 로직 리팩토링 - 퀴즈와 연결스파르타코딩클럽/최종프로젝트 - DevQuiz 2024. 1. 19. 19:12
기존의 코인 저장 로직은 사실상 Mock과 다를게 없었다. 퀴즈를 풀었다가 선행되어야 코인 저장이 작동해야했는데 퀴즈보다 먼저 구현되었기 때문에 퀴즈와 연동하는 리팩토링이 필요했다. 코인 획득 로직 구현에 대한 고민 Dev Quiz에서 문제를 풀었을때 얻는 리워드들을 구현하는 역할을 맡게 되어 로직에 대한 고민이 많았다. 그동안은 간단한 CRUD에서 파생된 기능들만을 구현했으나 이번엔 전혀 다른 느낌이라 생각 like-it-too.tistory.com 먼저 기존에 서플라이어로 구현했던 로직을 switch문으로 변경하였다. @Getter @NoArgsConstructor @AllArgsConstructor public enum CoinContent { // 문제 FIRST("SAVE", "FIRST", 2..
-
도커 열번째 - 도커 컴포즈프로그래밍/Docker 2024. 1. 18. 05:19
Docker Compose 이 명령어들은 docker-compose.yaml 파일이 있는 디렉토리에서만 동작한다. - 도커컴포즈는 여러번의 도커CLI를 실행하지 않고, 한번에 관련 어플리케이션을 yaml 파일로 구성하여 내부환경 구성과 속성을 실행할 수 있다. - 도커컴포즈는 설정값을 캐싱하기 때문에 재시작시 변경이 없다면 캐싱된 정보를 그대로 사용하여 빠른 서비스 실행을 보장 - yaml 코드에 포함된 어플리케이션들은 동일 네트워크에 포함되기 때문에 복잡한 연결 구성 없이도 쉽게 API 통신이 가능 - 도커컴포즈는 쿠버네티스와 같이 컨테이너 오케스트레이션 및 컨테이너화된 어플리케이션 관리에 널리 사용되는 도구 - 도커컴포즈는 다중 컨테이너 도커 어플리케이션을 정의*하고 실행하기 위한 도구 yaml파일을..
-
도커 컴포즈와 CI/CD 구현 계획스파르타코딩클럽/최종프로젝트 - DevQuiz 2024. 1. 17. 14:52
백엔드 관련 남은 일 Coin API 와 Quiz API 연동 연동하게 된다면 Quiz에서 Quiz 관련 status를 파라미터나 requestDto에 받아야하므로 현재 구현한 서플라이어를 쓰지 못하게 될 것으로 예상 해당 로직 재구현 필요 코드 리팩토링 (일정 미정) 인프라 담당 CI/CD (젠킨스) 도커 (+ 도커컴포즈 -> 쿠버네티스(미정)) 레디스 클러스터(미정. 하지않는다면 AWS 엘라스틱 캐시 사용) 진행순서 도커 컴포즈 구현 이후 젠킨스를 통한 CI/CD 구현 마감시한 도커컴포즈 + CI/CD 22일(예상) 배포가 최우선순위
-
도커 아홉번째프로그래밍/Docker 2024. 1. 16. 21:48
Dockerfile 최적화 - 고려요소 1. 빌드시간 2. 이미지 크기 3. 재사용성 4. 보안 5. 유지보수성 기타 등등 - 경량의 컨테이너 서비스 제공이 목적 최적화방안 1. 컨테이너 이미지에서 불필요한 바이너리를 모두 제거하여 이미지 경량화 - 설치된 패키지파일 autoremonve, clean 등으로 제거 - apt install -y --no-install-recommencs 을 사용하여 패키지 설치 시 불필요한 패키지 설치 방지 - 이미지 내부에 빌드와 관련없는 불필요한 파일을 포함하지 않기 위해 dockerignore 사용 2. 베이스 이미지를 alpine Linux 또는 scratch 사용 3. multi-stage build 를 사용하여 최종 이미지 크기를 최소화한다. - multi-st..