OpenShift自定义墨盒和NPM

我正在与社区开发的OpenShift磁带盒 nginx。 墨盒的构build脚本(没有任何修改)效果很好; 它使用我提供的configuration文件启动nginx服务器。 不过,我正在尝试修改构build脚本,以便首先将目录切换到我的OpenShift存储库,运行npm install ,然后运行grunt build构build一个我创build的Angular应用程序。

当我这样做时,当脚本到达npm install时,我不断得到EACCES, mkdir '/var/lib/openshift/xxxxxxxxxx/.npm'错误EACCES, mkdir '/var/lib/openshift/xxxxxxxxxx/.npm' 。 一些OpenShift论坛post试图解决这个问题,但似乎需要一个不同的解决scheme(至less在我的情况下)。

因此,我对是否有可能以这种方式使用npm感兴趣,或者如果我需要创build一个能够自己完成所有这些操作的盒式磁带,我感兴趣。

由于我们通常不需要创建~/.npm所需的访问权限,因此我们必须找到将npm缓存(通常为~/.npm )和npm用户配置(通常为~/.npmrc )移动到可访问文件夹事情进行。 以下信息部分来自我在这个问题上提交给Redhat的错误报告 。

我们必须首先创建一个环境变量来控制.npmrc的位置 。 我在$OPENSHIFT_DATA_DIR创建了一个名为.env的文件(通过shell访问我的应用程序)。 在这个文件中,我已经放置了:

 export NPM_CONFIG_USERCONFIG=$OPENSHIFT_HOMEDIR/app-root/build-dependencies/.npmrc 

这将.npmrc目录移动到我们有权读取/写入的位置。 当然,我还.npmrc$OPENSHIFT_HOMEDIR/app-root/build-dependencies/创建目录.npmrc 。 然后,在我的预启动webhook /早期构建脚本中,我已经放置:

 touch $OPENSHIFT_DATA_DIR/.env 

这可以确保配置.npmrc位置的环境变量在每次部署/构建时都可以访问。 现在我们可以移动npm缓存的位置。 首先手动运行.env文件,然后在$OPENSHIFT_HOMEDIR/app-root/build-dependencies/创建.npm目录。 运行以下命令以完成重新配置:

 npm config set cache $OPENSHIFT_HOMEDIR/app-root/build-dependencies/.npm 

现在,即使我们不使用NodeJS盒式磁带,每次部署NPM也应该可以访问。 上述目录选项可以根据需要进行更改。

您的设备中的〜/ .npm目录没有写权限。 您可以尝试查看如何设置本地node.js磁带( https://github.com/openshift/origin-server/tree/master/cartridges/openshift-origin-cartridge-nodejs )并查看是否可以将其应用于您的自定义墨盒。