Jenkins CI/CD 설정 (AWS, EC2,git)

limchard·2024년 1월 2일

jenkins

목록 보기
2/2

배포용 Spring boot 생성

단순 배포 확인용 이므로 최소한으로만 설정한다.

localhost 에서 열리는지만 확인하면 된다.

war로 설정한 프로젝트는 docker에 담아줘서 옮겨야 한다.

pom.xml

  • jstl과 tomcat 관련 사항을 추가한다.
	<!-- https://mvnrepository.com/artifact/jstl/jstl -->
	<dependency>
	    <groupId>jstl</groupId>
	    <artifactId>jstl</artifactId>
	    <version>1.2</version>
	</dependency>
		
	<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper -->
	<dependency>
	    <groupId>org.apache.tomcat.embed</groupId>
	    <artifactId>tomcat-embed-jasper</artifactId>
	    <!-- <version>9.0.69</version>--> <!-- 버전이 애매하면 아래 scope로 변경해줘라. -->
	    <scope>provided</scope>
	</dependency>

application.yml

server:
  port: 9004
  
#jsp
spring:
  mvc:
    view:
      prefix: /WEB-INF/
      suffix: .jsp
      
  devtools:
    livereload:
      enabled: true    

JenkinsProjectApplication.java

package boot.mvc.sist;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan("boot.*")
public class JenkinsProjectApplication {

	public static void main(String[] args) {
		SpringApplication.run(JenkinsProjectApplication.class, args);
	}

}

ShopContrroller.java

package boot.data;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class ShopController {
	
	@GetMapping("/")
	public String start() {
		return "redirect:shop/list";
	}
	
	@GetMapping("/shop/list")
	public ModelAndView list() {
		ModelAndView model=new ModelAndView();
		
		model.setViewName("/shop/shoplist");
		
		return model;
	}

}

shoplist.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css2?family=Bagel+Fat+One&family=Dongle:wght@300&family=East+Sea+Dokdo&family=Gamja+Flower&family=Gowun+Dodum&family=Nanum+Gothic+Coding&family=Nanum+Pen+Script&family=Orbit&display=swap" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.css">
<script src="https://code.jquery.com/jquery-3.7.0.js"></script>
<title>Insert title here</title>
</head>
<body>
	<h2>안녕하세요!!</h2>
	<h3>오늘은 젠킨스 CICD 파이프라인 구축할 예정입니다. </h3>
	<img alt="" src="../6.jpg" width="300px;">
	<img alt="" src="../5.jpg" width="350px;">
</body>
</html>

git에 repositories 등록 및 push 하기


AWS 설정하기

ec2 server -> 인스턴스 시작 ->이름 설정
-> Amazon Linux 선택

여기서 키페어를 생성해준다

여기서 만든 키 페어를 저장 후 .ssh폴더에 넣어 둔다
(aws-key.pom의 형태로 키페어 저장됨)


ebs 볼륨 크기 30gb로 설정

인스턴스 설정 후 화면

탄력적 IP 설정
인스턴스 열어서 네트워크 및 보안에서 탄력적 ip 선택 -> 탄력적ip 주소 기본으로 할당 -> 작업 -> 탄력적 ip 주소 연결 -> 인스턴스 가서 확인


이후 인스턴스에서 탄력적 IP 확인 가능.
-> 이 IP는 나중에 젠킨스 포트가 연결되어
[탄력적IP]:[젠킨스 포트번호]로 연결된다.

터미널로 .ssh 경로로 들어가기

인스턴스안 연결 버튼 누르기

SSH 클라이언트 탭 클릭하기

터미널에 예: 에 있는 코드 입력하기

아래처럼 새 모양이 뜨면 연결 성공!

외부 클라이언트 연결 방법 2

  1. 인스턴스안 연결 버튼 누르기
  2. EC2 인스턴스 연결 탭
  3. 연결
  4. 새모양 뜨면 성공

aws vm(가상공간)에 docker 설치

sudo yum install docker -y

aws vm(가상공간)에 docker 실행

sudo service docker start

aws vm(가상공간)에 docker 확인

sudo docker container ps
sudo docker container ps -a
sudo docker image ls
sudo docker volume ls

aws vm(가상공간) docker에 Jenkins 설치 (파이프라인 구축)

sudo docker run -p 8080:8080 -p 50000:50000 --name jenkins-server --restart=on-failure -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts-jdk11 (jdk 버전 맞춰줘야함)

AWS 인바운드/아웃바운드 규칙 편집

  • 인바운드

  • 아웃바운드

새로고침 후 Jenkins 확인 작업

docker에 있는 jenkins 실행

sudo docker container start jenkins-server

웹페이지

Jenkins 비밀번호 확인
vm에서

sudo docker logs jenkins-server

왼쪽에 첫번째 install

