반응형

<맥주마시는 젠킨스>

* 오류 메시지 : 

   [ERROR] no suitable constructor found for
   [ERROR] (actual and formal argument lists differ in length)

* 환경 : 스프링 4.0 , 자바 1.8, 젠킨스 Jenkins 2.346.1, SVN

* 원인 : 프로젝트에서 jar 라이브러리등을 변경할 때에 pom등에서 버젼을 정상적으로 올리는 것이 아닌 이름은 동일하게 하고 파일만 바꾸면 젠킨스에서 빌드 시 실제 jar 파일의 크기가 맞지 않아서 발생하는 문제

* 해결법 : 문제가 되는 라이브러리 파일은 교체하고 이름은 그대로 사용하지 않고 파일명으로 버전업을 시킨다.

외부 라이브러리를 pom에 등록하는 방법은 https://devesim.tistory.com/116 게시글을 참고한다.

* 독백 : 젠킨스 관련된 한글 정보가 너무 없어서 올렸습니다..........

반응형
반응형

개요 : 개발서버에서 젠킨스를 이용하여 svn에 등록된 소스를 톰캣에 반영시키는 중인데 젠킨스에서 빌드를 시킬 때 톰캣을 수동으로 재기동 시키기 않으면 적용이 제대로 안되는 문제가 발생하였다. 그리하여 젠킨스 빌드후에 쉘을 사용하여 톰캣이 재기동 되도록 하였다.

환경 : centos 7, 젠킨스 2.346.1, 톰캣 8.5

방법 : 

1. 본인이 원하는 경로에 vi나 vim으로 sh 파일을 만든다.

  * 예시 : /usr/local/etc/jenkins_custom/custom_tomcat_restart.sh

  * sh 파일의 내용

echo 'Tomcat shutdown'
/usr/local/apache-tomcat-8.5.xx/bin/shutdown.sh

sleep 10

echo 'Tomcat start'
/usr/local/apache-tomcat-8.5.xx/bin/startup.sh

2. visudo 명령어를 사용하여 /etc/sudoers 파일을 수정한다.

   약 100라인쯤에 root ALL=(ALL)     ALL 라인이 보이면 하단에

root    ALL=(ALL)          ALL
jenkins ALL=(ALL)   NOPASSWD: ALL

   추가 후 저장한다.

3. 젠킨스에서 빌드 후에 쉘을 실행하도록 지정한다.

젠킨스에서 빌드 후에 쉘을 실행하도록 설정

4. 젠킨스에서 빌드를 진행하면 쉘(sh)이 동작하는 것을 로그를 통해서 확인 할 수 있다.

5. 문제발생

   sh 파일에서 sleep을 10초 이상으로 설정하면 젠킨스 오류가 발생한다...

   그리고 자바나 sql 이 정상적으로 반영이 안되는 문제가 발생하였다. 메모리에 톰캣이 남아있어서 발생하는 문제인 것 같은데 추후에 해결책을 찾아봐야겠다......

[도움을 받은 곳]

visudo : https://mans-daily.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4UbuntuCentOS-etcsudoers-%ED%8C%8C%EC%9D%BC%EC%9D%84-%EC%88%98%EC%A0%95%ED%95%98%EC%97%AC-sudo-%EA%B6%8C%ED%95%9C-%EB%B0%8F-root-%EA%B6%8C%ED%95%9C-%EB%B6%80%EC%97%AC%ED%95%98%EA%B8%B0

 

[리눅스(Ubuntu/CentOS)] /etc/sudoers 파일을 수정하여 sudo 권한 및 root 권한 부여하기

안녕하세요 오늘 포스팅에서는 리눅스 사용자에게 sudo 권한과 root 권한을 부여하기 위해 /etc/sudoers 파일을 수정하는 방법을 설명하도록 하겠습니다. 우선 /etc/sudoers 파일은 root 권한이 있어야지

mans-daily.tistory.com

젠킨스 설정 : https://velog.io/@livenow/Jenkins-Execute-Shell-%EB%AA%85%EB%A0%B9%EC%96%B4%EC%97%90%EC%84%9C-sudo%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%9C-%EC%84%A4%EC%A0%95

 

[Jenkins] Execute Shell 명령어에서 sudo를 사용하기 위한 설정

젠킨스에서 빌드 진행 시 관리자 권한으로 실행이 필요한 경우가 있습니다.

velog.io

 

