220609 Today I Learned
일지
특이 사항 없음
오늘의 할일
- 220609 TIL 작성
- AWS 스터디
- 아마도 가능하다면 멘토링..?
주요 키워드
CI/CD
- Tomcat Serv.에 .war App 배포
- Jenkins활용, Docker 컨테이너 환경 사용
공부 정리
Tomcat Server를 사용한 WAR 어플리케이션 배포
-
Tomcat EC2 인스턴스 생성 및 SSH 연결
- java jdk 설치
- sudo apt update
- sudo apt install openjdk-11-jdk
- java –version
- Java 환경 구성
- ~/.bashrc 파일 수정
... JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 PATH=$PATH:$JAVA_HOME
- ~/.bashrc 파일 수정
- 쉘 설정 다시 로드
- exec bash
- echo $JAVA_HOME
- echo $PATH
- Tomcat 및 Tomcat admin 설치
- sudo apt -y install tomcat9 tomcat9-admin
- sudo systemctl status tomcat9.service
- /etc/tomcat9/tomcat-users.xml 수정
...
<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"/>
</tomcat-users>
- 사용자 설정을 반영하기 위하여 tomcat9 서비스 재시작
- sudo systemctl restart tomcat9.service
- sudo systemctl is-active tomcat9.service
- 배포 작업 설정을 위한 Jenkins 플러그인 설치
- deploy to container
- github repository, maven을 사용하여 빌드 및 tomcat 배포 작업 생성
- jenkins 메뉴에서 새로운 item - Maven 프로젝트
- deploy-to-tomcat - 소스코드 관리
- github
- repository: 자신의 github 레포지토리 주소
- (선택)credential: 앞에서 생성한 credential 사용
- 빌드
- Root POM: pom.xml
- Goals and options: clean install
- 빌드 후 조치
- deploy war/ear to container
- WAR/EAR file : */.war (프로젝트 디렉토리 내 .war파일 지정)
- Container: tomcat 9.x remote
- Credential: deployer/deployer (새로 생성)
- tomcat url: http://192.168.56.102:8080
- deploy war/ear to container
- 배포 확인
- jenkins 작업디렉토리(/var/lib/jenkins/workspace)
- Tomcat 관리자 페이지
- http://
:8080/manager - 배포된 Tomcat 어플리케이션 - http://
:8080/webapp
- 컨텐츠 업데이트 후 갱신된 컨텐츠를 사용한 배포 테스트
- 기존 컨텐츠 수정
- /home/ubuntu/source-java-maven-hello-world/webapp/src/main/webapp/index.jsp
<h1> Hello World </h1> <h2> Tomcat Deploy Test </h2>
- github 소스 업데이트 적용
- git commit -m “index.jsp modified(Tomcat)”
- git push origin master
- 앞 단계에서 생성한 jenkins 작업 재실행(Build Now)
- Tomcat 페이지 접속하여 결과 확인 (http://
:8080/webapp)
Jenkins를 사용한 Docker 컨테이너 환경 사용
- EC2 인스턴스 생성
- 이름: Docker
- IP: 192.168.56.103
- 인스턴스 연결 후 Docker 설치
- sudo apt update
- sudo apt -y install apt-transport-https ca-certificates curl gnupg lsb-release
-
curl -fsSL https://download.docker.com/linux/ubuntu/gpg sudo gpg –dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg -
echo “deb [arch=$(dpkg –print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable” sudo tee /etc/apt/sources.list.d/docker.list > /dev/null - sudo apt update
- sudo apt install -y docker-ce docker-ce-cli containerd.io
- 현재 사용자 docker 그룹 추가
- sudo usermod -aG docker $USER
- jenkins에서 docker 시스템으로 빌드 결과물을 전달하기 위한 플러그인 설치
- Publish over SSH
- docker VM을 ssh로 연결하기 위한 ssh 설정 및 계정 패스워드 설정
- sudo vi /etc/ssh/sshd_config
... PasswordAuthentication yes ...
- sudo systemctl restart ssh.service
- sudo passwd ubuntu
- 암호 설정
- sudo vi /etc/ssh/sshd_config
- jenkins 인스턴스에서 docker 인스턴스로 ssh 연결 테스트
- ssh ubuntu@192.168.56.103
- ssh 연결 설정 추가
- 메인 UI - Jenkins 관리 - 시스템 설정- Publish over SSH (가장 아래쪽)
- SSH Servers - 추가
- name: docker-instance
- hostname: 192.168.56.103 (docker VM IP)
- username: ubuntu
- ‘고급’ 버튼 클릭
- Use password authentication, or use a different key : 계정 패스워드 설정 추가
- Passphrase / Password: 암호 입력
- github repository, maven을 사용하여 빌드 및 tomcat 배포 작업 생성
- jenkins 메뉴에서 새로운 item - Maven 프로젝트
- copy-war-to-docker - 소스코드 관리
- github
- repository: 자신의 github 레포지토리 주소
- (선택)credential: 앞에서 생성한 credential 사용 - 빌드
- Root POM: pom.xml
- Goals and options: clean install - 빌드 후 조치
- Send build artifacts over SSH
- SSH Server: docker-instance (이전에 생성한)
- Transfer
- Source files: webapp/target/webapp.war
- remove prefix: webapp/target
- remote directory: hello-world
Docker 이미지 생성
- 테스트용 Dockerfile (docker vm의 사용자 홈 디렉토리에서)
FROM tomcat:9 COPY ./hello-world/webapp.war /usr/local/tomcat/webapps
- 빌드 실행
- docker build -t my-hello-world:latest .
- 이미지를 사용한 컨테이너 테스트
- docker run -d –name test -p 8080:8080 my-hello-world:latest
- 빌드된 이미지를 사용한 어플리케이션 연결 테스트
- http://
:8080/webapp
- http://
Docker 컨테이너 배포를 위한 Jenkins 통합
- Docker 이미지 빌드를 위한 Dockerfile을 git에 포함 (git 저장소 위치에서 실행)
- mkdir dockerfile
- vi dockerfile/Dockerfile
FROM tomcat:9 COPY ./webapp.war /usr/local/tomcat/webapps
- git add .
- git commit -m “Dockerfile added”
- git push origin master
- jenkins 작업 생성
- jenkins 메뉴에서 새로운 item - Maven 프로젝트
- deploy-to-docker - 소스코드 관리
- github
- repository: 자신의 github 레포지토리 주소
- (선택)credential: 앞에서 생성한 credential 사용 - 빌드
- Root POM: pom.xml
- Goals and options: clean install - 빌드 후 조치
- Send build artifacts over SSH
- SSH Server: docker-instance (이전에 생성한)
- Transfer 1
- Source files: webapp/target/webapp.war
- remove prefix: webapp/target
- remote directory: hello-world
- Transfer 2
- Source files: dockerfile/Dockerfile
- remove prefix: dockerfile
- remote directory: hello-world
- exec command
docker build -t my-hello-world:latest ~/hello-world docker run -d --name my-hello-world-container -p 8080:8080 my-hello-world:latest
- 빌드 전 docker 인스턴스 내 테스트 환경 정리
- 실행중인 컨테이너 제거
- docker rm -f
docker ps -aq
- 빌드한 이미지 제거 - docker rmi my-hello-world:latest - 이전 빌드 시 복사된 파일 및 테스트 파일 제거
- rm -rf ~/hello-world
- rm -f ~/Dockerfile
Leave a comment