본문 바로가기
Server & Network/Linux

[Jenkins] Ubuntu 환경에서 젠킨스(Jenkins) 설치

by AustinProd 2022. 4. 19.

Ubuntu 서버에 젠킨스 설치하는 방법에 대해 정리한다. 설치법에 앞서 간단히 젠킨스(Jenkins)란 무엇인지, 왜 사용하는지 알아보고 설치 방법에 대한 내용을 공유하려고 한다.

 

젠킨스(Jenkins)란?

젠킨스란 서버에 애플리케이션을 자동으로 빌드하고 배포하게 도와주는 CI/CD 툴이다. 오픈 소스 패키지로 Ubuntu 환경에서 기본적으로 제공해주는 패키지 모듈 중 하나다.

 

젠킨스를 사용하면 애플리케이션을 서버에 실행시키는 과정을 자동화시킬 수 있다. 여기서 실행시키는 과정이란 소스코드의 최신화 -> 빌드 -> 배포 -> 실행 등의 단계를 나타내는데, 개발자가 하나씩 손으로 진행해야 했던 작업들을 통합할 수 있다.

 

덧붙여, 젠킨스는 각 단계마다 에러가 있는지, 혹은 성공적으로 작업이 끝났는지에 대해 테스트 및 로깅 기능을 제공한다. 애플리케이션 배포 단계에서 실패를 하더라도 왜 실패했는지 개발자가 모니터링할 수 있는 환경을 제공해주기도 하며, 잘못된 소스가 서버에 올라가지 않도록 롤백과 같은 기능도 제공한다.

 

젠킨스 설치 가이드

설치에 대해서 나는 총 5 단계로 나누어 보았다. 젠킨스의 단순 실행뿐만 아니라 실행 환경 설정에도 추가 작업이 요구되기에 필요 가이드가 길어졌다.

 

  1. Java 설치
  2. 젠킨스 설치
  3. 젠킨스 실행
  4. 방화벽 설정
  5. 젠킨스 접근

 

1. Java 설치

젠킨스 실행에는 8 혹은 11 버전 Java 가 필수적으로 요구된다. 그렇기 때문에 젠킨스 설치 전, Linux 패키지 매니저로 jdk 혹은 jre를 미리 설치해야 한다. 나는 해당 서버에서 Java 실행 환경만 필요했기 때문에 8 버전의 jre를 설치했다.

 

# Java jre 8 버전 설치
sudo apt-get install openjdk-8-jre

 

2. 젠킨스 설치

Ubuntu 패키지에 포함된 젠킨스는 종종 최신 버전에서 밀린 버전을 제공한다. 만약, 최신 버전의 젠킨스를 사용하고자 하는 유저라면 뒤 두 가지 과정을 진행해주는 것이 좋다.

 

첫 번째는 서버 시스템에 저장소 키값(Repository Key)을 다운받아 저장하는 것이다. 실행이 성공한다면 터미널 콘솔에 'OK' 값을 반환할 것이다.

 

# 시스템에 저장소 키 값 추가   
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
> OK

 

두 번째 과정은 데비안(Debian) 패키지 저장소 주소를 서버의 sources.list 에 추가하는 작업이다.

 

# sources.list에 주소값 추가
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'

 

이제 본격적으로 젠킨스를 서버에 설치해주면 된다. apt를 업데이트시켜 새 저장소를 생성하게 한 뒤, jenkins를 설치하도록 하자.

 

# apt 최신화
sudo apt update

# 젠킨스 설치
sudo apt install jenkins

 

3. 젠킨스 실행

패키지 설치가 끝나면 바로 서버에서 실행시켜보자. 아래 명령어로 실행과 실행 상태 체크를 진행할 수 있다. systemctl 혹은 netstat 명령어로 확인할 수 있으며, 상태값이 active 혹은 8080 포트가 활성화되었다면 실행은 성공적으로 이루어졌다 생각하면 된다.

 

# 실행
sudo systemctl start jenkins

# 실행 확인 (systemctl)
sudo systemctl status jenkins
> ● jenkins.service - Jenkins Continuous Integration Server
    Loaded: loaded (/lib/systemd/system/jenkins.service; enabled; vendor preset: enabled)
    Active: active (running) since Tue 2022-04-19 06:00:45 UTC; 32min ago
  Main PID: 13482 (java)
    Tasks: 39 (limit: 4915)
    CGroup: /system.slice/jenkins.service
            └─13482 /usr/bin/java -Djava.awt.headless=true -jar /usr/share/java/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8080


# 실행 확인 (netstat)
netstat -tnlp
> Active Internet connections (only servers)
  Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
  tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -
  tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
  tcp6       0      0 :::22                   :::*                    LISTEN      -
  tcp6       0      0 :::8080                 :::*                    LISTEN      -

 

4. 방화벽 설정

젠킨스의 기본 실행 포트는 8080번이다. 젠킨스가 실행되면 웹 브라우저로 동작하기 때문에 외부에서 확인할 수 있어야 한다. 그렇기 때문에 이 실행 포트에 대한 방화벽을 허용하게끔 설정할 것이다. 덧붙여 나는 방화벽 정책 설정 시, 서버에 ssh 접근을 허용하는 룰도 추가하였다.

 

# 젠킨스 실행 포트 접근 허용 (8080)
sudo ufw allow 8080

#  ssh 접근 허용 규칙 추가
sudo ufw allow OpenSSH

# 서버 방화벽 상태 확인
sudo ufw status

To                         Action      From
--                         ------      ----
8080                       ALLOW       Anywhere
OpenSSH                    ALLOW       Anywhere
8080 (v6)                  ALLOW       Anywhere (v6)
OpenSSH (v6)               ALLOW       Anywhere (v6)

 

만약 방화벽 상태 확인 과정에서 반환값이 inactive 일 수 있다. 서버 방화벽이 비활성화되어 있는 상태라고 할 수 있는데, 아래 명령어로 방화벽 설정을 활성화시켜주고 다시 상태 확인을 하면 된다.

 

# 방화벽 활성화
sudo ufw enable

 

5. 젠킨스 설정

위 과정을 잘 따라왔다면 웹 브라우저에서 우리가 설치한 젠킨스 화면을 확인할 수 있다. http://[ip 혹은 domain]:8080 을 주소창에 입력하면 아래와 같은 화면을 확인할 수 있다. 우선 이 화면까지 접속할 수 있는 거면 서버에서의 설치는 잘 이루어졌다 보면 된다.

 

젠킨스 초기 접근 화면

 

화면 입력창에 접근 코드를 입력하라고 명시되어 있다. 화면 안에 빨간색으로 하이라이트 된 경로를 참고해 접근 코드값을 얻을 수 있다. 코드값은 총 32자리 문자열이고, 아래 명령어를 서버에서 실행하면 된다.

 

# 접근 코드 확인 (32자리 문자열 반환)
sudo cat /var/lib/jenkins/secrets/initialAdminPassword

 

마치며

지금까지 젠킨스 설치 및 구동에 대해 알아보았다. 하지만, 아직 실제로 젠킨스에 대한 사용 설정(예를 들어, plugin, credential, job 등)에 대한 것도 그렇고 실제 CI/CD 기능 사용법에 대해 소개하지는 못했다. 이어지는 포스트에서 젠킨스에 대한 보다 자세한 내용을 공유할 수 있도록 하겠다.

댓글