DevOps & Infra/CICD

[Jenkins]실제 Linux CentOS7서버에 원격으로 접속해서 Jenkins 설치하기

롱하 2025. 3. 27. 16:41

* Jenkins 개발기 테스트 흐름

[개발PC]
     ↓ SSH로 접속
[리눅스(CentOS7) PC]
     → Jenkins 설치 (서버에)
     → Git 연동 (브랜치 Push 감지)
     → React/Spring 빌드 자동화
     → Docker 이미지 빌드 & 컨테이너 재시작

 

 

 

1. Putty로 내 CentOS7 PC 원격으로 접속

 

2. Jenkins 설치 시작

 

 

(1) Jenkins 저장소 등록

sudo wget -O /etc/yum.repos.d/jenkins.repo \
https://pkg.jenkins.io/redhat-stable/jenkins.repo

sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key

 

(2) Jenkins 설치

sudo yum install jenkins -y

 

(3) Jenkins 시작 + 부팅 시 자동 실행

# Jenkins 실행
sudo systemctl start jenkins

# 서버 부팅 시 자동으로 실행되게 설정
sudo systemctl enable jenkins

 

 

[Error 과정]

 

* 여기서 에러사항 발생

'sudo systemctl start jenkins'부터 Failed to start ~ Unit not found 메시지가 뜸

> 이건 Jenkins가 아직 설치되지 않았거나, 서비스로 등록되지 않았을때 발생하는 에러

 

 

* 원인 : 기존에 타인이 테스트하던 다른 저장소에서 SSL 관련해서 오류가 난 상태였고 해당 저장소 비활성화 후 진행

> yum은 기본적으로 모든 저장소가 문제 없이 연결되어야 설치를 진행하고, 하나라도 실패하면 '안전하지 않다'라고 판단해서 설치를 중단한다.

 

# 해결

sudo yum --disablerepo=opensearch install jenkins -y

해당 저장소인 'opensearch'는 무시하고 Jenkins는 나머지 정상 저장소에서 받아서 설치 완료 !

 

다시 'sudo systemctl start jenkins' 메시지 입력하고 실행 완료

 

 

* Jenkins 제대로 실행중인지 확인 > Fail 발생

sudo systemctl status jenkins

 

 

* Jenkins 실행이 왜 실패 했는지 먼저 파악해보기

 

에러 1 : Jenkins가 여러 번 시도했는데 계속 실패해서 systemd가 멈춘 상태

start request repeated too quickly for jenkins.service

 

 

에러 2 : jenkins.service 설정파일에서 systemd 버전이 인식 못하는 옵션이 있다는 뜻 (CentOS7에서 자주 등장)

Unknown lvalue 'StartLimitBurst' in section 'Unit'
Unknown lvalue 'StartLimitIntervalSec' in section 'Unit'

 

 

 

# 해결

 

해결1]

jenkins.service 파일 열고

sudo vi /usr/lib/systemd/system/jenkins.service

 

 

[Unit]섹션 안에 있는 다음 두 줄을 삭제 처리

StartLimitBurst=
StartLimitIntervalSec=

 

 

> 근데 여기서도 계속 실패하기 시작했고, 내부적으로 Jenkins 실행 중 에러 발생 중이라고 판단

 

해결 2]

- jenkins.log 로그 파일이 아예 없음 → Jenkins가 아예 실행도 안 됐다는 뜻 

- CentOS7에서 가장 흔한 이유는 JAVA_HOME 미지정 문제

 

그래서,

Jenkins에 정확한 Java 경로 지정해주기

 

1. Java가 실제로 어디있는지 확인

readlink -f $(which java)

 

2. Jenkins에 Java경로 지정하기위해 vi 들어가기

sudo vi /etc/sysconfig/jenkins

 

 

> 이렇게 했는데 아무것도 안뜨는 화면 발생

 

  • 결과: "빈 화면"만 보임
  • 하단에는: "/etc/sysconfig/jenkins" [New File]
    → 즉, 이 파일이 존재하지 않아서 새로 만들어진 상태

