CI/CD 파이프라인 구축하기 - 1에서 이어집니다!
https://wooinge.tistory.com/93
이전 포스팅에서 Git, Jenkins, Maven을 통합한 CI/CD 파이프라인을 구축했다.
더 나아가서 이번엔 Jenkins 콘솔을 활용하여 Tomcat Server에 코드를 배포하는 실습을 진행할 것이다.
[CI/CD 파이프라인 구축 실습 목표]
- Jenkins server와 Tomcat server의 통합
- 코드 변경 후 Tomcat Network에 코드 배포
강의에서 톰캣 구축 방법 메뉴얼을 제공해주었다! 톰캣 사용자를 등록할 때 참고할 수 있다.
https://github.com/yankils/Simple-DevOps-Project/blob/master/Tomcat/tomcat_installation.MD
1. Tomcat server 구축하기
가장 먼저 톰캣 서버 구축을 위한 EC2 인스턴스를 새로 만든다.
- 이름: tomcat-server
- AMI: Amazon Linux 2
- 사양: t2.micro
- 보안 그룹 생성: devops-sg
- 인바운드 규칙: 8080 포트 추가
- 키페어: jenkins-server 인스턴스와 동일한 devops-project-key
MobaXTerm 접속
root 계정으로 전환하여 java와 호환되는 corretto17를 활성화한 뒤 java17을 설치한다.
> sudo yum install java-17-amazon-corretto -y
EC2 인스턴스에 톰캣을 설치하기 위해서 tar.gz 파일에 우클릭해서 링크를 복사한다.
https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.97/bin/apache-tomcat-9.0.97.tar.gz
/opt 디렉터리에 파일을 다운로드하고 압축을 해제한다.
mv 명령어를 사용하여 디렉터리 이름을 변경한다.
/opt/tomcat/bin 디렉터리에 진입하여 ll 명령어로 파일을 살펴보면 startup.sh라는 파일을 확인할 수 있는데, 이 파일은 Tomcat을 시작하기 위한 스크립트가 담겨있다.
./startup.sh 명령을 이용하여 파일을 실행하고 브라우저에서 tomcat-server 인스턴스의 퍼블릭 IP:8080에 접속하면 톰캣 메인 화면을 볼 수 있다.
Manager App을 클릭하니 403 에러가 뜬다.
403 에러가 뜬 이유는 EC2 서버에서만 톰캣을 설치했기 때문이다.
외부 브라우저에서 접속하기 위해서는 context.xml 파일에 역할을 추가해야 한다고 한다.
find / -name context.xml 명령을 사용하여 context.xml 파일을 검색하면 총 5개의 파일이 보인다.
파일을 열어보면 Value 태그를 확인할 수 있는데, 리눅스 환경(톰캣 서버)에서만 접근할 수 있도록 작성되어 있다. 이를 주석해주면 외부 브라우저에서도 접근이 가능해진다.
host-manager와 manager에 있는 context.xml 파일에 주석 처리를 한 뒤 톰캣 서비스를 재시작해야 한다.
/opt/tomcat/bin 디렉토리로 돌아가 ./shutdown.sh를 실행하여 톰캣 서비스를 종료한 뒤 다시 ./startup.sh를 입력하여 실행한다.
403 에러가 떴던 브라우저로 이동하여 새로고침을하니 로그인 화면이 뜬다.
톰캣 서비스를 이용하기 위해서는 사용자를 등록하고 로그인해야 하는데, 이는 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="admin" roles="manager-gui, manager-script, manager-jmx, manager-status"/>
<user username="deployer" password="deployer" roles="manager-script"/>
<user username="tomcat" password="s3cret" roles="manager-gui"/>
사용자 등록 후 서비스를 다시 시작하고 톰캣 관리자로 로그인한다.
- username: tomcat
- password: s3cret
2. Jenkins server와 Tomcat server 연결하기
- 젠킨스 콘솔에서 Tomcat, deploy to container 플러그인 설치
- 젠킨스 콘솔에서 Tomcat 서버의 자격 증명(Credentials) 설정하기
* deploy to container plugin: 빌드 성공 후 컨테이너로 배포할 수 있도록 돕는 플러그인
우선 간편한 로그인을 위해서 젠킨스 서버의 admin 계정 비밀번호를 변경하겠다...
admin(우측 상단) > Configure > password 변경 > 재로그인
deploy to container 플러그인 다운로드
tomcat의 Credential을 등록한다.
jenkins - credentials - Add Credentials
사전에 톰캣 서버에서 사용자를 생성할 때 'deployer' 사용자를 생성했다.
<user username="deployer" password="deployer" roles="manager-script"/>
이 정보를 이용해서 젠킨스 서버에 배포자를 등록한다.
- Kind: Username with password
- Username: deployer
- password: deployer
- id: tomcat_deployer
- description: tomcat_deployer
새로운 프로젝트를 생성한다.
- 프로젝트 이름: BuildAndDeployJob
- Maven project 선택
- Description: Build code with help of maven and deploy it on Tomcat server
- git 레포지토리 경로: https://github.com/iamwooinge/hello-world.git
- build: pom.xml, clean install(=지우고 다시 설치한단 뜻)
- 빌드 후 조치 추가 - WAR/EAR files: Deploy war/ear to a container → 이 부분에서 깃헙 프로젝트에 있는 webapp.war가 저장된 파일 경로를 입력해야 한다. webapp/target 디렉터리에 있지만, 일반적으로 **/*.war를 사용한다.
- 빌드 후 조치 추가 - Containers: 톰캣 9는 플러그인에 문제가 있기 때문에 8을 선택한다. URL은 톰캣 서버에 접속하기 위한 IP:Port이다.
apply 후 저장 및 빌드
빌드가 종료되면 톰캣 브라우저에서 /webapp이라는 이름의 디렉터리가 생성된 것을 확인할 수 있다.
클릭하면 리포지토리에 존재하는 index.jsp 내용이 출력된다.
3. 코드 변경 후 Tomcat server에 코드 배포
hello-world 프로젝트의 index.jsp을 수정하고 리포지토리에 코드를 업로드한다.
코드 push가 완료되면 젠킨스 서버에서 빌드 작업을 한다.
빌드가 끝나면 다시 브라우저에 접속하여 코드가 변경된 것을 확인할 수 있다.
코드 배포를 무사히 마쳤지만, 이런 수정작업이 생길 때마다 일일이 빌드를 해줘야 하는 부분이 약간 번거롭다.
하지만 이 코드가 변경될 때마다 자동으로 빌드되도록 실행할 수 있는 기능을 제공하고 있다.
4. Poll SCM을 사용한 자동 빌드 및 배포하기
코드를 수정할 때마다 빌드를 해줘야하니 너무 귀찮다!
git 리포지토리가 업데이트되면 자동으로 빌드하여 코드를 업데이트하는 작업을 진행해보겠다.
BuildAndDeployJob 프로젝트에 들어가면 Source Code Management - Build Triggers(빌드 유발)를 확인할 수 있다.
다양한 빌드 트리거가 존재하는데, 현재 체크된 항목은 수동 빌드이다. (기본 설정임)
우리가 사용할 빌드 트리거는 Poll SCM이다.
Poll SCM은 리포지토리 변경 사항을 검토하고 변화가 없다면 빌드하지 않고, 변화가 생기면 빌드되는 방식이다.
스케줄 작성은 [분 시 일 월 요일]과 같이 하면 된다. 숫자나 *를 활용하여 스케줄을 작성한다.
모두 *로 채울 경우에는 1분마다 확인하게 된다.
Apply 후 Save 진행
로그인 페이지의 코드를 수정하고 깃허브에 코드를 업로드하면 젠킨스는 빌드 트리거에 의해 1분마다 변경 사항이 있는지 확인하고 업데이트한다.
빌드 시작 버튼을 누르지 않았는데도 빌드 트리거에 의해 새로 빌드가 되는 것을 확인할 수 있다.
로그를 확인하기 위해 console output 탭으로 가서 빌드 과정을 살펴보면 SCM으로 인해 빌드되고 있다는 문구를 볼 수 있다.
성공적으로 빌드가 완료되면 다시 돌아가서 사이트 새로고침을 한다.
코드 변경 사항이 제대로 적용된 것을 확인할 수 있다.
다음 포스팅에서는 Docker와 Jenkins를 연동하여 CI/CD 파이프라인을 구축할 것이다~!
'DevOps' 카테고리의 다른 글
CI/CD 파이프라인 구축하기 - 3.2 (Docker 컨테이너 자동 빌드 및 자동 배포) (0) | 2024.12.13 |
---|---|
CI/CD 파이프라인 구축하기 - 3.1 (Docker 설정 및 Jenkins SSH server 설정하기) (0) | 2024.12.13 |
[문제 해결] Dockerfile에서 tar 명령어 실행 안 될 때 해결 방법 (0) | 2024.12.13 |
CI/CD 파이프라인 구축하기 - 1 (Git, Jenkins, Maven(Java)) (3) | 2024.12.04 |
CI/CD란? 개념/주요 단계/장점 (1) | 2024.12.02 |