2017-12-13 14 views
0

Maven을 통해 Jenkins에서 성능 문제/NPM 버그 (?)가 발생했습니다.Maven의 NPM Jenkins의 Build는 모듈의 재귀 (self-) 패키징으로 인해 오래 걸립니다.

  1. 필요한 경우 (예 : 꿀꿀-CLI) NPM을 통해 설치
  2. 설치
  3. 이 빌드 도구 NPM 종속성을 설치) (노드에게 & NPM을 설치 에) https://github.com/eirslett/frontend-maven-plugin 사용 :

    내가 무엇을하고 오전 프로젝트의 특정 위치에 npm 의존성 (예 : jquery)을 지정합니다 (--global & --prefix 모두 사용)

  4. JS depndencies를 수정/추가하기 위해 oject의 WAR

로컬 빌드 (Windows)에서는 Jenkins (Linux) & 4-5 분에 동일한 빌드가 약 30 분 걸립니다.

3 단계 동안 nhpm은 실제로 somehting을 가져 오기 전에 오래 걸리는 것처럼 보입니다 (자세한 npm 출력). 그 동안 NPM은 package.tgz를 작성하는 것으로 보이는데, Windows (local)에는 package.json 만 있고 Linux (Jenkins)에서는 다음과 같은 구조에 project-Dependencies-package-name의 재귀 사본이 들어 있습니다.

package 
|-lib (+ package.json) 
    |-node_modules 
    |-project-Dependencies-package-name 
     |-lib (+ package.json) 
     |-node_modules 
      |-project-Dependencies-package-name 
      |-lib (+ package.json) 
       ... 

참고는 프로젝트 종속성-패키지 이름은 "모듈"실제로 게시하거나 다른 곳에서 사용 않습니다 것을 때문에 프로젝트 JS 종속성을 선언 할 수있는 package.json의 존재.

[ERROR] npm verb addLocalTarball adding from inside cache /usr/local/tomcat/.npm/project-Dependencies-package-name/0.0.1/package.tgz 
[ERROR] npm verb correctMkdir /usr/local/tomcat/.npm correctMkdir not in flight; initializing 
[ERROR] npm verb afterAdd /usr/local/tomcat/.npm/project-Dependencies-package-name/0.0.1/package/package.json not in flight; writing 
[ERROR] npm verb correctMkdir /usr/local/tomcat/.npm correctMkdir not in flight; initializing 
[ERROR] npm verb afterAdd /usr/local/tomcat/.npm/project-Dependencies-package-name/0.0.1/package/package.json written 
[ERROR] npm info install [email protected] into /appl/tomcat-version/.jenkins/jobs/my-continous-build-workspace/workspace/my-project/src/main/javascript/dependencies/lib 
[ERROR] npm info installOne [email protected] 
[ERROR] npm verb installOne of project-Dependencies-package-name to /appl/tomcat-version/.jenkins/jobs/my-continous-build-workspace/workspace/my-project/src/main/javascript/dependencies/lib not in flight; installing 
[ERROR] npm verb correctMkdir /usr/local/tomcat/.npm/_locks correctMkdir not in flight; initializing 
[ERROR] npm verb lock using /usr/local/tomcat/.npm/_locks/compassDienste-Dependenc-39458a7b01736484.lock for /appl/tomcat-version/.jenkins/jobs/my-continous-build-workspace/workspace/my-project/src/main/javascript/dependencies/lib/node_modules/project-Dependencies-package-name 
[ERROR] npm verb unbuild lib/node_modules/project-Dependencies-package-name 
[ERROR] npm info preuninstall [email protected] 
[ERROR] npm info uninstall [email protected] 
[ERROR] npm verb unbuild rmStuff [email protected] from /appl/tomcat-version/.jenkins/jobs/my-continous-build-workspace/workspace/my-project/src/main/javascript/dependencies/lib/node_modules 
[ERROR] npm info postuninstall [email protected] 
[ERROR] npm verb gentlyRm don't care about contents; nuking /appl/tomcat-version/.jenkins/jobs/my-continous-build-workspace/workspace/my-project/src/main/javascript/dependencies/lib/node_modules/project-Dependencies-package-name 

[ERROR] npm verb tar unpack /usr/local/tomcat/.npm/project-Dependencies-package-name/0.0.1/package.tgz 
[ERROR] npm verb tar unpacking to /appl/tomcat-version/.jenkins/jobs/my-continous-build-workspace/workspace/my-project/src/main/javascript/dependencies/lib/node_modules/project-Dependencies-package-name 
[ERROR] npm verb gentlyRm don't care about contents; nuking /appl/tomcat-version/.jenkins/jobs/my-continous-build-workspace/workspace/my-project/src/main/javascript/dependencies/lib/node_modules/project-Dependencies-package-name 

