상황
1. 회사에서 운영 중인 서비스 중 CI/CD 구축이 안되어 있는 서비스가 있다.
2. 현재까지도 각 서버에 수작업으로 배포를 진행...
3. 타팀은 이미 구축했다던데...
4. 우리 팀은 왜..?
5. 뒤쳐지는 꼴 나는 못 봐.
6. 과감히 회의 때 CI/CD 구축을 건의드렸다.
7. 예, 제가 한번 객기를 부려보겠습니다.
(문제는 내가 한 번도 해본 적이 없다는 것이죠^0^...)
CI/CD란?
Continuous Intergration / Continuous Deployment, 지속적인 통합과 지속적인 배포를 의미한다. 사실 CI/CD 필요성에 대해서 그동안 와닿기가 힘들었다(사이드 프로젝트는 운영하는 서버 하나에 보내면 됐으니깐). 근데 실무에서는 운영하는 서비스를 개발, 스테이징, 운영 서버로 각각 나눠 엄격하게 관리하고 최종 릴리즈된 버전이 운영 서버에 최종 배포가 되어야 하니깐 통합과 배포가 얼마나 중요한지 실무를 경험하고 나서야 느낄 수 있었다. 그리고 꽤나 큰 프로젝트를 일일이 수작업으로 배포하는 과정을 보고도 자동화 이야기를 꺼내지 않을 수가 없었다. 내가 떠올린 방법은 두 가지였다.
- 젠킨스만을 이용한 CI/CD
- 도커와 젠킨스를 이용한 CI/CD
젠킨스를 처음 이용하는 것이기도 하고 도커의 필요성을 뼈저리게 느낄 겸 젠킨스만을 이용해서 CI/CD를 구축해 보기로 했다. 우선 내 로컬 환경에 테스트를 진행해 보고 회사 서비스에 도입해 봐야겠다.
AWS EC2
먼저는 AWS EC2 인스턴스 하나를 프리티어를 이용해 생성했다. 기본 프리티어를 사용해서 생성 시엔 별다른 이슈 없었으나 인스턴스 재구동 시 퍼블릭 주소가 변경되는 이슈가 있었다.
- 탄력적 IP를 이용하자!
고정 IP 발급 후 인스턴스와 연결
인스턴스 재구동 시 퍼블릭 주소가 변경되는 이슈를 해결하기 위함
- 리눅스 아이디 / 비밀번호로 접근하는 방법
.pem 키로 ec2 접속
sudo adduser ${생성할 유저 아이디} : 아이디 생성
sudo passwd ${생성한 유저 아이디} : 비밀번호 설정
/etc/sudoers 수정권한 추가
sudoers 맨 밑에 생성한 계정에 권한 추가
sshd restart 진행
신규 아이디 접속
참고한 래퍼런스: https://goddaehee.tistory.com/271
- 포트설정
보안그룹 인바운드 규칙 외에 리눅스 설정에서 포트 정보를 등록해야 한다.
sshd_config: 보안그룹에서 설정한 Port 설정
/etc/services: Port 정보 등록
- FTP 설정
FTP 프로토콜을 이용하기 위해 vsftpd 설치를 진행했다.
yum을 통해 vsftpd 설치
vsftpd.conf에서 pasv 설정(아래 내용)
#pasv options added
pasv_enable=YES
pasv_min_port=1024 #Port 설정
pasv_mac_port=1048 #Port 설정
pasv_address=xx.xxx.xxx.xxx #퍼블릭 주소
참고한 래퍼런스: https://app-developer.tistory.com/92
- Java 설치
Java 1.8 버전을 설치했고, 이게 나에게 어떤 고통을 가져다 줄지 이때까진 알지 못했다..
JDK, 컴파일러 설치 후 환경변수 설정
- Tomcat 설치
WAS로 이용할 톰캣을 설치했다.
CATALINA_HOME 환경설정: 톰캣 디렉토리 절대경로
* Java 설치가 선 수행 되어야 한다.
참고한 래퍼런스: https://kitty-geno.tistory.com/26
정말 순조로웠다. 하지만 젠킨스를 설치한 후 젠킨스가 구동이 되지 않았다...
이후 삽질에 관해서는 2편에서
'Infra' 카테고리의 다른 글
[jenkins] 신입의 객기 - 자동화 여정 (End) (0) | 2023.04.27 |
---|---|
[jenkins] 신입의 객기 - 자동화 여정 (2) (0) | 2023.03.20 |
[tomcat] Session Deep Dive (0) | 2023.02.08 |