728x90
반응형
상황
- GitLab + Nexacro N으로 CI/CD(빌드/배포) 구성 중 리눅스에서 넥사크로를 빌드할수 있는 방법이 있다고 하여 도전해보았다.
( 이제까지 넥사크로 빌드 툴은 OS가 윈도우로 한정되어 있었다 ) - GitLab-Runner 설치 윈도우용으로 셋팅했다. (https://yourusername.tistory.com/186)
처리방법
NexacroN_Deploy_JAVA 다운로드
- 먼저 투비소프트 지원사이트에 접속하여 PRODUCT > Nexacro N > Download 메뉴로 들어간다.
- Server [API,XENI] 탭에서 Nexacro Deploy Java 파일을 다운로드 받는다.
- NexacroN_Deploy...zip 파일 압축을 해제해 놓는다. ( 일단 Runner 실행시켜서 File Sharing 시켜놓고 옮길예정 )
GitLab-Runner 설정 수정
- GitLab-Runner설정 파일 (config.toml)을 열어서 아래와 같이 수정한다.
- Runner등록은 https://yourusername.tistory.com/186을 참고한다.
- 다른건 만질필요 없고, executor = "docker" 로, [runner.docker] 부분은 복사 붙여 넣기 해서 넣어준다.
- [runner.docker]부분에 volumes 부분은 .m2는 maven 로컬 저장소 (해주는게좋다, 매번 새로받기 싫으면), deploy는 배포할 파일을 저장해둘 경로, util은 넥사크로 빌드 툴 & nexacroLib 파일이 들어갈 경로다.
concurrent = 1
check_interval = 0
shutdown_timeout = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "..."
url = "..."
id = 4
token = "..."
token_obtained_at = 2023-01-13T03:06:04Z
token_expires_at = 0001-01-01T00:00:00Z
executor = "docker"
[runners.custom_build_dir]
[runners.cache]
MaxUploadedArchiveSize = 0
[runners.cache.s3]
[runners.cache.gcs]
[runners.cache.azure]
[runners.docker]
tls_verify = false
image = "iflavoursbv/mvn-openjdk-8-alpine"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache", "/c/gitlab-runner/프로젝트명/maven/.m2:/root/.m2/", "/c/gitlab-runner/프로젝트명/deploy:/프로젝트명/deploy", "/c/gitlab-runner/프로젝트명/util:/프로젝트명/util"]
shm_size = 0
Runner 수정내용 적용
- config.toml파일을 위와 같이 수정해주고, 적용을 위해 gitlab-runner를 stop, start 해준다. (restart 명령어로 한번에 해도된다.)
#러너 중지
gitlab-runner-windows-amd64.exe stop gitlab-runner
#러너 시작
gitlab-runner-windows-amd64.exe start gitlab-runner
GitLab CI/CD & File Sharing
- GitLab 프로젝트 메뉴에 CI/CD > Editor를 열어서 아래와 같이 수정해준다.
(-P가 프로젝트 파일 (xprj) 위치, -O는 output 폴더 (빌드파일 저장경로), -B는 nexacroLib 폴더)
variables:
nexaTool: "/프로젝트/util"
nexaLib: "${nexaTool}/nexacrolib"
deployPath: "/프로젝트/deploy"
stages:
- build
build:
stage: build
script:
- java -version
- echo "build"
- $nexaTool/bin/start.sh
-P "./nexa/testProject.xprj"
-O $deployPath/$CI_PIPELINE_ID
-B $nexaLib -REGENERATE -COMPRESS -SHRINK
only:
- main
tags:
- maven
- 그리고 GitLab 프로젝트 CI/CD에 Pipeline을 실행시켜 본다. ( File Sharing하려고 한번 실행 시키는것, Docker Desktop for Windows 가 깔린 Windows의 우측 하단을 잘 보고 있다가 FileSharing 메시지가 뜨면 Share it 해주자. )
- 아래처럼 폴더가 잘 만들어 졌으면 File Sharing 완료!
NexacroN Deploy Tool & Lib 파일 셋팅
- File Sharing을 다 했으면, NexacroN_Deploy...zip 압축푼걸 runner volume에 마운트 했던 util 폴더 (/c/gitlab-runner/프로젝트명/util)에 파일들을 옮겨 놓는다
- 그리고 넥사크로 빌드할때 필요한 nexacroN Lib 파일을 투비소프트 지원사이트에서 다운받아 util폴더에 같이 넣어준다.
- Product > Nexceo N > Down 메뉴로 이동해서 받고 싶은 버전에 All 버튼을 눌러 다운로드 받는다.
- 다운받은 압축파일을 풀면 나오는 NexcaoN_frameworklibrary_xxxx.zip 파일도 압축을 풀어준다.
- NexcaoN_frameworklibrary_xxxx.zip 파일의 압축을 풀면 nexacolib.zip 압축파일이 나오는데 또 압축을 해제 해준다
(아니 몇번을 압축한거여 ㅡㅡ+ 마트료시카 인형이야 뭐야..)
- 그럼 nexacrolib 폴더가 나온다.
- nexacrolib 이 폴더를 c:/gitlab-runner/프로젝트/util 폴더 아래에 넣어준다.
Runner 내부 구조 확인
- GitLab-Runner 내부 구조를 확인 해 보기위해, GitLab 프로젝트 CI/CD Editor를 열고, build script 에 ls, pwd를 추가하고 Pipeline을 돌려본다.
variables:
nexaTool: "/프로젝트/util"
nexaLib: "${nexaTool}/nexacrolib"
deployPath: "/프로젝트/deploy"
stages:
- build
build:
stage: build
script:
- ls
- pwd
- java -version
- echo "build"
- $nexaTool/bin/start.sh
-P "./nexa/testProject.xprj"
-O $deployPath/$CI_PIPELINE_ID
-B $nexaLib -REGENERATE -COMPRESS -SHRINK
only:
- main
tags:
- maven
- Job 실행 내용을 보면 파란색이 현재 경로에 있는 파일 리스트인데 GitLab프로젝트에 main브런치 소스와 동일하다.
- 빨간색은 현재 경로를 표시해주는데 /builds는 고정인것 같고 그뒤에는 GitLab 프로젝트 경로가 나온다.
테스트
- 파이프라인을 돌려서 리눅스에서 넥사크로 빌드가 되는지 확인 해보자
(GitLab CI/CD에 아래 문구가 리눅스에서 넥사크로 빌드 실행 명령)
- $nexaTool/bin/start.sh
-P "./nexa/testProject.xprj"
-O $deployPath/$CI_PIPELINE_ID
-B $nexaLib -REGENERATE -COMPRESS -SHRINK
- 되긴된다..
- New 프로젝트 해서 만든 깨끗한 프로젝트에서는 되긴되는데..
- _extlib_에 추가된 외부/개발 라이브러리들에서는 오류가 발생한다.
- 이 오류들은 넥사크로 Window 빌더에서는 발생하지 않는데, 커스텀 프로퍼티가 있어도 윈도우 빌더는 빌드해주는데 리눅스 빌더 (start.sh)는 오류를 발생시킨다..
결론
넥사크로 리눅스 빌더? 아직은 비추!
- 아직은 윈도우 빌더와 리눅스 빌더간 차이가 좀 있는것같고, 이 차이가 없어지면 도입을 검토해야 할것같다.
- 만약 추가 라이브러리 없이 개발하는 사이트고, 추후에도 외부 라이브러리를 사용할 계획이 없다면 한번 사용해봐도 될것같다.
(하지만 말리고싶다..)
728x90
반응형