회원 정보 입력

  • 실습이므로 위부터 4칸 전부 admin 입력하고 이메일에 admin@admin.com 입력

Jenkins 설정

Jenkins 관리

Tools

add JDK 클릭

java 경로 확인하기.

Name:jdk/JAVA_HOME:JAVA_HOME 경로 확인후 입력

  • aws vm에서 JAVA_HOME 확인

sudo docker inspect jenkins-server

Plugins 설치

아래 사진처럼 Maven Intergration 클릭 후 설치

Download progress 를 열어 다운로드 확인하기

Maven project 빌드 시작

git 설정

설정 완료 후 지금빌드 를 클릭하면 빌드 됨.

콘솔 출력 가서 반드시 SUCCESS 확인할 것.

성공 확인 후 maven-ai-project 눌러서 작업공간 -> target -> war 파일 있는지 확인.

maven/gradle/jar 인지 알고 있어야 한다.
react+Spring boot일 경우에는 jar 이다.


war 파일 구성할 Tomcat 구축

  • war 파일 자체가 배포 파일이기 때문에 tomcat 필요

아래 deploy plugins 설치

VM서버에 Tomcat 설치
jdk 11일 경우 톰캣 9 / jdk 17일 경우 톰캣 10 사용.. 현 시점에서는 톰캣 10이 없는것으로 확인 되니 9 사용 추천

sudo docker run -d -it --name tomcat -p 8090:8080 tomcat:9

-> jencins를 8080 포트로 썼기 때문에 8090 포트를 이용한다.

인바운드 규칙 편집

Tomcat Docker Container 접속

vm에서sudo docker exec -it tomcat bash

  • 접속후 -R: 하위 디렉토리 파일까지 모두 복사

    cp -R ./webapps.dist/* ./webapps

ls webapps로 복사한 것 확인

cd webapps/manager/ 이동

lsxform.xslMETA-INF 있는지 확인 META-INF 이동

apt-get update 이후 nano설치 (apt-get install nano / vi 편집 대체)
(apt-get 패키지 관리자 도구 / homebrew 같은 느낌)

lscontext.xml 확인

cp context.xml a.xml -> context.xml를 a.xml로 복사한다. -> 백업용

nano context.xml로 편집기 실행 / nano로 안되면 vi 편집기로 실행(apt-get install vim으로 설치 진행)

<!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->

Valve부분 주석처리 저장 후 나오기 (저장하면 wrote 줄 수 나옴)
(ctrl+s 저장+ctrl+x 나오기)

웹페이지 url에 http://[탄력적ip]:8090/manager/html 입력하면 로그인 창 나옴

Tomcat 계정 확인

로그인 창은 톰캣 계정 aws vm에서 경로를 tomcat까지 나오고(cd ../../..)

cd conf로 이동 lstomcat-users.xml 확인

nano tomcat-users.xml 열어서
맨 밑에 주석 닫히고 tomcat태그 닫히는 곳 사이에

<role rolename="manager-gui" />
<role rolename="manager-script" />
<role rolename="manager-jmx" />
<role rolename="manager-status" />
<user username="admin" password="admin" roles="manager-gui,
manager-script, manager-jmx, manager-status"/>
<user username="deployer" password="deployer"
roles="manager-script"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>

추가하고 ctrl+s ctrl+x

위에 로그인창에 id:admin pass:admin 입력해서 로그인

Tomcat Jenkins 설정

project 클릭

구성 클릭

Build 에서 아래와 같이 Deploy war/ear to a container 선택

아래와 같이 설정

Add 에서 Jenkins 선택

위 그림 참고하여 아래 입력

  • Username:deployer
  • password:deployer
  • id:deployer_user1
  • description:deployer on VM

dscription은 상관 없지만 3개는 정확해야함

아래 그림과 같이 확인

Tomcat 서버 확인

소스 코드 관리 접속

Tomcat URL에 http://[탄력적ip주소]:8090 추가 ***(맨 뒤 / 없어야함!!)
(http://[탄력적 ip 주소]:8090/manager/html)

지금 빌드 누르기

console out 에서 SUCCESS 확인하기


git 자동 빌드화

git hub 에서 프로젝트 선택

아래 그림과 같이 진행

Add webhook 클릭

Payload URL에 http://[탄력적 ip 주소]:8080/github-webhook/(맨 뒤 "/" 반드시 추가!!!)(jenkinsport(url)/github-webhook/) 추가

Content type : application/json 선택

Add webhook 클릭

Jenkins 에서 구성 클릭

소스 코드 관리에서 빌드 유발 클릭
GitHub hook trigger for GITScm polling 체크

Apply / 저장

프로젝트 수정 후 git에 프로젝트 올리고 jenkins에 들어가보면 자동으로 빌드 실행 됨.

profile
java를 잡아...... 하... 이게 맞나...

0개의 댓글