반응형
반응형

회색 젠킨스...

 ● 환경 : Centos 7, 젠킨스 2.346.1, openJDK 1.8, 스프링, SVN, Maven 환경

 

 ● 개요 : 요세는 거의 잘 안쓰는 SVN 환경에서 젠킨스를 구축할 일이 생겨서 설치 및 설정 후 빌드를 실행하니 자꾸 아래의 오류 메시지가 나타나면서 빌드가 실패하였다.

 

 ● 오류메시지 : 

The Tomcat Manager responded "FAIL - Deployed application at context path [/devsim-1.0.0-BUILD-SNAPSHOT] but context failed to start
" instead of the expected "OK" message

「젠킨스 콘솔 오류 메시지」

java.io.FileNotFoundException: class path resource [config/file.properties] cannot be opened because it does not exist

「톰캣 Catalina.out 로그 오류 메시지」

  아무리 구글링을 해보아도 마땅한 방법이 나오지 않고 SVN 리포지토리를 확인해보니 SNAPSHOT.jar 파일에서 없다고 나타나는 파일이 SVN 오류로 제대로 커밋이 안되어서 나타나는 문제인가 하고 한참을 헤맸었다

 

 ● 해결책 :

  한참 삽질을 하다가 아래와 같은 내용으로 문제를 해결하였다.

   1. 먼저 SVN에 찾을 수 없다는 파일이 정상적으로 커밋이 되었는지 체크한다.

   2. 젠킨스 해당 프로젝트 [구성] -> [Build] 항목의 Goals and options에 clean install 이 누락되었는지 확인한다.

젠킨스 설정

   3. 빌드전에 해당 프로젝트 war 파일, 프로젝트 디렉토리를 삭제한다.(테스트 중 snapshot이 붙은 war 파일이 있는 경우 해당 파일과 디렉토리 전부 삭제한다.)

   4. 그리고 다시 빌드를 해보면 정상적으로 빌드가 되는 것을 확인 할 수 있다.

 

 ● 마치며

   - 설정을 제대로 하였는데도 작은 부분때문에 고생하는 누군가에게 도움이 되기를......

반응형
반응형

장군 젠킨스..

 

▶ 환경

  - Jenkins 2.346.1

  - Centos 7

  - 아파치 톰캣 8.5

 

▶ 문제

  - 젠킨스 빌드를 하는데 아래와 같은 오류 메시지가 나타난다...

Caused by: org.codehaus.cargo.container.tomcat.internal.TomcatManagerException: The Tomcat Manager responded "<html>
<head>
<style>
h1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} h2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} h3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} body {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} b {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} p {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;} a {color:black;} a.name {color:black;} .line {height:1px;background-color:#525D76;border:none;}
  table {
    width: 100%;
  }
  
  ......
  ......
  ......

 

▶ 해결책

  - 톰캣 매니저를 찾지 못해서 발생하는 문제인 것 같다. 해당 프로젝트의 구성 -> 빌드 후 조치에서 Containers의 Manager context path를 비우도록 한다.

 

반응형
반응형

빡치는 젠킨스...

● 개요

  젠킨스 환경설정의 길은 멀고도 험했다.... 가상호스트에 TLS(SSL)까지 적용된 환경에서는 뭔놈의 에러가 이리 많이 발생하는지... 테스트 환경의 설정하고는 난이도가 비교조차 되지 않았다 ㅡㅡ;;;; 구글에서 검색조차 되지 않을 정도로 삽질한 사람들도 적다................

  아무튼 각설하고 젠킨스 자동빌드 환경을 구성하려고 하는데

Caused by: javax.net.ssl.SSLHandshakeException: No subject alternative names matching IP address 아이피주소 found

요딴 에러가 발생하면 아래 해결책이 있다....

 

● 환경

  - CentOS 7

  - 젠킨스 2.346.1

  - 아파치 톰캣 8.5

  - 젠킨스와 톰캣은 동일한 서버에 설치됨

  - 톰캣 가상호스트 사용중

  - TLS(SSL) 적용중..

 

● 원인

  일단 웹브라우저로 톰캣 매니저에 접속해본다. (예: https://서버IP주소:SSL포트/manager/html 와 https://서버IP주소:SSL포트/host-manager/html 이다. 접속 성공하면 아이디 비밀번호를 물어본다..) 정상적으로 접속이 된다면 넘어간다..

  다음으로 젠킨스 설정 중 빌드 후 조치는 위와 같이 되어 있었을 것이다....

  이 상태에서 빌드 후 배포를 하려고 하면 젠킨스가 IP 주소로 톰캣 메니저에 접근 할려고 하니 인증서 도메인과 일치하지 않아서 SSLHandShakeException이 발생한다... 서버 jre의 keystore에 TLS(SSL)파일을 등록해도 안된다... 죽어도 안된다.

  

● 해결책

  위 원인에서 톰캣 매니저 접근 시 주소가

  https://서버IP주소:SSL포트/manager/html

  https://서버IP주소:SSL포트/host-manager/html

  이런식으로 되어 있는데 본인이 업무하는 곳이라면 DNS 담당자에게 요청해서 DNS서버에 도메인으로 접속할 수 있도록 도메인을 생성해야 한다. 

  예시) https://devsim.dev.co.kr:443/manager/html

  예시) https://devsim.dev.co.kr:443/host-manager/html 

  도메인이 새롭게 생성되었으면 당연히 톰캣 server.xml 파일도 수정이 되어야 한다.

