들어가며
안녕하세요. 오랜만입니다.
회사 생활로 퇴근하면 너무 피로해 글을 많이 올리지 못했는데 그래도 다시 꾸준히 이것저것 올려보려합니다.
얼마 전, Oracle Cloud의 VM 을 사용해 직접 Jenkins 환경을 구축해보았습니다.
사이드 프로젝트 Havit 을 세상에 내놓을 때까지 아직 CI/CD 라고 할 것도 없이 그냥 Github Actions 를 사용해 후딱 배포 환경을 만들어두고 지냈는데요.
백엔드 스프린트 목표 중 하나로 Jenkins 도입을 생각해놔서 대표적인 CI 툴인 Jenkins를 통해 빌드 환경을 제대로 구성해보려고 합니다.
Oracle Cloud
늘 컴퓨팅 머신을 써야 한다면, AWS 프리티어를 이용해 EC2 1개씩 받아서 사용했는데요.
여러 클라우드 서비스 제공 업체들 비교를 보니 오라클 클라우드에서는 프리티어에 VM 머신을 2개나 준다는 글을 보았습니다.
다만.. 명성대로 콘솔 UX/UI 가 정말 별로고, 가입하기가 너무 어렵습니다.
저도 2번정도 거절아닌 거절을 당하다 처음으로 가입에 성공해 프리티어 계정을 가질 수 있었습니다.
관련해서 가입 과정에 대해 참고한 블로그 링크를 하단에 첨부해놓겠습니다.
Jenkins 란?
Jenkins 란 소프트웨어 개발 시 지속적 통합(CI) 서비스를 제공하는 툴입니다. (위키백과)
다양한 빌드/배포에 대한 플러그인을 제공해주고, Jenkins 를 활용하여 여러 개발자들이 코드를 변경할 때마다 자동화된 테스트, 빌드, 배포 환경을 구축할 수 있습니다.
설치 이후 어려운 설정 없이 Jenkins 대시보드를 지원해주고, 프로젝트에 대한 파이프라인을 작성해주면 Jenkins 를 통한 지속적 통합이 가능합니다.
Oracle Cloud VM 생성
오라클 계정 생성에 성공했다면, 컴퓨트
-> 인스턴스
탭으로 이동합니다.
인스턴스 생성
버튼을 클릭해 생성합니다.
적당한 인스턴스 이름을 지정해주고, 이미지 및 구성
탭에서 이미지를 사용할 환경 이미지로 변경해줍니다.
저는 Ubuntu 22.04 이미지로 구성했습니다.
머신 타입은 항상 무료 적격
이라고 적힌 타입이 평생 프리티어 유형입니다.
이제 인스턴스에 연결할 수 있는 SSH Key 를 발급받아야 합니다. 보통의 경우 자동으로 키 쌍 생성을 선택해 발급받으면 됩니다.
AWS .pem
키 발급과 똑같다고 생각하시면 됩니다.
이외에 따로 구성하실 내용이 없다면 바로 생성해줍니다.
인스턴스 접속
인스턴스가 정상적으로 생성 되었다면 상태
가 실행 중으로 표시됩니다.
인스턴스 공용 IP 주소를 통해 인스턴스에 접속할 수 있습니다.
아까 받은 SSH Key 가 있는 디렉터리에서 터미널을 열어줍니다.
보통 AWS EC2 인스턴스 접속하듯 ssh 명령어를 사용해 접속합니다.
chmod 400 [name].key
ssh -i [name].key ubuntu@[ip]
SSH Key 에 권한을 수정하고, ssh 접속하는 명령어입니다.
정상적으로 실행 되었다면 ubuntu 계정으로 인스턴스에 접속됩니다.
Jenkins 설치
기본적으로 root 환경에서 진행하겠습니다. Jenkins 설치는 매우 간단합니다!
Jenkins 실행을 위해 Java가 설치되어 있어야 합니다. Jenkins 공식 문서 설치 가이드에 따라 OpenJDK
를 설치해주겠습니다.
apt-get update
apt install openjdk-11-jdk -y
설치 후 Java 버전을 확인해봅니다. 아래처럼 나온다면 정상적으로 설치된 것입니다.
이제 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
위 명령어를 통해 리눅스 Debian 계열에서 사용할 수 있는 Jenkins 패키지를 받아옵니다.
apt-get update
apt-get instsall jenkins
apt update
진행 후 jenkins 를 패키지를 install 합니다.
Jenkins 공식 문서에 따르면, 설치 과정에서 다음 일들을 수행한다고 합니다.
- 시작 시 실행되는 데몬으로 Jenkins 설정
- Jenkins user 생성
- systemd-journald 를 통한 콘솔 출력
- 매개변수 구성
- 포트 설정 (기본적으로 8080)
참고
만약, 8080 포트가 이미 실행중이라면, Jenkins 는 systemctl edit jenkins 명령어를 통해 다음과 같이 8081 포트로 설정해줍니다.
[Service]
Environment="JENKINS_PORT=8081"
설치가 완료되었다면, Jenkins 상태를 확인해봅니다.
systemctl status jenkins
active 상태라면 제대로 설치되었습니다.
이제 8080 포트로 접속해볼까요? 아마도 접속이 안될 수 있습니다.
뭔가 빠뜨린 것 같은데요. 정답은 포트에 있습니다. AWS EC2 도 그렇듯 오라클도 인스턴스 포트를 열어줘야 접속할 수 있습니다.
인스턴스 포트 열기
오라클 콘솔에서 인스턴스 정보에 있는 subnet 규칙을 클릭해봅시다. 네이밍은 보통 subnet-숫자
로 구성되어 있을겁니다.
이렇게 보안 목록이 뜰텐데요. 기본 구성한 거라면 아마 1개의 보안 목록이 있을겁니다. 해당 목록으로 들어가줍니다.
이렇게 수신 규칙이 보입니다.
이곳에서 수신 규칙 추가
를 통해 jenkins 가 물고 있는 포트 8080을 열어주면 됩니다.
보안 상 특정 ip 대역에서만 열어야 한다면 맞게 설정해주시면 되고, 저는 연습용이기 때문에 0.0.0.0/0
모든 소스에서 열어주겠습니다.
추가로, nginx로 80포트로 포워딩 해줄 예정이라 80포트도 열어주었습니다.
HTTPS를 사용하실 예정이라면 443 포트도 열어줍시다.
nginx 설정
jenkins 가 물고 있는 8080 포트를 매번 입력해서 가기가 힘들잖아요. 포트를 공개하는 것도 좋은 방법이 아니고요.
따라서 nginx 를 통해 프록시 설정을 해주겠습니다.
nginx 설치는 아래와 같이 진행하면 됩니다.
apt-get install nginx
이제 nginx 에서 80포트로 들어오는 요청을 8080 으로 넘겨주는 설정을 해보겠습니다.
vim /etc/nginx/sites-enabled/default
nginx 의 default
파일에 설정을 다음과 같이 작성해줍니다.
location
블록이 80 -> 8080 프록시 설정을 해주는 부분입니다.
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
nginx 설정을 했다면 restart
를 합니다.
systemctl restart nginx
systemctl status nginx
Jenkins 설정
nginx 설정을 잘 마쳤다면, http://[인스턴스 ip]
접속 시 jenkins 설정 창이 뜹니다.
처음에는 비밀번호를 입력해야 하는데요. 초기 비밀번호는 화면에 나온 것 처럼 다음 경로에서 확인하면 됩니다.
cat /var/lib/jenkins/secrets/initialAdminPassword
plugin 은 Install Suggested Plugins
를 선택해주었습니다.
이렇게 다양한 플러그인 설정을 하는 창이 보입니다. 설치가 마무리 되면, user 설정 창이 나옵니다.
계정 정보를 설정하고 나면, 이제 jenkins 대시보드를 사용할 수 있습니다!
이제 사용하시는 프로젝트 환경에 맞게 파이프라인을 구성하시면 됩니다.
그럼 다음에도 유익한 글로 돌아오겠습니다.
참고
'DEV > 잡다한 개발 일지' 카테고리의 다른 글
MongoDB Associate Developer Node.js 자격증 합격 후기 (13) | 2024.10.13 |
---|---|
사이드 프로젝트를 세상에 내놓는다는 것 - HAVIT (5) | 2023.07.29 |
M1 MacOS Ventura ruby build failed error (Feat. XCode 14) (0) | 2023.01.18 |
[SOPT] 29대 서버 파트장 돌아보기 - 1 (8) | 2022.09.03 |
[tsoa] 첫 오픈소스 contributor 경험담 (6) | 2022.07.26 |