배포용 Spring boot 생성
<!-- 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>
server:
port: 9004
#jsp
spring:
mvc:
view:
prefix: /WEB-INF/
suffix: .jsp
devtools:
livereload:
enabled: true
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);
}
}
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;
}
}
<%@ 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>
ec2 server -> 인스턴스 시작 ->이름 설정
-> Amazon Linux 선택


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

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




ebs 볼륨 크기 30gb로 설정

인스턴스 설정 후 화면


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





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

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

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

SSH 클라이언트 탭 클릭하기

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



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

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

회원 정보 입력

Jenkins 설정

Jenkins 관리

Tools

add JDK 클릭

java 경로 확인하기.
Name:jdk/JAVA_HOME: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 이다.
아래 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 포트를 이용한다.
인바운드 규칙 편집

vm에서sudo docker exec -it tomcat bash
접속후 -R: 하위 디렉토리 파일까지 모두 복사
cp -R ./webapps.dist/* ./webapps
ls webapps로 복사한 것 확인
cd webapps/manager/ 이동
ls로 xform.xsl와 META-INF 있는지 확인 META-INF 이동
apt-get update 이후 nano설치 (apt-get install nano / vi 편집 대체)
(apt-get 패키지 관리자 도구 / homebrew 같은 느낌)
ls로 context.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 입력하면 로그인 창 나옴


로그인 창은 톰캣 계정 aws vm에서 경로를 tomcat까지 나오고(cd ../../..)
cd conf로 이동 ls로 tomcat-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 입력해서 로그인

project 클릭

구성 클릭

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

아래와 같이 설정

Add 에서 Jenkins 선택


위 그림 참고하여 아래 입력
dscription은 상관 없지만 3개는 정확해야함

아래 그림과 같이 확인

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




지금 빌드 누르기


console out 에서 SUCCESS 확인하기



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에 들어가보면 자동으로 빌드 실행 됨.



