AWS CI/CD 자동화 파이프라인 개인프로젝트

sso·2025년 7월 18일

AWS

목록 보기
32/34

https://www.jenkins.io/doc/book/installing
페이지 참조하여 설치

1. jenkins 설치

wget -O /etc/yum.repos.d/jenkins.repo \
https://pkg.jenkins.io/redhat-stable/jenkins.repo

rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key

자바17로 설치 진행하겠음

yum install fontconfig java-17
dnf -y install java-17-amazon-corretto

yum install jenkins

systemctl daemon-reload

systemctl --now enable jenkins

1-2. jenkins 설정

인스턴스 퍼블릭ip:8080 으로 웹으로 젠킨스 접속

1-3. 플러그인 설치

GitHub
Maven Integration
Deploy to container

GitHub : 코드 변경 자동 감지, 빌드 트리거, 커밋/이슈 링크, 상태 피드백
Maven Integration : Java 빌드 자동화, 의존성 관리, 빌드 산출물/테스트 리포트 관리, CI/CD 통합

Git : 코드의 이력 관리, 버전 관리, 팀 협업 (commit, push 등)
Maven : Java 프로젝트 빌드, 의존성 관리, 테스트, 패키징(.war 등)
Deploy to container : Maven으로 빌드된 .war 파일을 WAS(예: Tomcat)에 자동 배포

Git

  • 소스 코드를 단계별로 저장(커밋), 저장소에 업로드(푸시), 변경 이력 관리, 협업 분기(브랜치) 등의 기능이 중심입니다.

Maven

  • Java 소스 코드를 컴파일하고, 필요한 라이브러리를 자동으로 다운로드하며, 빌드 결과(.jar, .war 등)를 만들어주는 빌드 관리 도구입니다.

Deploy to container 플러그인(Jenkins)

  • Maven 빌드 결과물을 웹 서버(톰캣 등)에 자동 배포하여, 개발~테스트~배포까지 CI/CD 자동화의 마지막 단계를 담당합니다.

2. Git 설치

yum install git
git --version

3. maven 설치

https://maven.apache.org/download.cgi

최신 버전으로 설치

cd /opt
wget https://dlcdn.apache.org/maven/maven-3/3.9.11/binaries/apache-maven-3.9.11-bin.tar.gz
tar xfz apache-maven-3.9.11-bin.tar.gz
mv apache-maven-3.9.11 maven
cd /opt/maven/bin
./mvn -v

https://docs.google.com/document/d/1BvSv11iWanhEF79totdC0sAFff4c2jDyZ1QxH031i6E/edit?pli=1&tab=t.hv7ad57eq29y

https://docs.google.com/document/d/1MolfYuXa0cUGYGPxNdGOg9uVcAeDpR-3N2PYmuOQrj4/edit?tab=t.gq1ku1z07qy0

전역번수로 mvn을 사용하기 위해 /root/.bash_profile 환경변수 파일에 내용을 추가

cd
vi .bash_profile

M2_HOME=/opt/maven
M2=/opt/maven/bin
JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto.x86_64
PATH=$PATH:$M2

source .bash_profile
echo $PATH
mvn -v

4. Git new repository 생성

5. jenkins > Tools 정보 입력

6. 테스트 파이프라인 생성

7. 톰캣 설치

우선 톰캣을 설치하려면 java17이 설치되어 있어야함
나는 jenkins와 같은 인스턴스에서 포트를 변경해서 실행하겠음

톰캣 설치 링크
https://tomcat.apache.org/download-11.cgi

cd /opt
wget https://dlcdn.apache.org/tomcat/tomcat-11/v11.0.9/bin/apache-tomcat-11.0.9.tar.gz
tar xfz apache-tomcat-11.0.9.tar.gz
mv apache-tomcat-11.0.9 tomcat
vi /opt/tomcat/conf/server.xml
/opt/tomcat/bin/startup.sh

find / -name "context.xml"
vi /opt/tomcat/webapps/host-manager/META-INF/context.xml
해당 부분 주석 처리

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

vi /opt/tomcat/webapps/manager/META-INF/context.xml
해당 부분 주석 처리

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

vi /opt/tomcat/conf/tomcat-users.xml

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

/opt/tomcat/bin/shutdown.sh
/opt/tomcat/bin/startup.sh

tomcat + jenkins 연결

new item jenkins 계정 연결

용량줄여잇!

웹에서 무료 css 파일을 다운받아서 해당 파일을 movaxterm을 사용해서 파일 집어넣기

ssh-keygen -t ed25519
cat /root/.ssh/id_ed25519.pub
나온 내용을 git > ssh 에 ssh 키 추가

  1. 메이븐 빌드 디렉터리 및 파일(pom.xml) 생성
  • 이때 archetype-webapp 웹앱으로 입력해야함

mvn archetype:generate -DgroupId=com.test1 -DartifactId=test1 -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

  1. css 파일 집어넣기

/root/test1/src/main/webapp 경로 내에 css 파일 집어넣기

  1. git 연동

cd /root/test1
git init
git add .
git commit -m "0722-1" ← 연결된 깃정보가 없어서 오류가 발생

나의 git 정보 입력 후 다시 커밋

git config --global user.email "sohyun2223@gmail.com"
git config --global user.name "nohsohyun0128"
git commit -m "0722-1"

