HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
♥️
2기 최종 프로젝트 팀별 공간
/
[팀 09] 오프와 에프
[팀 09] 오프와 에프
/
CI/CD 적용
CI/CD 적용
CI/CD 적용

CI/CD 적용

작성일시
Jul 20, 2022 04:30 AM
최종 편집일시
Jul 28, 2022 06:42 AM
회의 유형
환경설정
작성자
참석자
1. EC2 에 Jenkins 설치하기jenkins - github 연결ssh 키 발급하기플러그인 설치Jenkins로 접속 → public IP 주소:80802. Code Deploy과정Github 설정Webhooks 설정

1. EC2 에 Jenkins 설치하기


[Jenkins] [github] Jenkins와 github 연동하기
안녕하세요. 갓대희 입니다. 이번 포스팅은 [ Jenkins와 github 연결하기 ] 입니다. : ) 이번 포스팅은 Jenkins와 Github을 연동하는 것이 기본 목적이긴 하지만 이후 Github Push가 바생하면 해당 이벤트를 캐치하여 Jenkins를 통해 자동 빌드 하기위해 사전 작업을 하려고 한다. 물론 상용 서버에서 이렇게 업무를 처리하진 않겠지만, 개인적으로 공부 할 때, 매번 Jenkins를 빌드 클릭 하지 않아도 되니 편하지 않을까 해서, 그리고 무엇보다 간단하니까!
https://goddaehee.tistory.com/258
[Jenkins] [github] Jenkins와 github 연동하기
[Jenkins] 🤵 Github(Git) 연동 하는 방법
GitHub] 🏛️ 깃헙 토큰 받기 최근에 Git Hub에서 ID/PW기반의 Basic Authentication 인증을 금지하고, ID/Personal Access Token 방식의 Token Authentication 인증을 요구하고 있다. 앞으로는 소스코드를 push/clone하려고 하면, 아래와 같.. inpa.tistory.com
https://inpa.tistory.com/entry/Jenkins-%F0%9F%A4%B5-GithubGit-%EC%97%B0%EB%8F%99-%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95
[Jenkins] 🤵 Github(Git) 연동 하는 방법
 
⭐ AWS 용량 부족 문제 겁나 짜증났음 - 프리티어, 나노 x
  • small 사용했음
 

jenkins - github 연결

  1. github token 발급
      • settings → personal token
  1. aws ec2 생성 → 인바운드 규칙 설정으로 22번 포트 개방
sudo yum update -y # 자바 11 설치 # 설치 가능한 Java 버전 확인 # yum list java*jdk-devel ## Example) ## Available Packages ## java-1.7.0-openjdk-devel.x86_64 1:1.7.0.261-2.6.22.2.amzn2.0.2 amzn2-core ## java-1.8.0-openjdk-devel.x86_64 1:1.8.0.312.b07-1.amzn2.0.2 amzn2-core # Amazon Linux에 Java 11 설치 sudo amazon-linux-extras install java-openjdk11 # yum 패키지의 Java 8 설치 sudo yum install -y java-1.8.0-openjdk # 자바 버전 11로 설정 # 아래 처럼 나오면 Java 11인 1번을 선택 sudo alternatives --config java # $ sudo alternatives --config java # There are 2 programs which provide 'java'. # Selection Command # ----------------------------------------------- # + 1 java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.13.0.8-1.amzn2.0.3.x86_64/bin/java) # * 2 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.amzn2.0.2.x86_64/jre/bin/java) # Enter to keep the current selection[+], or type selection number: 1 # 자바 버전 확인 java -version # openjdk version "11.0.13" 2021-10-19 LTS # OpenJDK Runtime Environment 18.9 (build 11.0.13+8-LTS) # OpenJDK 64-Bit Server VM 18.9 (build 11.0.13+8-LTS, mixed mode, sharing) # jenkins 패키지 추가 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key # install docker, git sudo yum install -y git docker # 자바 11버전에서 젠킨스 설치 sudo yum install -y epel-release # 혹시 안되면 sudo amazon-linux-extras install epel 로 먼저 설치 sudo yum install -y java-11-openjdk-devel sudo yum install -y jenkins # 젠킨스 실행 service jenkins start

ssh 키 발급하기

ssh-keygen -t rsa -f [키이름]
입력한 폴더에
  • [키이름]
  • [키이름].pub
파일들이 만들어짐
 
cat [키이름]
  • 키가 나옴.
  • 이걸 jenkins 설정에 넣어줌
    • notion image
    • SSH 키로 만들어줌.
 

플러그인 설치

  1. Github Integration
  1. AWS Codedeploy
 

Jenkins로 접속 → public IP 주소:8080

# 젠킨스 비밀번호 확인 sudo cat /var/lib/jenkins/secrets/initialAdminPassword

2. Code Deploy


