3

我的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

4 回答 4

4

这里的根本问题是openshift-origin-cartridge-nodejs并且npm_global_module_list在全局 npm 模块中不包括 grunt/grunt-cli。

我打开了 openshift/origin-server/issues/4069作为 RFE,以便在默认墨盒中获取它。

与此同时,我一直在研究包括 bower 和 Grunt 支持的 Engineersamuel/openshift-origin-cartridge-nodejs 。

grunt prod如果找到 Gruntfile.js,我的墨盒就会运行。默认情况下,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"

于 2013-11-01T14:17:25.267 回答
4

虽然这是一个古老的问题,但我刚刚发现了这个问题的最新答案。

首先,现在您可以将 grunt-cli 添加到您的依赖项 ( ) 中,Openshift 会自动将通常使用该标志npm install grunt-cli --save安装的那些添加到路径中。-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 并运行您需要的任何任务。

于 2015-03-07T05:18:17.563 回答
3

一种可能性是使用 postinstall 阶段来执行您的 grunt 任务。首先,以不应该的方式安装 grunt-cli:

npm install grunt-cli --save-dev

然后,更新您的 package.json 以grunt prod在安装后阶段执行:

{
  ...
  "scripts" : {
    ...
    "postinstall": "node_modules/.bin/grunt prod",
    ...
  }
  ...
}

现在,当您部署到 OpenShift 并安装依赖项后,您的 grunt 任务应该会运行。

这个解决方案不是我认为完美的,但应该完成工作,这样您就可以在构建自定义墨盒时启动并运行某些东西,就像@Samuel 所做的那样。

于 2014-05-19T17:00:17.977 回答
-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 路径。

于 2013-10-20T16:47:46.907 回答