-
Codepipeline과 Jenkins를 이용한 CI/CDAWS/Hands-on 2023. 7. 9. 17:15
본 실습은 ALB 구성과 EC2에 tomcat 이 설치 된 환경에서 public 서브넷 EC2에 Jenkins 설치부터 진행합니다 🙂
🚨 이때 배포 대상이되는 tomcat이 설치된 EC2 인스턴스에는 CodeDeploy Agent가 설치되어 있어야합니다.
👇 CodeDeploy Agent 설치 가이드
Amazon Linux 또는 RHEL용 CodeDeploy 에이전트 설치 - AWS CodeDeploy
앞의 명령에서 /home/ec2-user는 Amazon Linux 또는 RHEL Amazon EC2 인스턴스의 기본 사용자 이름을 나타냅니다. 사용자 지정 AMI를 사용하여 인스턴스를 만든 경우 AMI 소유자가 다른 기본 사용자 이름을 지
docs.aws.amazon.com
👇 사전 준비 참고 글
Public Loadbalancer 를 사용하여 Private Instance 접근하기
Loadbalancer란? 애플리케이션 트래픽을 Amazon EC2 인스턴스, 컨테이너, IP 주소, Lambda 함수등 여러 대상에 자동으로 수신 애플리케이션 또는 네트워크 트래픽을 여러 가용영역에 분산시켜 안정적인 AW
yentech.tistory.com
목표 아키텍처
🔧 EC2 에 Jenkins 설치하기
public 서브넷에 EC2를 생성한다. 이때 EC2 타입은 t2.small 이상으로 선택해야 젠킨스 실행이 잘 돌아간다.
젠킨스를 설치할 EC2 인스턴스에는 S3, CodeDeploy, CodePipeline 서비스에 접근할 수 있는 역할이 부여되어야한다.
인스턴스에 역할을 연결해준 뒤 자바 11 버전을 설치하고 환경변수 설정을 해준다.
sudo yum install java-11-amazon-corretto
젠킨스 공식 홈페이지의 설치 가이드(https://pkg.jenkins.io/redhat-stable/ )에 따라 젠킨스를 설치한다.
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key sudo yum install -y jenkins
systemctl 명령어로 젠킨스를 실행시킨 뒤 정상적으로 실행됨을 확인한다.# 젠킨스 실행 명령어 sudo systemctl start jenkins.service # 젠킨스 상태 확인 명령어 systemctl status jenkins.service
EC2 도메인으로 접속하면 젠킨스의 초기 화면이 띄워진다. (위 상태 명령어로 포트가 8080으로 떠있음을 확인할 수 있다)
화면에 보이는 위치에서 초기 비밀번호를 확인 후 입력한다.
다음 화면에서 Install suggested plugins 를 클릭하고 설치가 끝나기를 기다린다.
설치가 완료되면 다음 화면에서 계정 설정을 원하는대로 입력해준다.
🤗 🎉
🔧 플러그인 설치하기
화면 왼쪽 상단의 Jenkins 관리 를 클릭한다.
플러그인 관리 클릭!
Available plugins 를 클릭하고 aws 를 검색하여 aws code series 관련 플러그인들을 선택한 뒤 Download now and install after restart 를 클릭하여 플러그인 설치를 진행한다.
설치가 완료되면 아래 재시작 옵션을 클릭하여 젠킨스를 재기동해준다.
🔧 CodeCommit 생성하기
Code Commit Repository를 아래와같이 새로 생성한다.
생성한 저장소의 url 을 복사해서 remote 연결을 해주고 코드를 push한다.
#appspec.yml version: 0.0 os: linux files: - source: build/libs/yen-test-alb.war destination: /usr/local/tomcat9.0/webapps # EC2 내부 배포 할 위치 overwrite: yes # 덮어쓰기 hooks: AfterInstall: # 배포가 끝나면 아래 명령어를 실행 - location: scripts/deploy.sh timeout: 60 permissions: - object: / pattern: "**" owner: ec2-user group: ec2-user
#deploy.sh #!/bin/bash CURRENT_PID=$(pgrep -f tomcat) if [ -z $CURRENT_PID ] then echo ">>> 현재 구동중인 애플리케이션이 없으므로 종료하지 않습니다." >> /home/ec2-user/yen-deploy.log else echo ">>> kill -9 $CURRENT_PID" kill -9 $CURRENT_PID sleep 5 fi cd /usr/local/tomcat9.0/bin ./startup.sh
//hello.jsp <%@ page language="java" import="java.net.InetAddress" %> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html> <html lang="en"> <head> </head> <body> <p>Hello!!! Test 1</p> <% out.print("<p>Remote Addr: " + InetAddress.getLocalHost() + "</p>"); out.print("<p>Remote Host: " + InetAddress.getLocalHost().getHostAddress() + "</p>"); %> </body> </html>
🔧 CodeDeploy 생성하기
Code Deploy 애플리케이션을 생성한다.
생성된 애플리케이션의 배포 그룹을 생성한다.
위 설정 중 CodeDeploy의 역할 설정은 아래와 같다
🔧 Jenkins job 생성하기
화면 왼쪽 상단의 + 새로운 Item 을 클릭한다.
생성할 프로젝트 이름을 지정하고 Freestyle project 를 클릭한 뒤 OK 버튼을 클릭한다.
필요한 경우 concurrent 빌드 실행 선택
소스코드 관리에서는 AWS CodePipeline 을 선택하고 아래 정보를 입력한다. (나머지는 빈칸으로 놔둔다.)
Region : ap-northeast-2
Category : Build
Provider : yen-test-Jenkins(해당 Provider명은 CodePipeline 생성시 필요하다.)
빌드 유발은 Poll SCM 을 선택하고 * * * * * 를 넣어준다.
Build Steps 에서는 Execute shell 을 선택하고 아래 빌드 명령을 작성한다.
chmod +x gradlew ./gradlew clean build -x test
마지막으로 빌드 후 조치에서 AWS CodePipeline Publisher를 선택하여 추가를 클릭한 뒤 빈칸으로 놔두고 구성 정보를 저장한다.
🔧 CodePipeline 생성하기
Code Pipeline 을 생성한다.
위에서 생성한 codecommit 저장소 정보를 입력한다.
Jenkins 프로젝트 생성시 입력한 Provider 정보와 url, 프로젝트 명을 입력한다.
위에서 생성한 CodeDeploy 애플리케이션과 배포그룹을 지정한다.
검토 완료 후 파이프라인을 생성한다.
소스를 codecommit 에 push 하면 자동으로 파이프라인이 실행되며 Deploy 과정까지 모두 실행이 완료되면 정상적으로 배포가 된 것을 확인할 수 있다.
끝🤗
'AWS > Hands-on' 카테고리의 다른 글
ECR에 도커 이미지를 업로드하여 Auto Scaling으로 배포하기 (1) 2023.07.09 EC2에 Nexus 설치하기 (0) 2023.07.09 Client VPN을 사용하여 VPC Peering으로 연결된 VPC의 Private 인스턴스 접근하기 (0) 2023.07.05 EC2 에 Java, Tomcat 설치하기 (0) 2023.07.05 EC2에 nginx 설치하기 (패키지 설치 방법, 컴파일 설치 방법) (0) 2023.07.05