我的grunt build
任务会创建我的项目所依赖的/dist/
。我不想在我的存储库中包含构建的文件。我宁愿使用Jenkins来允许我的项目持续集成。这就是我.openshift/action_hooks/build
中的内容,我不确定它为什么没有运行:
echo " >>>>>>>>> Building with grunt..."
grunt build
echo " >>>>>>>>> Finished building with grunt..."
我知道它没有运行,因为我没有在Jenkins构建日志或应用程序日志(rhc tail <app-name>
)中看到这些回显行。
此外,当我ssh到服务器并尝试手动运行grunt build
时,它无法找到grunt命令,所以这让我想知道这是否可能......
我是否应该在我的回购中包含已构建的文件?如果是这样,OpenShift何时会修复此问题? :)
如果我做错了,请告诉我。谢谢!
答案 0 :(得分:4)
这里的基本问题是openshift-origin-cartridge-nodejs,而且npm_global_module_list在全局npm模块中不包含grunt / grunt-cli。
我打开openshift/origin-server/issues/4069作为RFE,将其置于默认的盒式磁带中。
与此同时,我一直致力于engineersamuel/openshift-origin-cartridge-nodejs,其中包括bower和Grunt支持。
如果找到Gruntfile.js,我的盒式磁带将运行grunt prod
。默认情况下,grunt不在路径上,可以通过在命令前添加node_modules来轻松修复。
# If there is a grunt file, run $ grunt prod
if [ -f "${OPENSHIFT_REPO_DIR}"/Gruntfile.js ]; then
(cd "${OPENSHIFT_REPO_DIR}"; node_modules/grunt-cli/bin/grunt prod)
fi
./bin/control
还检查bower.json文件并安装相应的包。
您可以使用以下命令快速轻松地使用墨盒反射器测试此自定义墨盒:
rhc create-app nodejstest "http://cartreflect-claytondev.rhcloud.com/reflect?github=engineersamuel/openshift-origin-cartridge-nodejs"
答案 1 :(得分:4)
虽然这是一个老问题,但我刚刚发现了当前这个问题的答案。
首先,现在您可以将grunt-cli添加到依赖项(npm install grunt-cli --save
),而Openshift会自动将使用-g
标志通常安装的那些添加到路径中。
来自Openshift网站:
通常使用-g或--global标志安装的命令行实用程序将自动添加到系统$ PATH中,只要它们包含在项目的package.json文件的依赖项或devDependencies部分中。
在.openshift/action_hooks/build
内,您需要先将主目录重置为repo目录,然后运行grunt build
,然后将主目录切换回原始目录。
#!/bin/bash
OLD_HOME=$HOME
cd $OPENSHIFT_REPO_DIR
export HOME=$OPENSHIFT_REPO_DIR
grunt build
export HOME=$OLD_HOME
现在,grunt将能够找到您的Gruntfile.js并运行您需要的任何任务。
答案 2 :(得分:3)
一种可能性是使用安装后阶段来执行您的grunt任务。首先,以你不应该的方式安装grunt-cli:
npm install grunt-cli --save-dev
然后,更新您的package.json以在安装后阶段执行grunt prod
:
{
...
"scripts" : {
...
"postinstall": "node_modules/.bin/grunt prod",
...
}
...
}
现在,当您部署到OpenShift时,在安装了依赖项之后,您的grunt任务应该会运行。
这个解决方案并不是我认为的完美,但是应该完成工作,这样你就可以在构建自定义盒式磁带时启动并运行,就像@Samuel一样。< / p>
答案 3 :(得分:-3)
在Jenkins服务器上,以root用户身份,使用Node.js安装npm。
在Centos 6上,启用EPEL存储库并运行
yum install npm
其他方式和服务器来自:https://serverfault.com/questions/299288/how-do-you-install-node-js-on-centos
然后运行:
npm install grunt
在此之后,重新启动Jenkins,以便在运行作业时正确选择grunt路径。