마루옵스서버 · 네트워크 · AI 기술 노트

소개문의

[Jenkins 시작하기 01] Ubuntu에 Jenkins LTS 설치하기: Java·초기 설정·접속

Ubuntu에서 Java 21, LTS 저장소, systemd 서비스, 초기 설정으로 이어지는 Jenkins 설치 흐름
Ubuntu Jenkins 설치 흐름을 설명하는 개념도 · MaruOps

배포할 때마다 같은 명령을 다시 입력하고 있다면, 먼저 그 작업을 기록으로 남기는 것부터 시작해도 좋습니다. Jenkins는 정해 둔 명령을 실행하고 결과를 보관하는 자동화 서버예요. 코드를 가져와 테스트하고, 통과한 결과물만 다음 단계로 넘기는 흐름을 만들 수 있습니다.

이 글은 Ubuntu 24.04 LTS의 별도 학습용 VM에 설치하는 과정입니다. Rocky Linux 9을 사용한다면 02 Rocky Linux 9 설치으로 이동하세요. 기존 서비스가 실행 중인 블로그 서버에 Jenkins까지 얹는 구성은 이 연재의 설치 대상이 아닙니다.

Jenkins 시작하기 · 01 Ubuntu 설치 · 02 Rocky Linux 9 설치 · 03 첫 작업과 Pipeline · 04 자동화 활용

이 글의 목차

어떤 구성을 만들 것인가

CI(지속적 통합)는 변경한 코드를 자주 합치고 빌드·테스트로 문제를 빨리 찾는 흐름입니다. CD는 문맥에 따라 지속적 전달 또는 지속적 배포를 가리킵니다. 배포 가능한 결과물을 준비하고 사람이 승인할지, 운영 반영까지 자동으로 진행할지를 구분해 두세요. Jenkins를 설치하는 것만으로 이 절차가 정해지는 것은 아닙니다.

설치할 Jenkins는 작업을 관리하는 컨트롤러입니다. 실제 빌드는 별도의 에이전트에서 실행하도록 3편에서 연결합니다. 실습에서도 이 역할을 나눠 두면 나중에 빌드 도구나 배포 권한이 늘어날 때 덜 헷갈립니다.

항목이 글의 기준
운영체제Ubuntu Server 24.04 LTS, sudo 가능한 계정
JavaOpenJDK 21 런타임
JenkinsLTS 저장소 사용. 2026년 10월 18일 확인한 최신 LTS는 2.580.1
VM 자원학습 시작값: 2 vCPU·RAM 4GB·디스크 50GB. 빌드 부하와 보관량에 따라 조정
주소 예시컨트롤러 192.168.56.20 / 에이전트 192.168.56.31
브라우저 접속SSH 터널을 열고 PC의 http://127.0.0.1:18080 사용

LTS는 운영 중 변경 폭을 관리하기 좋은 출발점입니다. 숫자 자체를 오래 고정하기보다는 설치일의 LTS 변경 내역과 업그레이드 안내를 확인하세요. 현재 런타임 지원 목록에는 Java 21과 25가 있으며, 애플리케이션을 빌드하는 JDK 버전은 Jenkins 런타임과 따로 관리할 수 있습니다. Java 지원 정책을 기준으로 이 글에서는 Java 21을 사용합니다.

1. 운영체제와 Java부터 확인한다

cat /etc/os-release
uname -m
df -h /
free -h
sudo apt update
sudo apt install -y ca-certificates curl fontconfig openjdk-21-jre git
java -version

java -version에서 주 버전이 21인지 확인합니다. 패치 번호는 업데이트 시점마다 달라요. Jenkins는 Java로 실행되는 프로그램이므로 Java를 먼저 준비해야 서비스가 시작될 때 사용할 실행 파일을 찾을 수 있습니다.

Java 17을 사용하는 다른 애플리케이션이 함께 있다면 시스템 기본 Java를 무턱대고 바꾸지 않습니다. Jenkins 서비스에만 JAVA_HOME 또는 JENKINS_JAVA_CMD를 지정할 수 있습니다. 설치 후 systemctl cat jenkins에서 지원하는 환경 변수와 실제 경로를 확인하세요.

2. 공식 LTS 저장소와 서명 키를 등록한다

sudo install -d -m 0755 /etc/apt/keyrings
sudo curl -fsSLo /etc/apt/keyrings/jenkins-keyring.asc \
  https://pkg.jenkins.io/debian-stable/jenkins.io-2026.key
sudo chmod 0644 /etc/apt/keyrings/jenkins-keyring.asc
printf '%s\n' \
  'deb [signed-by=/etc/apt/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/' \
  | sudo tee /etc/apt/sources.list.d/jenkins.list >/dev/null
sudo apt update
apt-cache policy jenkins

signed-by는 이 저장소의 서명을 검사할 키를 지정합니다. 오래된 글의 apt-key 방식이나 예전 연도가 붙은 키 주소를 그대로 섞지 마세요. apt update에 서명 오류가 있으면 다음 단계로 넘어가지 말고 저장소 주소·키 파일·서버 시간을 먼저 확인합니다. 설치 명령의 출처는 Jenkins Linux 설치 문서입니다.

3. 접속 범위를 정하고 Jenkins를 설치한다

실습에서는 Jenkins의 HTTP 포트를 서버 내부에서만 열고 SSH로 접속합니다. 설치 전 drop-in 파일을 만들어 패키지가 서비스를 자동 시작해도 이 설정을 읽도록 합니다.

