[Jenkins]실제 Linux CentOS7서버에 원격으로 접속해서 Jenkins 설치하기
* 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 초기 보안 설정 화면 (여기서 관리자 비밀번호 입력해서 첫 시작을 인증해야함)
✅ 1 | 리눅스(CentOS 7) 서버 원격 접속 |
✅ 2 | Java 17 설치 및 Jenkins에 적용 |
✅ 3 | Jenkins 설치 후 실행 실패 문제 해결 (ExecStart, 경로 수정 등) |
✅ 4 | Jenkins WAR 경로 확인 및 서비스 재설정 |
✅ 5 | 방화벽 포트 8080 개방 |
✅ 6 | Jenkins 서비스 성공 실행 + 웹 브라우저 접속 성공 🔥 |
여기까지 완료된 상태