//보통 webapps 접속 Host 구문은 아래와 같을 것이다.
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">

//이것을 새로 생성한 DNS로 변경한다.
<Host name="devsim.dev.co.kr" appBase="webapps" unpackWARs="true" autoDeploy="true">

//당연히 톰캣은 재시작해야한다...

  그럼 이제 도메인으로 톰캣 매니저에 접속이 가능하다.

 

  다시 젠킨스로 돌아와서 해당 프로젝트 구성 -> 빌드 후 조치 -> Tomcat URL 항목을 TLS(SSL)과 도메인 형식으로 변경한다.

  이제 SSLHANDSHAKE 오류는 더이상 발생하지 않을 것이다...

반응형
반응형

젠킨스 자동빌드 환경 구축의 길은 멀고도 험하다..... 도데체 뭐가 이렇게 설정할 것이 많은 것인지.... ㅡㅡ;

 

 ● 환경

   - CentOS 7

   - 젠킨스 2.346.1

   - TLS(SSL) 발급하여 사용중인 환경

 

 ● 설정 방법

1. TLS(SSL) 인증서 파일이 위치하는 곳에 가면

   내가사용중인인증서.crt

   내가사용중인인증서.key

   내가사용중인인증서.pfx

   이 3개의 파일이 있는 것을 확인할 수 있다.

2. 인증 요청서(.crt) 파일과 개인키(.key) 파일을 이용하여 jenkins.pfx 파일을 생성한다

#openssl pkcs12 -export -in 인증서.crt -inkey 인증서.key -out jenkins.pfx

   비밀번호 입력을 묻는데 본인이 원하는데로 입력 후 잘 기억해둔다.

3. 생성한 pfx 파일 확인

#openssl pkcs12 -info -in jenkins.pfx

  비밀번호를 묻는데 비밀번호가 정확한지 확인 할 수 있고 정상적으로 입력하면 숫자들이 주르륵 나오는데 확인만 하고 Ctrl + C를 이용하여 종료 하도록 한다.

4. pfx 파일을 jks 파일로 변환

#keytool -importkeystore -srckeystore jenkins.pfx -srcstoretype pkcs12 -destkeystore jenkins.jks -deststoretype jks

  비밀번호를 입력하라고 나오는데 위에서 만든 비번과 동일하게 전부 입력하도록 한다. 총 3번 물어본다..

5. 생성된 jenkins.jks 파일을 본인이 원하는 곳에 cp 명령어를 이용하여 복사한다.

6. 젠킨스 환경설정 파일을 수정한다.

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

#Environment="JENKINS_PORT=9090"
Environment="JENKINS_HTTPS_PORT=8443"
Environment="JENKINS_HTTPS_KEYSTORE=/devsim/jenkins.jks"
Environment="JENKINS_HTTPS_KEYSTORE_PASSWORD=비밀번호"

   vi나 vim등을 이용하여 파일을 수정하는데 특히 JENKINS_PORT 항목을 주석 처리해야 하는 것에 주의한다. 주석처리를 하지 않으면 젠킨스 실행 시 오류가 발생한다. 포트의 경우 방화벽 예외 포트에 등록하는 것은 필수 !

7. 젠킨스 서비스 재시작

