昨天我第一次尝试使用OpenShift。该项目是一个Node Web应用程序,它使用Gulp进行构建。由于NPM模块无法在OpenShift上全局安装,显然,我不清楚如何让Jenkins在OpenShift上运行Gulp。我尝试了各种构建和pre_build操作挂钩(包括在StackOverflow上发布的一个解决此问题,但这导致构建退出)。当然,我不能成为唯一一个试图让OpenShift与Grunt / Gulp构建文件一起工作的人,但我似乎找不到任何答案。
答案 0 :(得分:6)
如果你在package.json中添加gulp作为依赖项,你只需用action_hook调用bin文件
创建文件.openshift/action_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_hooks/build
答案 1 :(得分:0)
因此可以通过向package.json添加gulp来将Gulp安装到齿轮(非全局)。但是,当我将gulp.js放入项目的根目录时,我得到了以下内容:
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)
我确定你可以说,这意味着某些事情(我怀疑起飞)正试图访问目录(/ var / lib / openshift),但它没有权限这样做(这是设计的)。基本上我所得到的是,直到你找到一种方法来吞噬吞吐量和随之而来的所有东西,你很可能真的很难在Openshift上运行它。您可能希望查看的一件好事是查看这是否可以在docker容器中运行。
答案 2 :(得分:0)
我刚刚在OpenShift上工作了!主要思想是,使用in app 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_hooks
,创建一个名为deploy
#!/bin/bash
cd $OPENSHIFT_REPO_DIR
node -e 'require("./gulpfile.js")()'
使动作挂钩文件deploy
可执行:
chmod +x .openshift/action_hooks/deploy
提交更改并将更改推送到远程。现在应该可以了。