2014-06-24 3 views
1

Windows Server 2012에서 CruiseControl.NET을 실행하는 연속 통합 서버가 있습니다.이 서비스는 사용자 ccnet으로 실행됩니다. RDP를 통해 서버에 로그온하고 명령 창을 열고 에 C:\Tools\NodeJS이 포함되어 있는지 확인했습니다.nant를 사용하여 exec를 통해 LESS 컴파일

내가 덜 사용하기 시작한 프로젝트가 많고 CI 서버의 경우 설치해야 할 것이 아니라 인스턴스가 하나만있는 것이 좋습니다. (프로젝트는 로컬에서 실행될 필요가 없으며 디버그 모드로 실행되지 않을 때 LessJS를 제거하는 플래그가있는 LessJS를 사용합니다).

C:\CruiseControl\MyProject\private\working>lessc.cmd Website\Content\MyProject.less MyProject.css 
C:\CruiseControl\MyProject\private\working>dir MyProject.css 
... 
06/24/2014 11:52 AM   159,145 MyProject.css 

을하지만 NANT에서 exec를 통해이를 실행하려고하면, 나는 악명 높은 "을 (를) 찾을 수 없습니다 모듈"얻을 :

C:\Tools\NodeJS>npm install less -g 
C:\Users\ccnet\AppData\Roaming\npm\lessc -> C:\Users\ccnet\AppData\Roaming\npm\node_modules\less\bin\lessc 
[email protected] C:\Users\ccnet\AppData\Roaming\npm\node_modules\less 
├── [email protected] 
... etc... 

나는 수동으로 lessc를 호출 할 수 있습니다 분명히

module.js:340 
throw err; 
^ 
Error: Cannot find module 'c:\CruiseControl\MyProject\private\working\node_modules\less\bin\lessc' 
at Function.Module._resolveFilename (module.js:338:15) 
at Function.Module._load (module.js:280:25) 
at Module.runMain (module.js:492:10) 
at process.startup.processNextTick.process._tickCallback (node.js:244:9) 

을 그것은 더 적은 것을 위해 틀린 장소에서보고있다. 하지만 왜? 내 PATH은 언급 한대로 정확합니다. 명령 행에서 작동합니다. workingdir 특성은 명령 줄 예제와 같은 폴더로 설정됩니다.

이 시나리오를 CI 시나리오에 설정하는 더 좋은 방법이 있습니까?

답변

1

난 트릭을하여 문제를 해결할 수있었습니다. 이 명령 프롬프트에서 잘 실행되었는지 실현

는, 나는 단순히 lessc 그 다음은/C를 매개 변수로 명령 프롬프트를 호출하는 NANT에게 내가 원하는 모든 매개 변수는에 전달할 :

<exec program="cmd.exe" workingdir="${buildfolder}" failonerror="true"> 
    <arg line="/c lessc.cmd --clean-css Website\Content\Site.less Website\Content\Site.min.css" /> 
</exec> 
+0

여러 nodejs 앱 호출을 포함하는 bat 파일을 실행할 수도 있습니다. 그러나 모든 것을 단일 스크립트 (nAnt)에 저장하기 때문에 접근 방법이 훨씬 마음에 들었습니다. [exec program = "some.bat"] – user1821052