스파르타코딩클럽
-
왜 젠킨스는 웹훅을 하지 않았나스파르타코딩클럽/최종프로젝트 - DevQuiz 2024. 2. 5. 14:58
프로젝트 마무리를 위해 깃허브 디폴트 브랜치를 dev에서 main으로 변경하였다. 이로 인해 젠킨스에서도 CI/CD 유지를 위해 파이프라인에서 브랜치 설정을 변경해주었다. 이 부분을 변경하면 CI/CD가 main 브랜치에 맞춰 동작해야만 했다. 그런데 저렇게 변경했음에도 불구하고 깃허브 PR 시에 웹훅 트리거가 동작하지 않았다. 그래서 젠킨스 파이프라인에서 Gtihub Hook Log를 살펴보니 계속 예전 브랜치명인 dev로 보내는 것을 확인하였다. 당연히 main이 아닌 dev로 트리거를 보내기때문에 젠킨스는 동작하지 않았다. 그래서 시도한 해결방법들을 나열해보자면 첫번째 파이프라인 설정을 */dev로 다시 변경하여 시도해 보았다. 웹훅이 dev로 트리거를 보내기때문에 dev로 변경하면 다시 트리거를 ..
-
-
SSL, 리버스 프록시 적용스파르타코딩클럽/최종프로젝트 - DevQuiz 2024. 1. 29. 17:54
CI/CD도 완성했고 이제 인프라에서 남은건 엔진엑스 리버스 프록시와 SSL인증서를 적용한 https다. Https 인증부터 완성하였다. Certbot을 이용한 방법을 사용하였고, 3달마다 갱신해야하는 불편함이 있지만 젠킨스 쉘스크립트에서 cd가 될때마다 갱신하도록 넣는 방법도 있고, 가끔 생각날때마다 해주면 되므로 크게 부담이 되지는 않았다. 나는 도커안에 엔진엑스를 설치했기 때문에 외부에서 인증서만 받은 다음 마운트해주는 방식을 사용하였다 sudo certbot certonly --standalone -d URL 입력 참고로 URL은 도메인형식이어야하며 ec2의 ip주소는 안된다. 입력하면 질문이 세개 나오는데 첫번째는 이메일입력 두번째는 약관동의 세번째는 정보수신제공 동의이다. 첫번째, 두번째는 동..
-
리로이 젠킨스 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..