1. EC2 에 Jenkins 설치하기jenkins - github 연결ssh 키 발급하기플러그인 설치Jenkins로 접속 → public IP 주소:80802. Code Deploy과정Github 설정Webhooks 설정
1. EC2 에 Jenkins 설치하기
⭐ AWS 용량 부족 문제 겁나 짜증났음 - 프리티어, 나노 x
small
사용했음
jenkins - github 연결
- github token 발급
- settings → personal token
- 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 설정에 넣어줌
- SSH 키로 만들어줌.

플러그인 설치
- Github Integration
- AWS Codedeploy
Jenkins로 접속 → public IP 주소:8080
# 젠킨스 비밀번호 확인 sudo cat /var/lib/jenkins/secrets/initialAdminPassword
2. Code Deploy

- 사용자가 GitHub에 Push.
- Jenkins가 GitHub Repository 를 clone 받는다.
- Jenkins가 build하여 jar 파일을 만들고 script file, yml file 등을 zip으로 압축하여 S3에 upload한다.
- 추가
- S3, codedeploy 내용 추가해주기.

맨 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 설정


- Jenkins가 CodeDeploy에게 S3에 업로드된 압축파일을 서버에 배포하도록 요청.
- CodeDeploy가 S3에서 압축파일을 가져와 EC2에 배포.
과정
IAM Role
생성 ⭐
- 배포용 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
- S3 스토리지 생성
- target group →
안해도 됌
- codedeploy application 설정
- codedeploy group 생성 및 설정
Github 설정
Webhooks 설정

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