Jenkins CI/CD 설정

최성현·2023년 11월 8일
2

CI/CD Jenkins

목록 보기
2/2

CI/CD(Jenkins) 설정시 spring boot 설정은 최소한으로만 설정한다

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

AWS 인스턴스

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

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



ebs 볼륨 크기 30gb로 설정

인스턴스 설정 후 화면

탄력적 IP 연결

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

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

AWS cloud 공간(vm) 연결

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

  1. 터미널 열기
  2. .ssh 경로로 들어가기
  3. 인스턴스안 연결 버튼 누르기
  4. SSH 클라이언트 탭 클릭
  5. 터미널 .ssh 경로로 이동한 곳에 (ssh -i "aws-key.pem" ec2-user@ec2-13-49-114-42.eu-north-1.compute.amazonaws.com) 입력
  6. 새모양 뜨면 성공
    ***안된다면 chmod 400 ~/.ssh/aws-key.pem 입력 -> 터미널 .ssh 경로로 이동한 곳에 (ssh -i "aws-key.pem" ec2-user@ec2-13-49-114-42.eu-north-1.compute.amazonaws.com) 입력

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

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

연결 성공 화면 + 용량늘리기

  • aws cloud 공간(vm) 메모리 2gb로 용량 늘리는 법 (Spring이 1gb에서 안돌아가기 때문에 2gb로 업그레이드)

외부 클라이언트 연결 후

free -h
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo swapon -s
sudo vim /etc/fstab
vi 편집기로 위 파일을 열고 마지막 줄에 아래의 내용을 추가해준다.
/swapfile swap swap defaults 0 0
:wq

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 버전 맞춰줘야함)

Jenkins 설치 성공

2023-11-08 06:47:22.756+0000 [id=31]    INFO    jenkins.InitReactorRunner$1#onAttained: Completed initialization
2023-11-08 06:47:22.779+0000 [id=22]    INFO    hudson.lifecycle.Lifecycle#onReady: Jenkins is fully up and running
2023-11-08 06:47:23.324+0000 [id=44]    INFO    h.m.DownloadService$Downloadable#load: Obtained the updated data file for hudson.tasks.Maven.MavenInstaller
2023-11-08 06:47:23.325+0000 [id=44]    INFO    hudson.util.Retrier#start: Performed the action check updates server successfully at the attempt #1

여기까지 나온다면 다되긴 한거다 달러뜨면 좋지만 안뜨면 새로고침하고 진행(외부 클라이언트 연결 방법2)

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

  • 인바운드
  • 아웃바운드

새로고침 후 Jenkins 확인 작업

sudo docker container ps -a
sudo docker volume ls

docker에 있는 jenkins 실행

sudo docker container start jenkins-server

웹페이지

url

`탄력적ip:포트번호`

Jenkins 비밀번호 확인

vm에서 sudo docker logs jenkins-server

Url 접속 후

  1. 왼쪽에 첫번째 install

  2. 회원 정보 입력

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

  1. 확인
    [aws에서 할당한 탄력적 ip]:[docker실행시 설정한 jenkins 포트번호]

Jenkins 설정

설정1

  1. jenkins 관리
  2. Tools
  3. Add JDK
  4. Name:jdk/JAVA_HOME:JAVA_HOME 경로 확인후 입력
  • aws vm에서 JAVA_HOME 확인
    sudo docker inspect jenkins-server

날아갈 수 있어서 Apply / Save

설정2

  1. Plugins
  2. Available plugins
  3. maven 검색
  4. Maven Integration Install

설정3

  1. Tools
  2. Maven installations에 Add Maven
  3. Name:maven3.9 -> version 상관 x(3.9.2로 함)

Apply / Save

Jenkins 프로젝트 만들기

  1. 새로운 item
  2. Enter an item name : maven-ai-project
  3. Maven Project 선택

Git 연결

  1. Jenkins 프로젝트 구성 탭
    소스코드 관리
    올릴 git repository의 code<> https 복사해서 Repository URL에 입력
    https://github.com/dawn-sh/JenkinsProject.git 내 깃 주소

  2. Branches to build
    Branch Specifier (blank for 'any') Default 브랜치 선택

  3. Build
    Root POM : pom.xml
    Goals and options : clean compile package
    추가

Apply / Save

  1. 지금 빌드 선택(git과 연결)

  2. #1번호 눌러서 Console Output으로 진행상황 확인

  3. 성공 확인

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

***클라우드 서버에도 maven은 Tomcat 필수


도커 컨테이너를 지운다면 도커 이미지도 같이 지워줘야하고 도커 볼륨은 선택사항이다

maven/gradle/jar인지 알고 있어야한다

react+Spring boot일 경우 jar

war파일 구성할 Tomcat 구축

war파일 자체가 배포 파일이기 때문에 tomcat 필요
1. Jenkins 관리
2. Plugins
3. Available plugins
4. deploy 검색
5. deploy to container plugin install

vm서버에 Tomcat 설치

jdk11일 경우 톰캣9 / jdk17일 경우 톰캣10

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

-> 8080포트를 8090으로 쓴다 (jenkins를 8080으로 썼기 때문)

  1. aws 보안
  2. 인바운드 규칙 편집
  3. 사용자 지정 TCP ipv4 8090으로 만든다 -> 해당(탄력적 ip)ip:8090으로 접속시 404뜨면 굳

Tomcat Docker Container 접속

vm에서 sudo docker exec -it tomcat bash

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

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

ls webapps로 복사한 것 확인

cd webapps/manager/ 이동

lsxform.xsl와 META-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 설정

  1. jenkins
  2. 프로젝트
  3. 구성
  4. 맨 아래 빌드 후 조치 Deploy war/ear to a container 선택
    WAR/EAR files:**/*.war
    (웹에 띄워줄 제목)Context path:ai
  5. add containers 에 Tomcat 9.x Remote 선택
  6. Add 선택 후 Jenkins 선택
  7. Add Credentials
    Username:deployer
    password:deployer
    id:deployer_user1
    description:deployer on VM

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

  1. add후 Tomcat URL에 http://[탄력적ip주소]:8090추가 ***(맨 뒤 / 없어야함!!)
    (http://[탄력적 ip 주소]:8090/manager/html)
  2. Credentional에 deployer/** (deployer on VM) 선택
  3. Apply / 저장
  4. 지금빌드
  5. Contsole Output 확인

Tomcat 서버 확인

웹페이지에 띄운 tomcat 서버 새로고침하면 ai[(웹에 띄워줄 제목)Context path:ai]가 뜸 누르면 내가 작성한 프로젝트 가 띄워짐

프로젝트에 이미지 추가 후 git에 올린 후 jenkins에 들어가서 지금 빌드 눌러야지 나옴

git 자동 빌드화

  1. github에 있는 프로젝트 선택

  2. settings

  3. webhooks

  4. webhooks추가

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

  6. content type json 선택 후 Add webhook

  7. jenkins 프로젝트 구성

  8. 빌드 유발

  9. GitHub hook trigger for GITScm polling 체크

  10. Apply / 저장

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

profile
백엔드 개발자로서 성장해 나가는 성현이의 블로그~

2개의 댓글

comment-user-thumbnail
2023년 12월 10일

이 글을 보고 Jenkins를 사용할 수 있게 됐어요

1개의 답글