> Jenkins 설치가 중간에 비정상적으로 종료됐거나, 설치 후 이 설정 파일이 자동으로 생성되지 않았을 수 있음

 

그래서 직접 Java 경로만 딱 넣기로 함.

 

근데 위에서 'readlink -f $(which java)'를 통해서 Java 경로를 확인했을때 11이 떴고, 난 17로 진행하기 위해서 17버전을 새로 설치하고 진행하기로 함.

 

* Java 17 설치 (CentOS 7 기준)

sudo yum install java-17-openjdk java-17-openjdk-devel -y

devel까지 설치해야 Jenkins가 빌드 관련 기능도 잘 쓴다.

 

에러 발생 !

No package java-17-openjdk available.
No package java-17-openjdk-devel available.

즉, CentOS 기본 저장소에 Java17이 없음.

CentOS 7은 오래된 버전이라서 기본 yum repo에 최신 Java가 빠져있는 경우가 많다.

 

* 해결책 : EPEL + AdoptOpenJDK 저장소 추가 > 그러면 Java 17 설치 가능해진다.,

 

Step 1 : EPEL 저장소 추가

sudo yum install epel-release -y

 

* 에러발생 !

'No package epel-release available.'

  • 이미 설치되어 있거나, 설치는 됐지만 yum에는 아직 안 반영된 상태
  • CentOS 7에서 사용 가능한 EPEL mirror가 yum 설정에 누락됐거나 막혔음
  • yum 캐시가 오래되어 인식 못함

 

> 굳이 epel-release에 의존하지 않고, Java 17 설치를 위한 Adoptium 저장소만 추가

 

 

Step 2 : AdoptOpenJDK 저장소 등록 (Java 17 제공하는 공식 repo)

sudo rpm --import https://packages.adoptium.net/artifactory/api/gpg/key/public

sudo tee /etc/yum.repos.d/adoptium.repo <<EOF
[Adoptium]
name=Adoptium
baseurl=https://packages.adoptium.net/artifactory/rpm/centos/7/$(uname -m)
enabled=1
gpgcheck=1
gpgkey=https://packages.adoptium.net/artifactory/api/gpg/key/public
EOF

 

Step 3 : Java 17 (Temurin 17) 설치 (Adoptium 제공)

sudo yum install temurin-17-jdk -y

 

Step4 : 설치 확인 및 경로 확인

java -version
readlink -f $(which java)

 

 > 이제 이 경로를 Jenkins 설정에 반영하면 끝 !

 

근데 여기서 내 기본 자바 설정이 11로 되어있기 때문에 readlink ~ 명령어 보냈을때 11버전의 경로가 떴다.

그래서 Java 17 경로를 직접 찾아서 설정에 반영하기로함.

 

ls /usr/lib/jvm | grep 17

Java 17 경로 확인하고,

 

' temurin-17-jdk' 이렇게 예시가 뜬다면 실제 파일경로는

/usr/lib/jvm/temurin-17-jdk/bin/java

이렇게 된다.

이 전체 경로를 복사해서 Jenkins 설정에 사용.

 

sudo vi /etc/sysconfig/jenkins

Jenkins 설정파일 열고

 

JENKINS_JAVA_CMD="/usr/lib/jvm/temurin-17-jdk/bin/java"

insert 모드에서 이 한줄을 추가해준다. 이게 Jenkins가 Java 17로 실행되게 하는 설정.

 

그 다음으로 Jenkins 서비스를 재시작한다.

sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl reset-failed jenkins
sudo systemctl start jenkins
sudo systemctl status jenkins

 

오류 발생 !

'sudo systemctl status jenkins' 메시지 실행했을때 에러남

[root@localhost ~]# sudo systemctl status jenkins
● jenkins.service - Jenkins Continuous Integration Server
   Loaded: loaded (/usr/lib/systemd/system/jenkins.service; enabled; vendor preset: disabled)
   Active: failed (Result: start-limit) since 목 2025-03-27 15:50:03 KST; 5s ago
  Process: 15697 ExecStart=/usr/bin/jenkins (code=exited, status=1/FAILURE)
 Main PID: 15697 (code=exited, status=1/FAILURE)