sudo install -d -m 0755 /etc/systemd/system/jenkins.service.d
sudo tee /etc/systemd/system/jenkins.service.d/override.conf >/dev/null <<'EOF'
[Service]
Environment="JENKINS_LISTEN_ADDRESS=127.0.0.1"
EOF
sudo apt install -y jenkins
dpkg-query -W -f='${Package} ${Version}\n' jenkins
sudo systemctl daemon-reload
sudo systemctl enable --now jenkins
sudo systemctl restart jenkins
sudo systemctl status jenkins --no-pager -l
sudo ss -ltnp '( sport = :8080 )'

active (running)과 127.0.0.1:8080 리슨을 함께 확인합니다. 서비스가 실행 중이라는 표시만 보고 브라우저 문제를 판단하면, 다른 주소나 다른 포트로 접속한 상황을 놓치기 쉽습니다.

환경 설정은 배포판의 유닛 원본을 고치는 대신 /etc/systemd/system/jenkins.service.d/override.conf에 둡니다. 패키지를 업데이트해도 사용자의 설정을 따로 관리할 수 있어요. Jenkins systemd 관리 문서에서도 drop-in 방식을 안내합니다.

4. PC에서 SSH 터널을 열고 접속한다

아래 명령은 Jenkins VM이 아니라 브라우저를 사용할 PC의 터미널에서 실행합니다. Windows 11이라면 OpenSSH 클라이언트가 있는 PowerShell에서도 사용할 수 있어요. labadmin과 IP는 실제 VM 계정·주소로 바꿉니다.

ssh -N -L 18080:127.0.0.1:8080 labadmin@192.168.56.20

이 터미널을 열어 둔 채 http://127.0.0.1:18080으로 접속합니다. PC의 18080번 연결이 SSH를 통해 VM 내부 8080번으로 전달되는 구조입니다. 이 구성에서는 VM 방화벽에 8080번을 추가로 열 필요가 없고, PC에서 VM의 SSH 포트에 접근할 수 있어야 합니다.

터널을 닫으면 PC의 해당 주소로 접속되지 않는 것이 정상입니다. 이후 팀이 사용할 주소를 마련할 때는 HTTPS 리버스 프록시와 접근 제어를 붙이고 Jenkins URL도 그 주소로 변경합니다. localhost 주소는 이 개인 실습용 접속에만 사용하세요.

5. 초기 비밀번호와 관리자 계정을 설정한다

sudo cat /var/lib/jenkins/secrets/initialAdminPassword
  1. 화면의 Unlock Jenkins에 출력된 초기 비밀번호를 입력합니다. 이 값은 공개 글·스크린샷·채팅에 복사하지 않습니다.
  2. 처음이라면 Install suggested plugins로 시작하고, 완료 후 실제 설치 목록을 확인합니다.
  3. 별도의 관리자 계정을 만듭니다. 자동화 작업용 계정과 관리자 계정은 나눠 관리합니다.
  4. 개인 실습의 Jenkins URL은 현재 브라우저에서 쓰는 주소로 설정합니다. 공용 운영 주소를 준비하면 그때 변경합니다.
  5. Manage Jenkins → Plugins에서 Git, Pipeline, SSH Build Agents, Credentials Binding을 확인합니다. 다음 실습에 없는 기능을 위해 플러그인을 먼저 잔뜩 설치할 필요는 없습니다.

관리자 계정까지 생성했다면 설치의 첫 구간은 끝났습니다. 아직 에이전트를 붙이지 않았으므로 3편의 에이전트 연결을 마친 뒤 컨트롤러의 실행기 수를 0으로 바꾸고 작업을 실행합니다.

접속이 안 될 때 확인할 순서

증상먼저 볼 곳
서비스가 바로 종료됨journalctl의 Java 버전·파일 권한·포트 충돌 메시지
SSH 터널 생성 실패PC의 18080번 충돌, VM 주소, SSH 로그인 가능 여부
터널은 열렸지만 연결 거부VM에서 Jenkins가 127.0.0.1:8080을 리슨하는지
플러그인 다운로드 실패VM의 DNS·시간·외부 HTTPS 연결·사내 프록시/CA
apt 서명 오류2026 키 주소와 signed-by 경로. 검증을 끄는 옵션으로 우회하지 않음
sudo journalctl -u jenkins -b -n 100 --no-pager
sudo systemctl cat jenkins
sudo ss -ltnp '( sport = :8080 )'
curl -I http://127.0.0.1:8080/login
timedatectl status

8080번을 다른 서비스가 이미 사용한다면 해당 서비스를 임의로 종료하지 말고 Jenkins drop-in에 Environment="JENKINS_PORT=8081"을 추가할 수 있습니다. 변경 후 서비스 재시작과 SSH 터널의 목적지 포트 변경을 함께 해야 합니다.

다음은 03 첫 작업과 Pipeline입니다. 설치 화면을 넘긴 뒤 실제로 어떤 계정과 머신에서 명령이 실행되는지 확인해 보겠습니다.

댓글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

닉네임·이메일·댓글 내용·IP 주소·브라우저 정보는 댓글 게시 및 관리에 사용됩니다. 이메일과 접속 정보는 공개 댓글에 표시하지 않습니다. 개인정보 요청은 운영자 이메일로 보내 주세요. 개인정보처리방침