Infra/Jenkins

파크골프 젠킨스 구축..

Nellie Kim 2024. 2. 7. 16:22
728x90

아이템 생성

 

 

기존처럼 pom.xml 로 작성했다가 , 아래와 같이 pom.xml 을 찾지 못하고 빌드를 실패했다.  

 

 

서버에서 pom이 어디있는지 찾아보니, 

 

/var/lib/jenkins/workspace/park-golf/parkGolf/pom.xml 이 경로에 있었다. 

 

그래서 상대경로인 parkGolf/pom.xml 로 수정해주었다.

 

 

빌드 성공!!

 

 

빌드 콘솔 창을 보니, target 폴더가 생성이 되고, 그 안에 jar파일이 잘 떨어졌다.

 

cd var/lib/jenkins/workspace/park-golf/parkGolf/target

java -jar parkGolf-0.0.1-SNAPSHOT.jar

 

더보기

java -jar 로 실행해보니, 

로깅파일 권한이 없다는 에러가 나오면서 빌드가 실패했다.  

Logging system failed to initialize using configuration from 'null'
java.lang.IllegalStateException: Logback configuration error detected:
ERROR in ch.qos.logback.core.rolling.RollingFileAppender[FILE] - openFile(/tmp/spring.log,true) call failed. java.io.FileNotFoundException: /tmp/spring.log (Permission denied)
        at org.springframework.boot.logging.logback.LogbackLoggingSystem.reportConfigurationErrorsIfNecessary(LogbackLoggingSystem.java:189)
        at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:170)
        at org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(AbstractLoggingSystem.java:80)
        at org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:60)
        at org.springframework.boot.logging.logback.LogbackLoggingSystem.initialize(LogbackLoggingSystem.java:132)
        at org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:329)
        at org.springframework.boot.context.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:298)
        at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:246)
        at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:223)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:178)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:171)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:145)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:133)
        at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:85)
        at org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:66)
        at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
        at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:120)
        at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:114)
        at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:65)
        at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:343)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:301)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292)
        at kr.co.iabacus.parkGolf.ParkGolfApplication.main(ParkGolfApplication.java:10)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65)
        Suppressed: java.io.FileNotFoundException: /tmp/spring.log (Permission denied)
                at java.base/java.io.FileOutputStream.open0(Native Method)
                at java.base/java.io.FileOutputStream.open(FileOutputStream.java:298)
                at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:237)
                at ch.qos.logback.core.recovery.ResilientFileOutputStream.<init>(ResilientFileOutputStream.java:26)
                at ch.qos.logback.core.FileAppender.openFile(FileAppender.java:204)
                at ch.qos.logback.core.FileAppender.start(FileAppender.java:127)
                at ch.qos.logback.core.rolling.RollingFileAppender.start(RollingFileAppender.java:100)
                at ch.qos.logback.core.joran.action.AppenderAction.end(AppenderAction.java:90)
                at ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:309)
                at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:193)
                at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:179)
                at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:62)
                at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:165)
                at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:152)
                at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:110)
                at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:53)
                at org.springframework.boot.logging.logback.LogbackLoggingSystem.configureByResourceUrl(LogbackLoggingSystem.java:199)
                at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:165)
                ... 30 more
2024-02-07 11:00:54.980 ERROR 80995 --- [           main] o.s.boot.SpringApplication               : Application run failed

java.lang.IllegalStateException: java.lang.IllegalStateException: Logback configuration error detected:
ERROR in ch.qos.logback.core.rolling.RollingFileAppender[FILE] - openFile(/tmp/spring.log,true) call failed. java.io.FileNotFoundException: /tmp/spring.log (Permission denied)
        at org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:344)
        at org.springframework.boot.context.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:298)
        at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:246)
        at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:223)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:178)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:171)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:145)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:133)
        at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:85)
        at org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:66)
        at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
        at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:120)
        at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:114)
        at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:65)
        at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:343)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:301)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292)
        at kr.co.iabacus.parkGolf.ParkGolfApplication.main(ParkGolfApplication.java:10)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65)
