运行 gulp 个任务 CruiseControl.NET
Running gulp tasks on CruiseControl.NET
有人在 CruiseControl 上使用过 运行 gulp 吗?
我们在通过 xml 配置文件自动执行该过程时遇到了一些麻烦。可以在本地和虚拟机上通过 CommandPrompt 手动启动任务,但是从 CruiseControl 启动时会出现错误:
ThoughtWorks.CruiseControl.Core.Tasks.BuilderException: Unable to execute: gulp TaskName
System.IO.IOException: Unable to execute file [D:\CC.NET\VSS\%CorrectPathName%\gulp]. The file may not exist or may not be executable.
非常感谢任何帮助。
更新
在尝试了 Simon Laing 的建议后,开始出现另一个错误:
<buildresults>
<message level="Error">module.js:327</message>
<message level="Error"> throw err;</message>
<message level="Error"> ^</message>
<message level="Error">Error: Cannot find module 'D:\CC.NET\VSS\Path\to\the\project\gulp'</message>
<message level="Error"> at Function.Module._resolveFilename (module.js:325:15)</message>
<message level="Error"> at Function.Module._load (module.js:276:25) </message>
<message level="Error"> at Function.Module.runMain (module.js:441:10) </message>
<message level="Error"> at startup (node.js:139:18)</message>
<message level="Error"> at node.js:968:3</message>
</buildresults>
</build>
</cruisecontrol>
PATH 设置为:%APPDATA%\npm,gulp 是通过
安装的
npm install gulp -g
和
npm install gulp --save-dev
在我看来,配置启动的节点在错误的位置搜索 gulp。
Gulp 通过 gulp-cli 从命令行正常执行,这消除了使用 gulp
参数执行 node
的需要。
要解决您的问题,您需要告诉巡航控制哪个可执行文件 (node.exe) 到 运行 使用哪个工具及其参数。
在你的情况下应该是:
- 文件名:
Path\to\node.exe
- 参数:
gulp <any-other-switches>
备选方案,让cmd为你执行node:
- 文件名:
c:\windows\system32\cmd.exe
- 参数:
/c gulp <any-other-switches>
cmd
然后可以读取 路径 并执行注释,因为 gulp-cli
将控制您是否手动调用它。
迟到的答案,我知道,但是,即使尝试了上面接受的答案中的方法,我仍然遇到同样的问题。
在我的例子中,我使用 "au build" 构建了一个 aurelia 应用程序,它需要找到 运行 节点。不管我怎么努力,我就是无法让 CCNet 看到路径,所以我在任务中添加了一个 "Environment" 块,并将我的系统路径目录复制到其中。
一旦我这样做了,一切又变得愉快了。
作为参考,这是我的 CCNet.config 文件中的 exec 任务现在的样子。
<cruisecontrol xmlns:cb="urn:ccnet.config.builder">
<project name="blahproject">
<sourcecontrol type="git">
...
</sourcecontrol>
<triggers>
...
</triggers>
<tasks>
<exec>
<executable>C:\windows\system32\cmd.exe</executable>
<baseDirectory>C:\myproject\working\folder</baseDirectory>
<buildArgs>/c au build</buildArgs>
<buildTimeoutSeconds>60</buildTimeoutSeconds>
<successExitCodes>0</successExitCodes>
<environment>
<variable>
<name>path</name>
<value>C:\Users\Administrator\AppData\Roaming\npm;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\Git\cmd;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;C:\Program Files (x86)\MSBuild.0\Bin;C:\Program Files\nodejs\</value>
</variable>
</environment>
</exec>
<msbuild>
...
</msbuild>
</tasks>
</project>
</cruisecontrol>
如您所见,环境设置路径以便可以找到我的所有工具,同时使用基本目录标记有效地设置项目文件所在的工作目录。
有人在 CruiseControl 上使用过 运行 gulp 吗? 我们在通过 xml 配置文件自动执行该过程时遇到了一些麻烦。可以在本地和虚拟机上通过 CommandPrompt 手动启动任务,但是从 CruiseControl 启动时会出现错误:
ThoughtWorks.CruiseControl.Core.Tasks.BuilderException: Unable to execute: gulp TaskName
System.IO.IOException: Unable to execute file [D:\CC.NET\VSS\%CorrectPathName%\gulp]. The file may not exist or may not be executable.
非常感谢任何帮助。
更新 在尝试了 Simon Laing 的建议后,开始出现另一个错误:
<buildresults>
<message level="Error">module.js:327</message>
<message level="Error"> throw err;</message>
<message level="Error"> ^</message>
<message level="Error">Error: Cannot find module 'D:\CC.NET\VSS\Path\to\the\project\gulp'</message>
<message level="Error"> at Function.Module._resolveFilename (module.js:325:15)</message>
<message level="Error"> at Function.Module._load (module.js:276:25) </message>
<message level="Error"> at Function.Module.runMain (module.js:441:10) </message>
<message level="Error"> at startup (node.js:139:18)</message>
<message level="Error"> at node.js:968:3</message>
</buildresults>
</build>
</cruisecontrol>
PATH 设置为:%APPDATA%\npm,gulp 是通过
安装的npm install gulp -g
和
npm install gulp --save-dev
在我看来,配置启动的节点在错误的位置搜索 gulp。
Gulp 通过 gulp-cli 从命令行正常执行,这消除了使用 gulp
参数执行 node
的需要。
要解决您的问题,您需要告诉巡航控制哪个可执行文件 (node.exe) 到 运行 使用哪个工具及其参数。
在你的情况下应该是:
- 文件名:
Path\to\node.exe
- 参数:
gulp <any-other-switches>
备选方案,让cmd为你执行node:
- 文件名:
c:\windows\system32\cmd.exe
- 参数:
/c gulp <any-other-switches>
cmd
然后可以读取 路径 并执行注释,因为 gulp-cli
将控制您是否手动调用它。
迟到的答案,我知道,但是,即使尝试了上面接受的答案中的方法,我仍然遇到同样的问题。
在我的例子中,我使用 "au build" 构建了一个 aurelia 应用程序,它需要找到 运行 节点。不管我怎么努力,我就是无法让 CCNet 看到路径,所以我在任务中添加了一个 "Environment" 块,并将我的系统路径目录复制到其中。
一旦我这样做了,一切又变得愉快了。
作为参考,这是我的 CCNet.config 文件中的 exec 任务现在的样子。
<cruisecontrol xmlns:cb="urn:ccnet.config.builder">
<project name="blahproject">
<sourcecontrol type="git">
...
</sourcecontrol>
<triggers>
...
</triggers>
<tasks>
<exec>
<executable>C:\windows\system32\cmd.exe</executable>
<baseDirectory>C:\myproject\working\folder</baseDirectory>
<buildArgs>/c au build</buildArgs>
<buildTimeoutSeconds>60</buildTimeoutSeconds>
<successExitCodes>0</successExitCodes>
<environment>
<variable>
<name>path</name>
<value>C:\Users\Administrator\AppData\Roaming\npm;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\Git\cmd;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;C:\Program Files (x86)\MSBuild.0\Bin;C:\Program Files\nodejs\</value>
</variable>
</environment>
</exec>
<msbuild>
...
</msbuild>
</tasks>
</project>
</cruisecontrol>
如您所见,环境设置路径以便可以找到我的所有工具,同时使用基本目录标记有效地设置项目文件所在的工作目录。