Node.js 在OpenShift上运行一个大容量构建
昨天我第一次尝试了OpenShift。该项目是一个使用Gulp进行构建的节点web应用程序。由于NPM模块不能在OpenShift上全局安装,显然,我不清楚如何让Jenkins在OpenShift上运行Gulp。我尝试了各种构建和预构建操作挂钩(包括一个发布在StackOverflow上以解决此问题的挂钩,但这导致构建退出)。当然,我不是唯一一个试图让OpenShift使用Grunt/Gulp构建文件的人,但我似乎找不到任何答案。因此,通过将Gulp添加到package.json中,Gulp可以安装到gear(非全局)。但是,当我将gulp.js放在项目的根目录中时,我得到了以下结果:Node.js 在OpenShift上运行一个大容量构建,node.js,openshift,gulp,Node.js,Openshift,Gulp,昨天我第一次尝试了OpenShift。该项目是一个使用Gulp进行构建的节点web应用程序。由于NPM模块不能在OpenShift上全局安装,显然,我不清楚如何让Jenkins在OpenShift上运行Gulp。我尝试了各种构建和预构建操作挂钩(包括一个发布在StackOverflow上以解决此问题的挂钩,但这导致构建退出)。当然,我不是唯一一个试图让OpenShift使用Grunt/Gulp构建文件的人,但我似乎找不到任何答案。因此,通过将Gulp添加到package.json中,Gulp可以
Error: EACCES, permission denied '/var/lib/openshift'
at Object.fs.readdirSync (fs.js:654:18)
at Glob._readdir (/var/lib/openshift/53fe6bdee0b8cdad4c00035f/app-root/runtime/repo/node_modules/gulp/node_modules/liftoff/node_modules/findup-sync/node_modules/glob/glob.js:662:20)
at Glob._process (/var/lib/openshift/53fe6bdee0b8cdad4c00035f/app-root/runtime/repo/node_modules/gulp/node_modules/liftoff/node_modules/findup-sync/node_modules/glob/glob.js:446:15)
at Glob.iterator (/var/lib/openshift/53fe6bdee0b8cdad4c00035f/app-root/runtime/repo/node_modules/gulp/node_modules/liftoff/node_modules/findup-sync/node_modules/glob/glob.js:181:10)
at Array.forEach (native)
at new Glob (/var/lib/openshift/53fe6bdee0b8cdad4c00035f/app-root/runtime/repo/node_modules/gulp/node_modules/liftoff/node_modules/findup-sync/node_modules/glob/glob.js:179:22)
at glob (/var/lib/openshift/53fe6bdee0b8cdad4c00035f/app-root/runtime/repo/node_modules/gulp/node_modules/liftoff/node_modules/findup-sync/node_modules/glob/glob.js:57:11)
at Function.globSync [as sync] (/var/lib/openshift/53fe6bdee0b8cdad4c00035f/app-root/runtime/repo/node_modules/gulp/node_modules/liftoff/node_modules/findup-sync/node_modules/glob/glob.js:76:10)
at /var/lib/openshift/53fe6bdee0b8cdad4c00035f/app-root/runtime/repo/node_modules/gulp/node_modules/liftoff/node_modules/findup-sync/lib/findup-sync.js:32:19
at Function.map (/var/lib/openshift/53fe6bdee0b8cdad4c00035f/app-root/runtime/repo/node_modules/lodash/dist/lodash.js:3508:27)
我相信您可以看出,这意味着有东西(我怀疑是liftoff)试图访问目录(/var/lib/openshift),但它没有这样做的权限(按照设计)。基本上,我想说的是,在你找到一种集装箱化大口啤酒的方法之前,你很可能很难在Openshift上安装和运行它。您可能想要检查的一件好事是,看看这是否可以在docker容器中工作 我刚在OpenShift上工作了一顿!主要思想是,使用应用程序内的
gulp
,而不是全局安装的gulp
,然后编写一个操作钩子,在部署的某个阶段触发gulp任务
以下是详细的步骤:
gulpfile.js
并将任务转换为POJO,这样就可以在gulp之外触发任务function buildJS() {
return gulp.src('client-app.js')
.pipe(browserify())
.pipe(concat('bundle.js'))
.pipe(gulp.dest('public/javascript/dist'))
.pipe(rename('bundle.min.js'))
.pipe(uglify())
.pipe(gulp.dest('public/javascript/dist'));
}
gulp.task('scripts', buildJS);
...
module.exports = buildJS; //export this function in the end
deploy
是我想要的阶段/.openshift/action\u hooks
,创建一个名为deploy
#!/bin/bash
cd $OPENSHIFT_REPO_DIR
node -e 'require("./gulpfile.js")()'
deploy
可执行:
chmod+x.openshift/action\u hooks/deploy
#!/bin/bash
cd $OPENSHIFT_REPO_DIR
node -e 'require("./gulpfile.js")()'
如果在package.json中添加gulp作为依赖项,则只需使用action_钩子调用bin文件即可 创建文件
.openshift/action\u hooks/build
#!/bin/bash
OLD_HOME=$HOME
export HOME=$OPENSHIFT_REPO_DIR
if [ -f "${OPENSHIFT_REPO_DIR}"/Gulpfile.js ]; then
(cd "${OPENSHIFT_REPO_DIR}"; node_modules/.bin/gulp)
fi
export HOME=$OLD_HOME
记住
chmod+x.openshift/action\u hooks/build
openshift一直是使用Node的噩梦。您可以尝试手动运行本地npm包node\u modules/grunt cli/bin/grunt
。我想安装bower,但遇到了一些问题,所以只能在本地安装。这样行吗?
#!/bin/bash
OLD_HOME=$HOME
export HOME=$OPENSHIFT_REPO_DIR
if [ -f "${OPENSHIFT_REPO_DIR}"/Gulpfile.js ]; then
(cd "${OPENSHIFT_REPO_DIR}"; node_modules/.bin/gulp)
fi
export HOME=$OLD_HOME