#systemctl daemon-reload
#systemctl restart jenkins

   설정 파일에 오타 등이 있으면 젠킨스 실행 시 오류가 발생하니 주의하도록 한다.

   다른 블로그 검색 시 나타나는 과거글들의 /etc/sysconfig/jenkins 파일도 최신 젠킨스 버전 등에서는 적용이 되지 않으니 또한 주의하도록 한다.

   7번까지 모두 완료 후 https://서버 IP주소:8443 으로 접속하면 관리자페이지에 성공적으로 접속되는 것을 확인 할 수 있다. 크롬 등에서는 고급 버튼을 클릭 후 안전하지 않은 페이지로 접속 글자를 클릭하면 접속이 가능하다.

   자 이제 관리자 페이지에 다시 접속해서 자동 빌드를 위한 삽질을 계속하자.... 파이팅 !!

 

* 도움을 받은 곳 (시스템엔지니어 매그너스님 블로그)

https://magnuxx.tistory.com/entry/jenkins-cenots7-%EC%A0%A0%ED%82%A8%EC%8A%A4-https-ssl-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EC%84%A4%EC%B9%98

 

[jenkins] cenots7 젠킨스 https ssl 인증서 설치

젠킨스 설정에 관해 구글에 검색해보면 죄다 /etc/sysconfig/jenkins 에서 수정해서 재적용하면 된다고 하지만 2022년 cenots7 에서 yum으로 젠킨스를 설치하여 젠키스 버전 2.332.2 인 나의 환경에서는 해당

magnuxx.tistory.com

 

반응형
반응형

● 환경 : 스프링 4, Jenkins 2.346.1

● 개요 : 외부 API를 참조하는 상황에서 젠킨스로 자동빌드 환경을 구성하려고 하는데 젠킨스에서 빌드 시도 시 BUILD FAIL이 나타나는 현상 조치

● 방법 : 

  1. jar 파일은 프로젝트 하위 [lib] - [외부 API명] - [파일명] - [버전] - [파일명-버전] 으로 한다

예시) [lib] - [devsim] - [custapi] - [1.10.7] - custapi-1.10.7.jar

본인이 추가할 외부 jar 파일을 위와 같은 형식으로 맞추는게 정신건강에 좋다.

 

2. pom.xml에 다음과 같이 추가한다.

아래 코드는 <repositories> 내부에 추가한다.

<repository>
   <id>in-project</id>
   <name>custom jars</name>
   <url>file://${project.basedir}/lib</url>
</repository>

<repository>
   <id>in-project-jenkins</id>
   <name>custom jars-jenkins</name>
   <url>file://${JENKINS_HOME}/jobs/${JOB_NAME}/workspace/lib</url>
</repository>

 

3. 아래 코드는 <dependencies> 내부에 추가한다.

<dependency>
   <groupId>devsim</groupId>
   <artifactId>custapi</artifactId>
   <version>1.10.7</version>
</dependency>

1번에서 작성한 groupId - API명, artifactId - 파일명, version - 버전이 정확하게 일치해야 한다.

 

4. 젠킨스 빌드

빌드를 해보면 빌드 성공 메시지가 뜨는 것을 확인할 수 있다.

 

● 도움받은 곳 : https://denodo1.tistory.com/282

 

[maven] 외부 jar 추가

환경 java 1.7.0 maven 3.2.2 단순 참조만 필요한 경우 maven repository 가 없는 로컬 jar 파알을 maven 프로젝트에 추가 하기 위해서는 사설 repository를 만드는 방법도 있지만 다음과 같이 "dependency" 정의..

denodo1.tistory.com

[dBack님 블로그]

 

반응형
반응형

환경 : CentOS 7

설치 프로그램 : 젠킨스

문제 : CentOS 7 환경에서 젠킨스를 테스트 하기 위하여 설치 후 서비스를 시작하려고 하는데

자꾸 아래와 같은 오류가 발생하였다.

[root@localhost ~]# service jenkins start
Starting jenkins (via systemctl):  Job for jenkins.service failed because the control process exited with error code. See "systemctl status jenkins.service" and "journalctl -xe" for details.
                                                           [실패]
[root@localhost ~]# systemctl status jenkins.service //자세한 사항을 확인하라고 하여 확인을 해보았다
● jenkins.service - Jenkins Continuous Integration Server
   Loaded: loaded (/usr/lib/systemd/system/jenkins.service; disabled; vendor preset: disabled)
   Active: failed (Result: start-limit) since 목 2022-06-30 08:32:00 KST; 7s ago
  Process: 7079 ExecStart=/usr/bin/jenkins (code=exited, status=1/FAILURE)
 Main PID: 7079 (code=exited, status=1/FAILURE)