git push origin master

  1. jenkins item 생성

사실 WAR/EAR files는 전체경로에서 war 파일을 찾으라고 **/.war를 입력했는데 못찾고 오류가 나서 강제로 파일을 입력했음
(실제 경로 : /var/lib/jenkins/workspace/아이템명/target/아이템명.war)

URL은 퍼블릭 사용 시 계속 변하기 때문에 변하지 않는 프라이빗 IP를 입력하였음

  1. 결과

http://퍼블릭ip:8081/아이템명

톰캣에 정상적으로 서버가 올라온것을 확인

용량 총량이 30GB 이상이면 꺼도 돈나간다는 소리

dnf -y install docker
systemctl --now enable docker
systemctl status docker
docker -v
docker pull tomcat:latest
docker images ← docker pull 해서 도커 다운로드한 이미지들을 확인할 수 있음

docker run -d --restart always -p 8082:8080 tomcat:latest
docker ps ← 현재 실행중인 도커 확인

  • 실제로는 8082 포트로 실행했지만 도커는 8080포트로 실행된 상태임.
  • 사실 도커 내에서 8080 포트로 실행되었지만 외부 포트는 8082와 매핑되어있는 상태.
  • 때문에 해당 인스턴스:8082 포트로 접속 시 접속이 되는것을 확인할 수 있음
  • 하지만 다운받은 tomcat 이미지는 tomcat을 실행하는 ./webapp 내에 파일이 존재해야 하는데 현재 해당 디렉터리 내에 내용이 없어 오류가 나는 정상적인 현상임
  • 때문에 해당 이미지에 접속하여 우선 오류가 나지 않도록 임시조치할 예정

docker exec -it 7fc2 /bin/bash ← 도커 내부로 접속하여 확인
ls webapps/ ← 실행파일이 없어서 오류가 발생하는것을 확인
ls webapps.dist/ ← 임시 실행파일이 예제처럼 존재하는것을 확인하였고 해당 파일을 실제 실행 디렉터리에 복붙하여 오류페이지를 안띄울거임
cp -R webapps.dist/* webapps

임시 톰캣페이지가 나타나는것을 확인
또한 실제 톰켓 경로는 /usr/local/tomcat
실제 실행파일이 위치하는 경로는 /usr/local/tomcat/webapps
/usr/local/tomcat/webapps.dist가 예시 파일이 존재하는 경로라는 사실을 알 수 있음

그렇다면 tomcat을 설치를 dockerfile 문서로 작성한 후 docker로만 빌드하여 docker container로 생성하여 실습해보겠음

도커 이미지 생성

vi Dockerfile
FROM tomcat:latest
RUN cp -R /usr/local/tomcat/webapps.dist/* /usr/local/tomcat/webapps
docker build -t demotomcat .
docker images

나의 도커 허브에는 올라가지 않고 로컬에 현재 이미지가 생성된것을 확인할 수 있음

docker run -d --restart always -p 8083:8080 demotomcat

8083포트로 접속했을 때 이미지가 바로뜨면서 오류페이지가 안나는것을 확인
이렇게 도커 이미지를 생성하는 실습을 진행함

그렇다면 내가 만든 demotomcat을 나의 도커 허브에 업로드 해보겠음

도커 허브로 이미지 업로드

도커 자체 계정으로 만든게 아니라 연결계정으로 생성했다면 설정에서 암호를 따로 변경해줘야함

docker login

해당 명령어 입력 후 나의 도커 허브 계정으로 로그인

docker images

업로드 하기 위해서는 내가 만든 도커 이미지의 이름과 태그를 확인해야함
내가 업로드하기 위해서는 docker push 내ID/이미지이름:태그 형식으로 업로드 해야하는데 현재는 내가 생성한것은 내ID가 포함되어 있지 않기 때문에 기존에 생성(빌드)한 이미지에 새로운 태그를 추가해야함

docker tag sohyun2223/demotomcat:latest
docker push sohyun2223/demotomcat:latest

나의 도커허브에 정상적으로 이미지가 올라간것을 확인

확인했으니 우선 도커 컨테이너를 지워보자

docker ps
docker stop bold_ishizaka
docker stop laughing_sammet
docker rm bold_ishizaka
docker rm laughing_sammet

이름이나 container id를 사용해서 지울 수 있음

지금까지는 이 내용을 수동으로 실습해봤고 이제 자동으로 jenkins을 사용해서 처리하는걸 작업해볼예정임

  1. 개발자가 GitHub에 업로드
  2. 젠킨스 - GitHub의 코드 풀링
  3. Jenkins의 Maven이 빌드 - .war 파일(아티팩트) 생성 - Docker로 전달 - Tomcat 컨테이너 이슈 해결 및 .war 파일을 포함한 Dockerfile 작성 - 이미지 빌드 및 Docker Hub에 업로드 - docker run으로 업로드 된 이미지 사용

나는 test2로 실행하겠음

  1. 인스턴스 실행
  2. /opt/tomcat/bin/startup.sh (톰캣 실행)
  3. 퍼블릭ip:8081/test2 (웹 접속)
  4. jenkins 아이템 생성

Publish Over SSH 플러그인 설치 필요

profile
오늘도 하나씩 해결해 나가자!

0개의 댓글