Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在OpenShift上运行一个大容量构建_Node.js_Openshift_Gulp - Fatal编程技术网

Node.js 在OpenShift上运行一个大容量构建

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可以

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

因此,通过将Gulp添加到package.json中,Gulp可以安装到gear(非全局)。但是,当我将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)

我相信您可以看出,这意味着有东西(我怀疑是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
    
  • 写一个动作钩。我希望JS处理部分发生在构建之后,但在应用程序启动之前,因此
    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