在OpenShift Build之前运行Grunt Build

时间:2013-10-20 07:04:21

标签: git node.js jenkins gruntjs openshift

我的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何时会修复此问题? :)

如果我做错了,请告诉我。谢谢!

4 个答案:

答案 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路径。