Process: 15697 ExecStart=/usr/bin/jenkins (code=exited, status=1/FAILURE) : /user/bin/jenkins 실행 자체가 실패함.

 

문제 가능성 2가지

① JENKINS_JAVA_CMD 경로가 잘못되었거나 오타

→ Jenkins가 Java 17을 못 찾으면 그냥 시작 자체가 실패함

 

② jenkins.service 파일이 /usr/bin/jenkins 실행을 시도 중인데 실제 파일이 없음

→ 보통 Jenkins는 /usr/lib/jenkins/jenkins.war을 실행해야 함
→ 그런데 시스템 서비스가 /usr/bin/jenkins 실행하려고 해서 에러 발생

 

 

* 해결 : Jenkins 실행 경로를 수정하기

 

Step 1 : Jenkins 서비스 파일 열기

sudo vi /usr/lib/systemd/system/jenkins.service

 

'ExecStart='  이 해당하는 줄을 찾아서 설치한 Java17 경로와 .war 파일 직접 지정

ExecStart=/usr/lib/jvm/temurin-17-jdk/bin/java -Djava.awt.headless=true -jar /usr/lib/jenkins/jenkins.war

 

여기서 Jenkins가 Java 실행까지는 가는데 Jenkins WAR 파일 실행 자체가 실패하는 상황 발생

[root@localhost ~]# sudo systemctl status jenkins
● jenkins.service - Jenkins Continuous Integration Server
   Loaded: loaded (/usr/lib/systemd/system/jenkins.service; enabled; vendor preset: disabled)
   Active: failed (Result: start-limit) since 목 2025-03-27 15:56:32 KST; 23s ago
  Process: 15910 ExecStart=/usr/lib/jvm/temurin-17-jdk/bin/java -Djava.awt.headless=true -jar /usr/lib/jenkins/jenkins.war (code=exited, status=1/FAILURE)
 Main PID: 15910 (code=exited, status=1/FAILURE)

 

ExecStart=/usr/lib/jvm/temurin-17-jdk/bin/java ... -jar /usr/lib/jenkins/jenkins.war
→ code=exited, status=1/FAILURE : Java 17은 잘 호출되고 있으나, /usr/lib/jenkins/jenkins.awr 파일이 실행중 오류 or 없음

 

 

/usr/lib/jenkins/jenkins.awr 경로에 파일이 있는지 확인 > 없음 > 실제 jenkins.war 파일의 경로 확인

 

'/usr/share/java/jenkins.war' 경로 확인

 

Jenkins 서비스 파일 다시 열고, ExecStart= 한줄 수정

sudo vi /usr/lib/systemd/system/jenkins.service
ExecStart=/usr/lib/jvm/temurin-17-jdk/bin/java -Djava.awt.headless=true -jar /usr/share/java/jenkins.war

 

서비스 재시작

sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl reset-failed jenkins
sudo systemctl start jenkins
sudo systemctl status jenkins

 

🔥🔥🔥🔥🔥
JENKINS 드디어 실행 성공!!

 

이제 브라우저에서 Jenkins 접속 + 초기 비밀번호 입력하면 된다.

 

Jenkins 는 정상 실행중인데 8080 포트 방화벽이 개방되어있지 않은 상태라서 열어주기로 한다.

 

 

* 8080 포트 방화벽 개방

 

 

* 브라우저 접속 성공 - Jenkins 초기 보안 설정 화면 (여기서 관리자 비밀번호 입력해서 첫 시작을 인증해야함)

Jenkins 초기 보안 설정 화면

 

초기 비밀번호 입력하고 진입해서 플러그인 설치

 

✅ 1 리눅스(CentOS 7) 서버 원격 접속
✅ 2 Java 17 설치 및 Jenkins에 적용
✅ 3 Jenkins 설치 후 실행 실패 문제 해결 (ExecStart, 경로 수정 등)
✅ 4 Jenkins WAR 경로 확인 및 서비스 재설정
✅ 5 방화벽 포트 8080 개방
✅ 6 Jenkins 서비스 성공 실행 + 웹 브라우저 접속 성공 🔥

 

여기까지 완료된 상태