localhost.localdomain systemd[1]: Failed to start Jenkins Continuous Integration Server.
localhost.localdomain systemd[1]: Unit jenkins.service entered failed state.
localhost.localdomain systemd[1]: jenkins.service failed.
localhost.localdomain systemd[1]: jenkins.service holdoff time over, scheduling restart.
localhost.localdomain systemd[1]: Stopped Jenkins Continuous Integration Server.
localhost.localdomain systemd[1]: start request repeated too quickly for jenkins.service
localhost.localdomain systemd[1]: Failed to start Jenkins Continuous Integration Server.
localhost.localdomain systemd[1]: Unit jenkins.service entered failed state.
localhost.localdomain systemd[1]: jenkins.service failed.
[root@localhost ~]# journalctl -xe   //더 자세한 사항을 확인해보라고 하여 확인 해보았다.....
localhost.localdomain jenkins[7079]: Caused: java.io.IOException: Failed to bind to 0.0.0.0/0.0.0.0:8080
localhost.localdomain jenkins[7079]: at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:349)
localhost.localdomain jenkins[7079]: at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:310)
localhost.localdomain jenkins[7079]: at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80)
localhost.localdomain jenkins[7079]: at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:234)
localhost.localdomain jenkins[7079]: at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73)
localhost.localdomain jenkins[7079]: at org.eclipse.jetty.server.Server.doStart(Server.java:401)
localhost.localdomain jenkins[7079]: at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73)
localhost.localdomain jenkins[7079]: at winstone.Launcher.<init>(Launcher.java:202)
localhost.localdomain jenkins[7079]: Caused: java.io.IOException: Failed to start Jetty
localhost.localdomain jenkins[7079]: at winstone.Launcher.<init>(Launcher.java:206)
localhost.localdomain jenkins[7079]: at winstone.Launcher.main(Launcher.java:405)
localhost.localdomain jenkins[7079]: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
localhost.localdomain jenkins[7079]: at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
localhost.localdomain jenkins[7079]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
localhost.localdomain jenkins[7079]: at java.lang.reflect.Method.invoke(Method.java:498)
localhost.localdomain jenkins[7079]: at Main._main(Main.java:342)
localhost.localdomain jenkins[7079]: at Main.main(Main.java:117)
localhost.localdomain systemd[1]: jenkins.service: main process exited, code=exited, status=1/FAILURE
localhost.localdomain systemd[1]: Failed to start Jenkins Continuous Integration Server.

 

원인 : 포트가 충돌나서 발생하는 문제이다. 분명 블로그 등에서 검색해서  /etc/sysconfig/jenkins 경로의 포트를 8080에서 9090으로 변경했는데... 오류가 발생하였다. 그리하여 로그를 자세히 보니 /usr/lib/systemd/system/jenkins.service 파일에도 동일한 내용이 들어있었다.

해결책 : vi나 vim을 사용하여 jenkins.service 파일의 Environment="JENKINS_PORT=9090"로 변경 후 다시 service jenkins start를 시도해 보면 정상적으로 젠킨스 서비스가 올라오는 것을 확인 할 수 있다.

 

 

반응형
반응형

[Eclipse, STS] SVN E160028 오류 조치방법

 

* 개요 : SVN이 구식이라 꼬여서 나타나는 문제다. 주로 파일을 삭제하고 교체하거나 동일한 파일의 버전을 변경할 때 일어난다.

 

* 해결법 : 

1. 예를 들어서 lib/devsim/sim.jar 파일이 커밋 문제가 일어난다고 가정하면 일단 해당 파일과 상위 디렉토리도 함께 삭제하고 커밋한다.

2. lib/test 디렉토리 생성 후 커밋한다.

3. lib/test/test.jar 파일을 추가 후 커밋한다. (메모장등으로 만들어서 확장자만 변경한다)

4. test.jar와 test 디렉토리를 삭제 후 커밋한다.

5. 이제 다시 원래 문제가 되었던 devsim 디렉토리 복사 후 커밋, sim.jar 파일 복사 후 커밋을 하면 E160028문제가 일어나지 않는다.

 

 

반응형

+ Recent posts