[ERROR] npm verb write writing to /appl/tomcat-version/.jenkins/jobs/my-continous-build-workspace/workspace/my-project/src/main/javascript/dependencies/lib/node_modules/project-Dependencies-package-name/package.json 
[ERROR] npm info preinstall [email protected] 
[ERROR] npm verb readDependencies loading dependencies from /appl/tomcat-version/.jenkins/jobs/my-continous-build-workspace/workspace/my-project/src/main/javascript/dependencies/lib/node_modules/project-Dependencies-package-name/package.json 
[ERROR] npm verb readDependencies loading dependencies from /appl/tomcat-version/.jenkins/jobs/my-continous-build-workspace/workspace/my-project/src/main/javascript/dependencies/lib/node_modules/project-Dependencies-package-name/package.json 

구성 파일 : 프로젝트의 모듈의

의 pom.xml, 플러그인 -> 실행 섹션

1 단계 설치 노드 & NPM 현재 시스템에 설치되어 있지 않은 경우

<execution> 
    <id>install node</id> 
    <goals> 
    <goal>install-node-and-npm</goal> 
    </goals> 
    <configuration> 
    <nodeVersion>v4.6.0</nodeVersion> 
    </configuration> 
</execution> 

2 단계 dev/build-tool 종속성을 설치하십시오 (아래에서 grunt에 필요).

<execution> 
    <id>npm install</id> 
    <goals> 
    <goal>npm</goal> 
    </goals> 
</execution> 

3 단계 설치 실제 프로젝트 종속성

<execution> 
    <id>install project js dependencies</id> 
    <goals> 
    <goal>npm</goal> 
    </goals> 
    <configuration> 
    <workingDirectory>src/main/javascript/dependencies</workingDirectory> 
    <arguments>install --production --global --prefix ./ --userconfig=.npmrc</arguments> 
    </configuration> 
</execution> 

(여기에서 벌금을) 인출 된 의존성으로 더 많은 무언가를 4 단계

<execution> 
    <id>grunt build</id> 
    <goals> 
    <goal>grunt</goal> 
    </goals> 
</execution> 

.npmrc

registry = https://nexus.company.tld/nexus/content/groups/company-npm/ 

빌드 -tools package.json

{ 
    "name": "build-tools", 
    "version": "0.0.1", 
    "devDependencies": { 
    "grunt-cli": "~1.0.1", 
    "grunt": "~0.4.5", 
    "autoprefixer": "^7.1.2", 
    "cssnano": "^3.10.0", 
    "grunt-contrib-concat": "^1.0.1", 
    "grunt-contrib-copy": "^1.0.0", 
    "grunt-contrib-jshint": "^0.10.0", 
    "grunt-contrib-sass": "^1.0.0", 
    "grunt-contrib-uglify": "^0.5.1", 
    "grunt-postcss": "^0.8.0", 
    "grunt-sass": "^2.0.0", 
    "pixrem": "^4.0.1" 
    } 
} 

프로젝트 종속성 패키지.JSON

{ 
    "name": "project-Dependencies-package-name", 
    "version": "0.0.1", 
    "dependencies": { 
    "some-internal-js-project": "1.1.2", 
    "tablesorter": "~2.18.4", 
    "bootstrap": "^3.3.7", 
    "html5shiv": "^3.7.3", 
    "jquery": "^3.2.1", 
    "jquery-dotdotdot": "^1.8.2", 
    "jquery-ui": "^1.12.1", 
    "jquery-ui-dist": "^1.12.1", 
    "popper.js": "^1.12.3", 
    "respond.js": "^1.4.2", 
    "tooltipster": "^4.2.5", 
    "bootstrap-sass": "^3.3.7" 
    } 

}

답변

0

해결는 3 단계의 목표에서 모든 인수를 제거합니다.

"프로젝트 종속성"NPM 아티팩트를 2 단계의 아티팩트가 아닌 다른 폴더 ("빌드 도구 종속성")에 배치하려면 다른 목표 (2 단계)와 다른 작업 디렉토리가 있으면 충분합니다.

처음에는 무엇이 잘못되었는지/내가 잘못했는지 이해하고 싶습니다.

<execution> 
    <id>install compass js dependencies</id> 
    <goals> 
     <goal>npm</goal> 
    </goals> 
    <configuration> 
     <workingDirectory>src/main/javascript/dependencies</workingDirectory> 
    </configuration> 
</execution>