Caused by: java.lang.IllegalStateException: Logback configuration error detected:
ERROR in ch.qos.logback.core.rolling.RollingFileAppender[FILE] - openFile(/tmp/spring.log,true) call failed. java.io.FileNotFoundException: /tmp/spring.log (Permission denied)
        at org.springframework.boot.logging.logback.LogbackLoggingSystem.reportConfigurationErrorsIfNecessary(LogbackLoggingSystem.java:189)
        at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:170)
        at org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(AbstractLoggingSystem.java:80)
        at org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:60)
        at org.springframework.boot.logging.logback.LogbackLoggingSystem.initialize(LogbackLoggingSystem.java:132)
        at org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:329)
        ... 26 common frames omitted
        Suppressed: java.io.FileNotFoundException: /tmp/spring.log (Permission denied)
                at java.base/java.io.FileOutputStream.open0(Native Method)
                at java.base/java.io.FileOutputStream.open(FileOutputStream.java:298)
                at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:237)
                at ch.qos.logback.core.recovery.ResilientFileOutputStream.<init>(ResilientFileOutputStream.java:26)
                at ch.qos.logback.core.FileAppender.openFile(FileAppender.java:204)
                at ch.qos.logback.core.FileAppender.start(FileAppender.java:127)
                at ch.qos.logback.core.rolling.RollingFileAppender.start(RollingFileAppender.java:100)
                at ch.qos.logback.core.joran.action.AppenderAction.end(AppenderAction.java:90)
                at ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:309)
                at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:193)
                at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:179)
                at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:62)
                at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:165)
                at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:152)
                at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:110)
                at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:53)
                at org.springframework.boot.logging.logback.LogbackLoggingSystem.configureByResourceUrl(LogbackLoggingSystem.java:199)
                at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:165)
                ... 30 common frames omitted

Exception in thread "main" java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65)
Caused by: java.lang.IllegalStateException: java.lang.IllegalStateException: Logback configuration error detected:
ERROR in ch.qos.logback.core.rolling.RollingFileAppender[FILE] - openFile(/tmp/spring.log,true) call failed. java.io.FileNotFoundException: /tmp/spring.log (Permission denied)
        at org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:344)
        at org.springframework.boot.context.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:298)
        at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:246)
        at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:223)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:178)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:171)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:145)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:133)
        at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:85)
        at org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:66)
        at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
        at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:120)
        at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:114)
        at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:65)
        at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:343)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:301)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292)
        at kr.co.iabacus.parkGolf.ParkGolfApplication.main(ParkGolfApplication.java:10)
        ... 8 more
Caused by: java.lang.IllegalStateException: Logback configuration error detected:
ERROR in ch.qos.logback.core.rolling.RollingFileAppender[FILE] - openFile(/tmp/spring.log,true) call failed. java.io.FileNotFoundException: /tmp/spring.log (Permission denied)
        at org.springframework.boot.logging.logback.LogbackLoggingSystem.reportConfigurationErrorsIfNecessary(LogbackLoggingSystem.java:189)
        at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:170)
        at org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(AbstractLoggingSystem.java:80)
        at org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:60)
        at org.springframework.boot.logging.logback.LogbackLoggingSystem.initialize(LogbackLoggingSystem.java:132)
        at org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:329)
        ... 26 more
        Suppressed: java.io.FileNotFoundException: /tmp/spring.log (Permission denied)
                at java.base/java.io.FileOutputStream.open0(Native Method)
                at java.base/java.io.FileOutputStream.open(FileOutputStream.java:298)
                at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:237)
                at ch.qos.logback.core.recovery.ResilientFileOutputStream.<init>(ResilientFileOutputStream.java:26)
                at ch.qos.logback.core.FileAppender.openFile(FileAppender.java:204)
                at ch.qos.logback.core.FileAppender.start(FileAppender.java:127)
                at ch.qos.logback.core.rolling.RollingFileAppender.start(RollingFileAppender.java:100)
                at ch.qos.logback.core.joran.action.AppenderAction.end(AppenderAction.java:90)
                at ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:309)
                at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:193)
                at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:179)
                at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:62)
                at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:165)
                at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:152)
                at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:110)
                at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:53)
                at org.springframework.boot.logging.logback.LogbackLoggingSystem.configureByResourceUrl(LogbackLoggingSystem.java:199)
                at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:165)
                ... 30 more
