在OpenShift上运行Gulp构建

时间:2014-09-08 15:46:56

标签: node.js openshift gulp

昨天我第一次尝试使用OpenShift。该项目是一个Node Web应用程序,它使用Gulp进行构建。由于NPM模块无法在OpenShift上全局安装,显然,我不清楚如何让Jenkins在OpenShift上运行Gulp。我尝试了各种构建和pre_build操作挂钩(包括在StackOverflow上发布的一个解决此问题,但这导致构建退出)。当然,我不能成为唯一一个试图让OpenShift与Grunt / Gulp构建文件一起工作的人,但我似乎找不到任何答案。

3 个答案:

答案 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任务。

以下是详细步骤:

  1. 重写gulpfile.js并将任务变为POJO,以便您可以在gulp之外触发任务。
  2. 以下是一个例子:

    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
    
    1. 写一个动作钩子。我希望JS处理部分在构建之后但在应用程序启动之前发生,因此deploy是我想要的阶段。
    2. /.openshift/action_hooks,创建一个名为deploy

      的文件
      #!/bin/bash
      cd $OPENSHIFT_REPO_DIR
      node -e 'require("./gulpfile.js")()'
      
      1. 使动作挂钩文件deploy可执行:

        chmod +x .openshift/action_hooks/deploy

      2. 提交更改并将更改推送到远程。现在应该可以了。