최근 CI/CD 환경에 관심이 생겨 공부를 시작했다.
그리고 회사에서 새로 시작하는 프로젝트에 도입해보고 싶다고 말씀드린 후
며칠간 삽질끝에 성공적으로 CI/CD 환경을 구성 할 수 있었다.
그래서 이 경험을 기록하고 공유할 겸 블로그에 포스팅해보려고한다.
1. CI/CD 란?
1) CI ( Continuous Integration : 지속적인 통합)
- 변경사항을 다른 팀원이 접근할 수있는 main 리파지토리에 빈번하게 Merge 및 Build, Test 자동화
- => 지속적이고 잦은 Merge로 충돌을 줄일 수 있다.
- => 자동화 프로세스로 생산성을 향상시킬 수 있다.
2) CD ( Continuous Delivery / Deployment : 지속적인 제공/배포)
- 변경사항을 리파지토리에 릴리스 및 프로덕션 환경에 배포 자동화
- Continuous Delivery : 담당자의 검증 후 프로뎍션 환경에 수동 배포하는 방법
- Continuous Deployment : 검증 단계 없이 프로덕션까지 자동 배포하는 방법
- => 변경사항을 작은 단위로 릴리스해서 배포 리스크를 줄일 수 있다.
2. Jenkins로 CI/CD 구축하기
개발환경에 따라 Jenkins 환경도 달라질 수 있으니 주의하자.
톰캣은 처음에 같은 서버에 설치했다가 보안 문제로 분리했는데, 두가지 방법 다 서술할 예정이다.
- OS : Ubuntu 22.04.3 LTS
- Tomcat : 9.x
- JDK 1.8 (프로젝트용)
- JDK 17 (Jenkins running용)
1) Jenkins , Java 버전 체크
설치 하기 전에 반드시 Java 버전과 Jenkins 버전을 맞춰야한다.
Jenkins는 플러그인 기반으로 구축되어 있는데, 이 때문에 설치 후에도 버전 업데이트 시 주의해야한다.
이것은 성공적으로 설치 후 업데이트 했다가 재설치로 하루 날린 사람의 경험담....ㅠㅠ
일반적으로는 위 링크를 참조해서 서버에 설치한 Java 버전에 Jenkins를 맞추면된다.
하지만 이번 프로젝트 개발환경은 Java 8로 결정되었고, 거기에 맞추려니 jenkins 버전을 너무 낮춰야했다.
Jenkins는 플러그인 기반으로 구성되어있기 떄문에, 가능하면 최신버전을 사용하고 싶었다.
스토어에서 받을 때마다 다운그레이드 하고싶지도 않고,
필요한 플러그인이 해당 버전을 지원하는지 여부도 알수 없었기 때문이다.
해당 이슈는 Jenkins Running용 JDK를 따로 받는 방법으로 해결했는데 3)에서 자세히 다룰 예정
2) Jenkins 설치 ( 저장소 key 활용)
#Jenkins 리파지토리 추가
curl -fsSL https://pkg.jenkins.io/debian/jenkins.io-2023.key | sudo tee \
/usr/share/keyrings/jenkins-keyring.asc > /dev/null
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
https://pkg.jenkins.io/debian binary/ | sudo tee \
/etc/apt/sources.list.d/jenkins.list > /dev/null
#apt(저장소) 업데이트
sudo apt update
#jenkins 설치
sudo apt install jenkins
#enkins 설치 경로 확인
dpkg -L jenkins
2023년 3월 28일 부터 적용된 릴리스를 Linux 서버에 설치 할 때는 저장소 key를 사용해야한다.
자세한 설명은 jenkins 공식 홈페이지 릴리스 노트로 대신한다.
3) Jenkins 환경 설정파일 수정
에디터는 vi 로 적었지만 nano 등 다른 툴을 써도 상관없다!
설정한 port에 대한 인바운드 트래픽도 허용해야하는데, 포스팅 목적상 방화벽 설정은 생략한다.
Jenkisn는 2개의 환경설정 파일이 있는데 수정할 내용은 다음과 같다.
1. port 변경 (Jenkins 기본 port는 8080이라 톰캣과 겹치기 때문)
2. Jenkins Running용 JDK 환경변수 추가
#설정파일1 편집
sudo vi /usr/lib/systemd/system/jenkins.service
#설정파일2 편집
sudo vi /etc/default/jenkins
##################[ jenkins.service ]##################################################
# The Java home directory. When left empty, JENKINS_JAVA_CMD and PATH are consulted.
Environment="젠킨스 구동용 JDK 절대경로"
# Port to listen on for HTTP requests. Set to -1 to disable.
# To be able to listen on privileged ports (port numbers less than 1024),
# add the CAP_NET_BIND_SERVICE capability to the AmbientCapabilities
# directive below.
Environment="JENKINS_PORT=포트수정"
#################[ default/jenkins ]######################################################
# arguments to pass to java
JAVA_HOME="젠킨스 구동용 JDK 절대경로"
# port for HTTP connector (default 8080; disable with -1)
HTTP_PORT=포트수정
#########################################################################################
4) Jenkins 서비스 시작 및 자동 시작 설정
# Jenkins 서비스 상태 확인
# 시작 전에는 빨간색으로 멈춰있고, 시작 후에는 초록색으로 구동된 것을 확인할 수 있다.
sudo systemctl status jenkins
# Jenkins 서비스 시작
sudo systemctl start jenkins
# 부팅 시 Jenkins 자동 실행
sudo systemctl enable jenkins
# 로그 확인
sudo tail -n 100 /var/log/syslog | grep jenkins
sudo journalctl -u jenkins.service -b
5) Tomcat role 설정
해당 파일에서 아래 내용을 찾아서 username, password를 설정 후 Tomcat을 재실행한다.
IP:톰캣포트 로 웹에서 접속했을 때 Manager App에 접근 가능하면 잘 설정된 것이다!
#Tomcat 권한 설정
sudo vi /절대경로/apache-tomcat-9.0.90/conf/tomcat-users.xml
############[ 수정내용 ]##############
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="your-username" password="your-password" roles="manager-gui,manager-script"/>
######################################
💡시리즈
🙏레퍼런스
'DevOps' 카테고리의 다른 글
02. Jenkins를 활용해 CI/CD 환경 구축하기 : jenkins 관리 (0) | 2024.08.01 |
---|---|
[Linux] 리눅스 기본 명령어 정리 (0) | 2024.07.29 |
02. ubuntu : openssh, nano, mysql 설치 및 외부접근 설정 (0) | 2024.04.10 |
01. 가상머신 VMare , ubutu 설치 (0) | 2024.04.02 |