[root@localhost target]#
더보기

 

logback-spring.xml 파일에 아래 한 줄을 추가해주었다.

 

https://subji.github.io/posts/2019/11/12/springboot-logbackpermissiondenied-solve

 

/tmp/spring.log (Permission denied)

하나의 프로젝트에서 여러개의 프로파일을 관리할때 /tmp/spring.log 가 같이 사용되어 권한 오류가 발생하는 경우가 있다.보통 logback 의 기본설정 파일을 가져오면서 같은 위치를 가리키게 되어 생

subji.github.io

더보기
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--    jenkins logging file setting -->
    <property name="LOG_TEMP" value="/app/parkGolf/jar" />
    <include resource="org/springframework/boot/logging/logback/base.xml"/>


    <logger name="jdbc.sqlonly" level="debug" />
    <logger name="jdbc.sqltiming" level="off" />
    <logger name="jdbc.audit" level="off" />
    <logger name="jdbc.resultset" level="off" />
    <logger name="jdbc.resultsettable" level="debug" />
    <logger name="jdbc.connection" level="off" />
</configuration>
# logging
logging:
  config: classpath:logback-spring.xml
  level:
    org.springframework.security: DEBUG

https://subji.github.io/posts/2019/11/12/springboot-logbackpermissiondenied-solve

 

/tmp/spring.log (Permission denied)

하나의 프로젝트에서 여러개의 프로파일을 관리할때 /tmp/spring.log 가 같이 사용되어 권한 오류가 발생하는 경우가 있다.보통 logback 의 기본설정 파일을 가져오면서 같은 위치를 가리키게 되어 생

subji.github.io

 

STS (spring tool suite) logback.xml 설정

STS (Spring Tool Suite)에서 logback.xml로 그대로 설정하게 되면 spring boot가 logback 스탠다드 ...

blog.naver.com

더보기

https://stackoverflow.com/questions/38081145/spring-boot-uses-tmp-spring-log-file-during-testing

 

chmod 777 -R tmp 

 

라고 모든 권한을 주니까 해결되었다.

 

만약에 root 계정으로 세팅하고 있는데, 나중에 platform 계정으로 실행시키고 싶다고 하면, 

 

chwon -R platform:platform tmp

라고 소유주를 변경해주면 된다. 

 

 

새로운 디렉토리 생성

mkdir svc/backend

 

 

start.sh 생성

#!/bin/sh

nohup java -jar /var/lib/jenkins/workspace/park-golf/parkGolf/target/parkGolf-0.0.1-SNAPSHOT.jar >/dev/null 2>&1 &

if [ ! -d /svc/jenkins/jar_old/$(date +"%Y%m%d") ]; then
  mkdir /svc/jenkins/jar_old/$(date +"%Y%m%d")
fi

cp /var/lib/jenkins/workspace/park-golf/parkGolf/target/parkGolf-0.0.1-SNAPSHOT.jar /svc/jenkins/jar_old/$(date +"%Y%m%d")/

 

실행하고 바로 svc/jenkins/jar_old로 이동하도록 만들었다.

 

 

추가로 ssh 플러그인 설치 

 

 

stop.sh 

CURRENT_PID=$(pgrep -f parkGolf-0.0.1-SNAPSHOT)

if [ -z $CURRENT_PID ]; then
 echo "process not running"
else
 echo "process kill pid $CURRENT_PID"
 kill -15 $CURRENT_PID
fi

 

 

 

이제 젠킨스에게 어떤 서버에서 일을 해줄 것인지 등록을 해줘야 한다.

젠킨스 관리  - System - 맨 아래 SSH Servers 추가 - SSH Server에 서버계정 입력

 

 

 

 

 

=================

 

갑자기 git 에러가 남 ... 

 

깃 어디있는지 파악 

 

젠킨스 관리 > Tool > Path to Git executable 에 직접적으로 작성해주기 

 

아래처럼 수정해주고, 자동으로 설치도 클릭해주었다 .