☀️ 테스트 환경
- Amazon Linux 2023 (EC2)
- OpenJDK 17.0.2
✋ 들어가며
AWS EC2 환경에 공식 문서↗를 보고 Jenkins를 설치했다. 여기까지 찾아온 방문자에게는 고맙고 미안하지만 블로그 글 보다는 역시 공식 문서를 활용하는게 더 좋다.
🚀 Jenkins 다운로드 및 설치
☑️ JDK가 설치되어있는 환경이라 생략되어있지만 먼저 JDK를 꼭 설치해주자
패키지 업데이트
sudo yum update -y
Jenkins Repo 추가
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
패키지 설치를 활성화하기 위한 키 파일 Import
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
Jenkins 설치 {id="jenkins install"}
sudo yum install jenkins -y
부팅시 시작되는 서비스 등록
sudo systemctl enable jenkins
Jenkins 시작 {id="jenkins start"}
sudo systemctl start jenkins
Jenkins 상태 확인 {id="jenkins status check"}
sudo systemctl status jenkins
✔
● jenkins.service - Jenkins Continuous Integration Server
Loaded: loaded (/usr/lib/systemd/system/jenkins.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2024-12-18 01:26:13 UTC; 3h 22min ago
...
⛔ 예상되는 오류
필자는 운이 좋게도 한번에 시작이 되었지만 시작시 알 수 없는 오류에 시달릴 수도 있다. 시달리는 중이라면 왜 시달리고 있는지 상세 오류 내용을 확인해보자.
sudo journalctl -xe
jenkins: failed to find a valid Java installation
-
오류 내용
-- Unit jenkins.service has begun starting up. jenkins[25524]: jenkins: failed to find a valid Java installation systemd[1]: jenkins.service: main process exited, code=exited, status=1/FAILURE systemd[1]: Failed to start Jenkins Continuous Integration Server. -- Subject: Unit jenkins.service has failed -- Defined-By: systemd -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel -- -- Unit jenkins.service has failed. -- -- The result is failed.
-
해결 : JAVA_HOME에 JDK 설치 경로를 설정해주면 끝.
sudo vi /usr/lib/systemd/system/jenkins.service
... # The Java home directory. When left empty, JENKINS_JAVA_CMD and PATH are consulted. Environment="JAVA_HOME=[JDK 설치 경로]" ...
sudo systemctl daemon-reload
Failed to bind to 0.0.0.0/0.0.0.0:8080
다른 프로세스에서 사용중인 포트인 경우 이런 오류를 만날 수 있고 다른 프로세스의 포트를 변경하든 젠킨스 포트를 변경하든 해야하는데 우리는 젠킨스 포트를 변경해보자.
-
오류 내용
jenkins[16253]: Caused: java.io.IOException: Failed to bind to 0.0.0.0/0.0.0.0:8080 jenkins[16253]: at Jenkins Main ClassLoader//org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:349) jenkins[16253]: at Jenkins Main ClassLoader//org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:313) jenkins[16253]: at Jenkins Main ClassLoader//org.eclipse.jetty.server.Server.lambda$doStart$0(Server.java:552) jenkins[16253]: at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) jenkins[16253]: at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) jenkins[16253]: at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) jenkins[16253]: at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) jenkins[16253]: at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) jenkins[16253]: at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) jenkins[16253]: at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) jenkins[16253]: at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) jenkins[16253]: at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) jenkins[16253]: at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) jenkins[16253]: at Jenkins Main ClassLoader//org.eclipse.jetty.server.Server.doStart(Server.java:548) jenkins[16253]: at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93) jenkins[16253]: at Jenkins Main ClassLoader//winstone.Launcher.<init>(Launcher.java:190) jenkins[16253]: Caused: java.io.IOException: Failed to start Jetty jenkins[16253]: at Jenkins Main ClassLoader//winstone.Launcher.<init>(Launcher.java:194) jenkins[16253]: at Jenkins Main ClassLoader//winstone.Launcher.main(Launcher.java:490) jenkins[16253]: at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) jenkins[16253]: at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) jenkins[16253]: at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) jenkins[16253]: at java.base/java.lang.reflect.Method.invoke(Method.java:568) jenkins[16253]: at executable.Main.main(Main.java:335) systemd[1]: jenkins.service: main process exited, code=exited, status=1/FAILURE systemd[1]: Failed to start Jenkins Continuous Integration Server. -- Subject: Unit jenkins.service has failed -- Defined-By: systemd -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel -- -- Unit jenkins.service has failed. -- -- The result is failed.
-
해결
sudo vi /usr/lib/systemd/system/jenkins.service
... # Port to listen on for HTTP requests. Set to -1 to disable. # To be able to listen on privileged ports (port numbers less than 1024), # add the CAP_NET_BIND_SERVICE capability to the AmbientCapabilities # directive below. Environment="JENKINS_PORT=[변경할 포트]" ...
sudo systemctl daemon-reload