Spring boot와 React 를 사용하는 application 에 대한 build를 Nexus를 활용해 수행시 maven settings.xml, npmrc 파일이 사전에 해당 경로에 생성되어 있어야 합니다. 이를 Jenkins 상에서는 어떤 방법으로 사전에 생성할수 있는지에 대하여 알아보도록 하겠습니다.
우선 간단히 사용법을 요약해보자면 Jenkins 상에 settings.xml 혹은 npmrc 파일을 업로드하고 해당 파일을 jenkinsfile(pipeline)상에서 사용하거나 Jenkins freestyle project 상에서 선택하여 사용할수 있게 하는 방법입니다.
Plugins
먼저 settings.xml과 npmrc를 Jenkins 내에 파일로 등록해 놓고 사용하기 위해서는 별도의 plugin 설치가 필요합니다.
아래 리스트는 Jenkins 상에서 Build시 Maven Settings.xml 파일과 npmrc 파일 사용을 위해 설치되어야 하는 plugin list 입니다.
Plugin Name | URL | Description |
---|---|---|
Pipeline NPM Plugin | https://wiki.jenkins.io/display/JENKINS/Pipeline+NPM+Plugin | npmrc 사용 |
Config File Provider Plugin | https://wiki.jenkins.io/display/JENKINS/Config+File+Provider+Plugin | settings.xml 사용 |
Config File Provider Plugin 사용법
그러면 먼저 Maven에서 사용하는 Settings.xml 을 Jenkins에 업로드 하고 이를 jenkinsfile(pipeline)으로 선언하여 사용하는 방법에 대하여 알아보도록 하겠습니다.
앞서 언급된 plugin을 설치합니다.
설치된 plugin 을 사용하기 위해 Manage Jenkins 메뉴상에 Managed files 항목을 선택하여 이동합니다.
Managed files 항목에서 아래와 같이 “Global Maven settings.xml”을 선택합니다. (Maven settings.xml 을 선택해도 무방합니다.)
기존 jenkins job을 사용하는 방식은 다음과 같습니다.
실제 jenkinsfile(pipeline)의 경우 다음과 같이 작성이 이루어지게 됩니다. (예제는 scripted pipeline 입니다.)
실제 아래와 같은 jenkinsfile(pipeline)으로 작성되어집니다.
configFileProvider([configFile(fileId: 'maven_settings_xml', variable: 'maven_settings')]) { sh 'mvn -s $maven_settings clean package' }
Jenkins Job을 실행한 결과를 output을 통해 확인해보면 다음과 같이 settings.xml 파일을 복사하는 것을 알수 있고 -s option을 통해 settings.xml파일을 load함을 알수 있습니다.
[Pipeline] configFileProvider provisioning config files... copy managed file [MyGlobalSettings] to file:/home/jenkins/agent/workspace/jacobbaek-nexustest@tmp/config6273356296431193901tmp [Pipeline] { [Pipeline] sh + mvn -s /home/jenkins/agent/workspace/jacobbaek-nexustest@tmp/config6273356296431193901tmp clean package ...
pipeline의 example이 필요한 경우 위 캡처화면상에 “Pipeline Syntax”를 클릭하면 각 pipeline을 사용하는 example을 생성해볼수 있습니다.
아래는 현재 언급된 config file provider plugin의 예제입니다.
Pipeline NPM plugin 사용법
이번에는 node npm install에서 사용될 .npmrc 파일을 Jenkins에 업로드 하고 이를 jenkinsfile(pipeline)으로 선언하여 사용하는 방법에 대하여 알아보도록 하겠습니다.
앞서 언급된 plugin을 설치합니다.
- https://wiki.jenkins.io/display/JENKINS/Pipeline+NPM+Plugin 와 동일한 plugin의 설치를 진행합니다.
앞선 config file provider plugin과 동일하게 Managed files 항목으로 이동하여 custom file을 생성합니다.
npmrc 생성을 위해서는 아래 명령의 결과가 필요하여 해당 결과를 출력해본후
echo -n 'admin:password' | openssl base64
이를 활용하여 아래와 같이 Config file을 생성합니다.
참고로 .npmrc 파일은 다음과 같은 format으로 생성되어져야 합니다.
registry=[nexus의 npm proxy 주소] _auth=[id:password base64 encoding 결과]
생성된 npmrc 파일을 아래와 같이 withNPM module을 사용하여 해당 파일을 생성하도록 합니다.
실제 jenkinsfile의 block 은 다음과 같이 구성됩니다.
withNPM(npmrcConfig: 'npmrc_file_ID' { sh 'npm install' }
구성이 완료된후 jenkins job을 실행하면 아래와 같이 npm install 시점에 .npmrc 파일을 생성하여 지정된 registry에서 파일을 다운로드 받게 되는 것을 output결과로 확인할 수 있습니다.OutPut
[Pipeline] dir Running in /home/jenkins/agent/workspace/jacobbaek-nexustest/iot-frontend [Pipeline] { [Pipeline] sh + pwd /home/jenkins/agent/workspace/jacobbaek-nexustest/iot-frontend [Pipeline] withNPM Using settings config with name npmrc_file Writing .npmrc file: /home/jenkins/agent/workspace/jacobbaek-nexustest/iot-frontend/.npmrc [Pipeline] { (hide) [Pipeline] sh + npm install
참고로 해당 plugin 또한 pipeline syntax 기능을 이용하여 example을 생성해볼수 있습니다.
만약 jenkinsfile(pipeline)이 아닌 Jenkins freestyle project로 생성한 경우라면 아래와 같이 provide configuration files 항목을 선택하고 기존에 생성했던 file을 선택하여 사용할 수 있습니다.