Jenkins + CodeDeploy를 사용하여 자동배포 구현하기
기존에 Travis를 사용하여 CI를 구축했었습니다. 하지만 무료 크레딧이 끝나버려서 이번 기회에 구인 공고에서도 많이 보이는 Jenkins와 AWS CodeDeploy를 사용하여 자동배포를 구현해보도록 하겠습니다. 위의 아키텍쳐로 진행하기 위해서 Jenkins를 돌릴 EC2 서버를 하나 더 생성하여 진행하겠습니다. 두개의 EC2 인스턴스를 사용하기 때문에, 구별하기 쉽도록 '젠킨스 서버'와 '스프링 서버'라고 명명하여 구별하겠습니다. 사용자가 GitHub에 Push.
Jenkins + CodeDeploy를 사용하여 자동배포 구현하기
https://velog.io/@bluewind8791/jenkins-with-docker-ci
Jenkins + CodeDeploy를 사용하여 자동배포 구현하기
[AWS] Spring Boot, Jenkins, CodeDeploy로 CI/CD 하기
이번 글에서 CI/CD 를 할 때는 위의 아키텍쳐로 진행하려고 합니다. (다만, Auto Scaling은 사용하지 않고 운영용 EC2 1대, Jenkins 빌드용 EC2 1대를 사용할 예정입니다.) 그래서 사용한 도구에 대해서 정리하면 아래와 같습니다. 이러한 기술들을 사용해서 CI/CD를 진행하는 글을 이어나가겠습니다. 추가로 이번 글에서 EC2 생성, S3 버켓 생성, CodeDeploy 생성, IAM 사용자 권한 부여 등등 같은 것들에 대해서는 다루지 않겠습니다.
[AWS] Spring Boot, Jenkins, CodeDeploy로 CI/CD 하기
https://devlog-wjdrbs96.tistory.com/295
[AWS] Spring Boot, Jenkins, CodeDeploy로 CI/CD 하기
notion image
  1. 사용자가 GitHub에 Push.
  1. Jenkins가 GitHub Repository 를 clone 받는다.
  1. Jenkins가 build하여 jar 파일을 만들고 script file, yml file 등을 zip으로 압축하여 S3에 upload한다.
    1. notion image
      맨 root 폴더에 scripts 폴더 만들고 그안에 deploy.sh 파일 내용
      #!/bin/bash BUILD_JAR=$(ls /home/ec2-user/jenkins/build/libs/*.jar) # jar가 위치하는 곳 JAR_NAME=$(basename $BUILD_JAR) echo "> build 파일명: $JAR_NAME" >> /home/ec2-user/deploy.log echo "> build 파일 복사" >> /home/ec2-user/deploy.log DEPLOY_PATH=/home/ec2-user/ cp $BUILD_JAR $DEPLOY_PATH echo "> 현재 실행중인 애플리케이션 pid 확인" >> /home/ec2-user/deploy.log CURRENT_PID=$(pgrep -f $JAR_NAME) if [ -z $CURRENT_PID ] then echo "> 현재 구동중인 애플리케이션이 없으므로 종료하지 않습니다." >> /home/ec2-user/deploy.log else echo "> kill -15 $CURRENT_PID" kill -15 $CURRENT_PID sleep 5 fi DEPLOY_JAR=$DEPLOY_PATH$JAR_NAME echo "> DEPLOY_JAR 배포" >> /home/ec2-user/deploy.log nohup java -jar $DEPLOY_JAR >> /home/ec2-user/deploy.log 2>/home/ec2-user/deploy_err.log &
      루트 폴더에 appspec.yml 파일 내용
      version: 0.0 os: linux files: - source: / destination: /home/ec2-user/jenkins # EC2 내부 배포 할 위치 overwrite: yes file_exists_behavior: OVERWRITE permissions: - object: / pattern: "**" owner: ec2-user group: ec2-user hooks: ApplicationStart: - location: scripts/deploy.sh # ApplicationStart 단계에서 해당 파일을 실행해라 timeout: 60 runas: ec2-user
       
      Jenkins > item config > Post Build 설정
      • 추가
      notion image
      • S3, codedeploy 내용 추가해주기.
        • notion image
       
  1. Jenkins가 CodeDeploy에게 S3에 업로드된 압축파일을 서버에 배포하도록 요청.
  1. CodeDeploy가 S3에서 압축파일을 가져와 EC2에 배포.
 

과정

  1. IAM Role 생성 ⭐
  1. 배포용 EC2 생성 ⭐
  • 생성한 iam role 설정해주기
  • console에서 code deploy agent 설치
    • // ruby가 설치되어 있지 않다면 ruby 설치 $ sudo yum install ruby $ sudo yum install -y aws-cli $ cd /home/ec2-user/ $ wget https://aws-codedeploy-ap-northeast-2.s3.amazonaws.com/latest/install $ chmod +x ./install $ sudo ./install auto // code deploy 서비스가 제대로 실행중인지 확인 sudo service codedeploy-agent status // 자바11 설치 sudo yum install java-11-amazon-corretto.x86_64 // code deploy 제대로 되는지 로그 tail -f /var/log/aws/codedeploy-agent/codedeploy-agent.log
  1. S3 스토리지 생성
  1. target group → 안해도 됌
  1. codedeploy application 설정
      • codedeploy group 생성 및 설정
 
AWS Codedeploy 속도 올리기
원인 파악 일반적으로 속도 저하가 있는 곳은 다음 사진과 같이 BlockTraffic 구간과 AllowTraffic 구간이다. AllowTraffic AllowTraffic 구간이 느린 이유는 Target Group 에서 Health Check 할 때 상태를 체크하는데 오래 걸리기 때문이다. AllowTraffic 의 Default 설정 값을 살펴보면 threshold 는 5이고 interval 은 30이다. 그래서 정확히 30 * 5 = 2분 3...
AWS Codedeploy 속도 올리기
https://www.jongho.dev/aws/aws-codedeploy-%EC%86%8D%EB%8F%84-%EC%98%AC%EB%A6%AC%EA%B8%B0/
AWS Codedeploy 속도 올리기

Github 설정


Webhooks 설정

notion image
⇒ Jenkins에 git hooks 사용한다고 체크해주기~!
  • 시스템 설정에서 ~!