2021. 9. 15. 11:10ㆍJenkins
##기존 유지보수 하던 프로젝트를 젠킨스에서 Maven Build를 수행하고 CI/CD의 자동화를 해보려고 했으나.... 버전이나 기타 관리가 잘되는 편이 아니였어서... 하나하나 삽질로 다 수정해봤던 이력들이다##
##오류1번 “package does not exist” 또는 “cannot find symbol”##
기존에 svn에 존재하는 파일들 젠킨스에서 clean install or clean package 를 하려고하는데 컴파일 하는과정에서 오류가 발생함..
mvn clean install --log-file 파일명.txt
기존 젠킨스에서 확인가능한 로그가 이부분
- 디버깅 로그 파일 생성
mvn clean install -X > 파일명.txt
더 상세한 처리결과를 볼수있음
로그파일을 남겨서 봤지만 그저
error: cannot find symbol 찾지못한다는 오류만 발생시킴
자세히봤더니 cms307내부에 core.jar에 묶여있는부분을 인식못해서 발생함.
WEB-INF/lib 폴더에 존재했었음!
그래서 pom.xml에 해당부분 경로를 직접 지정해줌!
###추가한부분###
<properties>
<java-version>1.7</java-version>
<spring.maven.artifact.version>4.1.2.RELEASE</spring.maven.artifact.version>
<egovframework.rte.version>3.6.0</egovframework.rte.version>
<org.springframework.security-version>4.0.4.RELEASE</org.springframework.security-version>
<org.aspectj-version>1.8.4</org.aspectj-version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.youtube.version>v3-rev8-1.12.0-beta</project.youtube.version>
<project.http.version>1.12.0-beta</project.http.version>
<project.oauth.version>1.12.0-beta</project.oauth.version>
<webapp.lib>${basedir}/src/main/webapp/WEB-INF/lib</webapp.lib> <<추가
</properties>
각각 lib폴더내부에있는jar다 선언!
<!-- lib폴더내부 추가 -->
<dependency>
<groupId>cos</groupId> <!-- Doesn't matter -->
<artifactId>cos</artifactId> <!-- Doesn't matter -->
<version>1.0.0</version> <!-- Doesn't matter -->
<scope>system</scope>
<systemPath>${webapp.lib}/cos.jar</systemPath>
</dependency>
<dependency>
<groupId>CUBE_CORE</groupId> <!-- Doesn't matter -->
<artifactId>CUBE_CORE</artifactId> <!-- Doesn't matter -->
<version>3.0.7</version> <!-- Doesn't matter -->
<scope>system</scope>
<systemPath>${webapp.lib}/CUBE_CORE.jar</systemPath>
</dependency>
<dependency>
<groupId>kisa-seed</groupId> <!-- Doesn't matter -->
<artifactId>kisa-seed</artifactId> <!-- Doesn't matter -->
<version>1.0.0</version> <!-- Doesn't matter -->
<scope>system</scope>
<systemPath>${webapp.lib}/kisa-seed-1.0.0.jar</systemPath>
</dependency>
<dependency>
<groupId>mssql-jdbc</groupId> <!-- Doesn't matter -->
<artifactId>mssql-jdbc</artifactId> <!-- Doesn't matter -->
<version>1.0.0</version> <!-- Doesn't matter -->
<scope>system</scope>
<systemPath>${webapp.lib}/mssql-jdbc-7.2.1.jre8.jar</systemPath>
</dependency>
<dependency>
<groupId>NiceID</groupId> <!-- Doesn't matter -->
<artifactId>NiceID</artifactId> <!-- Doesn't matter -->
<version>1.0.0</version> <!-- Doesn't matter -->
<scope>system</scope>
<systemPath>${webapp.lib}/NiceID.jar</systemPath>
</dependency>
<dependency>
<groupId>NiceID_ibm</groupId> <!-- Doesn't matter -->
<artifactId>NiceID_ibm</artifactId> <!-- Doesn't matter -->
<version>1.0.0</version> <!-- Doesn't matter -->
<scope>system</scope>
<systemPath>${webapp.lib}/NiceID_ibm.jar</systemPath>
</dependency>
<dependency>
<groupId>ojdbc</groupId> <!-- Doesn't matter -->
<artifactId>ojdbc</artifactId> <!-- Doesn't matter -->
<version>1.0.0</version> <!-- Doesn't matter -->
<scope>system</scope>
<systemPath>${webapp.lib}/ojdbc-14.jar</systemPath>
</dependency>
<dependency>
<groupId>simplecaptcha</groupId> <!-- Doesn't matter -->
<artifactId>simplecaptcha</artifactId> <!-- Doesn't matter -->
<version>1.2.1</version> <!-- Doesn't matter -->
<scope>system</scope>
<systemPath>${webapp.lib}/simplecaptcha-1.2.1.jar</systemPath>
</dependency>
<dependency>
<groupId>tibero6-jdbc</groupId> <!-- Doesn't matter -->
<artifactId>tibero6-jdbc</artifactId> <!-- Doesn't matter -->
<version>1.0.0</version> <!-- Doesn't matter -->
<scope>system</scope>
<systemPath>${webapp.lib}/tibero6-jdbc-14.jar</systemPath>
</dependency>
해결하는데 참고한 사이트
https://blog.silentsoft.org/archives/19
##오류2번 ##
Mvn -e test
명령어를 사용해서 컴파일 테스트중 아래와 같은 오류가 발생함.
cannot be converted to Collection<? extends Map<String,Object>>
찾아낸결과
메이븐 플러그인을 1.8 버전으로 변경하라고 적혀있었음. 스텍오버플로우
기존
<!--
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
-->
변경
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
출처: <https://stackoverflow.com/questions/49051936/maven-compilation-error-incompatible-lists>
##오류3번(형변환문제??) ##
변경했으나 그 부분은 해결됬지만 다른부분때문에 아래와같은 에러가 발생했었음.
/C:/Windows/System32/config/systemprofile/AppData/Local/Jenkins/.jenkins/workspace/src/main/java/egovframework/menu/web/MngrMenuController.java:[188,79]
java.util.List<egovframework.itgcms.common.ItgMap> cannot be converted to java.util.Collection<? extends java.util.Map<java.lang.String,java.lang.Object>>
List<ItgMap> menulist = MenuService.commTreemenuList(paramMap);
List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>();
/*resultList.addAll((Collection<? extends Map<String, Object>>) menulist);*/
for(Object obj : menulist){
if(obj instanceof Collection){
resultList.add((Map<String, Object>) obj);
}
}
기존에 addAll 하는 방식의 코드가 있었는데 형변환이 안이루어졌음.. 코드 상세 변경처리
##로그 확인 및 옵션들 리눅스에서 동일환경을 셋팅해두고 maven테스트를 하기 좋음##
///// 테스트 하기
mvn test-compile
projectname/src/main/resources의 자원들을 projectname/target/classes로 복사
projectname/src/main/java의 소스를 컴파일하여 projectname/target/classes로 복사
src/test/resources의 자원을 target/test-classes로 복사
src/test/src/main/java의 소스를 컴파일하여 target/test-classes로 복사
mvn test
1) test-compile 후
2) 실행하여 결과 보고(테스트 함)
///// 컴파일 하기(.java -> .class )
mvn compile
1) projectname/src/main/resources의 자원들을 projectname/target/classes로 복사
2) projectname/src/main/java의 소스를 컴파일하여 projectname/target/classes로 복사
///// 테스트 및 컴파일 데이터 지우기
mvn clean
projectname/target 폴더를 삭제
///// 프로젝트 패키징 (jar 또는 war파일로 압축)
mvn package
1) projectname/target 에 패키징된 파일이 저장됨
mvn install
1) package 후
2) USER_HOME/.m2/repository/com/test/start/projectname/target 에 패키징된 파일이 복사됨
mvn deploy
2) install 후
3) 외부저장소에 복사됨
///// 유용한 기능
- 로그 파일 생성
mvn clean install --log-file 파일명.txt
기존 젠킨스에서 확인가능한 로그가 이부분
- 디버깅 로그 파일 생성
mvn clean install -X > 파일명.txt
더 상세한 처리결과를 볼수있음
- 단위 테스트 실행하지 않고 패키징하기
mvn –Dmaven.test.skip=true package
- 디펜던씨(의존관계) target폴더로 싹 가져오기
mvn dependency:copy-dependencies
1) target/dependency 디렉토리가 생성됨
2) jar파일이 복사됨(pom.xml의 <dependencies>에 설정한 것 외에도 설정한 것의 의존 관계의 jar도 복사됨)
- 라이브러리 구조를 트리(tree) 형태로 파악
mvn dependency:tree
-
mvn dependency:resolve
출처: https://forgiveall.tistory.com/193 [하하하하하]
'Jenkins' 카테고리의 다른 글
젠킨스(Jenkins) 파이프라인(Pipeline)을 통한 배포 작업 수행기(Param, Input, Google Chat,Revision 선택) (1) | 2024.06.20 |
---|---|
스크립트로 ssh접근 후 파일변경 (0) | 2021.09.15 |
젠킨스 Build 못해도 리눅스 서버에 적용시키기..테스트 (0) | 2021.09.15 |
SVN선택지 추가방법 (0) | 2021.09.15 |
젠킨스 설치방법 및 기타 주의사항들 (0) | 2021.09.15 |