如何从本地目录构建和部署应用程序?

man*_*dos 3 openshift

我刚刚开始探索OpenShift Online 3,看起来非常棒.我正在尝试设置一个简单的HTTP服务器.以下是我的步骤CLI:

  1. oc login <...>
  2. oc new-project <...>
  3. oc new-app.

我当前的工作文件夹包含两个文件package.jsonserver.js.

的package.json

{
  "name": "test",
  "version": "0.0.1",
  "description": "Node.js app for OpenShift 3",
  "main": "server.js",
  "dependencies": {
    "express": "^4.13.4"
  },
  "engine": {
    "node": "*",
    "npm": "*"
  },
  "scripts": {
    "start": "node server.js"
  }
}
Run Code Online (Sandbox Code Playgroud)

Server.js

const express = require('express')
const app = express()

const port = process.env.PORT || process.env.OPENSHIFT_NODEJS_PORT || 8080
const ip = process.env.IP   || process.env.OPENSHIFT_NODEJS_IP || '0.0.0.0'

app.get('/', function (req, res) {
  res.status(200).send({ message: 'OK' })
})

// error handling
app.use(function(err, req, res, next){
  console.error(err.stack)
  res.status(500).send('Something bad happened!')
})

app.listen(port, ip)
console.log('Server running on http://%s:%s', ip, port)

module.exports = app
Run Code Online (Sandbox Code Playgroud)

这是控制台输出:

--> Creating resources ...
    imagestream "olmeo-openshift" created
    buildconfig "olmeo-openshift" created
    deploymentconfig "olmeo-openshift" created
    service "olmeo-openshift" created
--> Success
    Build scheduled, use 'oc logs -f bc/olmeo-openshift' to track its progress.
    Run 'oc status' to view your app.
Run Code Online (Sandbox Code Playgroud)

构建完成后,Web控制台显示错误:

Environment: 
    DEV_MODE=false
    NODE_ENV=production
    DEBUG_PORT=5858
Launching via npm...
npm info it worked if it ends with ok
npm info using npm@3.10.9
npm info using node@v6.11.3
npm ERR! Linux 3.10.0-693.12.1.el7.x86_64
npm ERR! argv "/opt/rh/rh-nodejs6/root/usr/bin/node" "/opt/rh/rh-nodejs6/root/usr/bin/npm" "run" "-d" "start"
npm ERR! node v6.11.3
npm ERR! npm  v3.10.9
npm ERR! path /opt/app-root/src/package.json
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall open

npm ERR! enoent ENOENT: no such file or directory, open '/opt/app-root/src/package.json'
npm ERR! enoent ENOENT: no such file or directory, open '/opt/app-root/src/package.json'
npm ERR! enoent This is most likely not a problem with npm itself
npm ERR! enoent and is related to npm not being able to find a file.
npm ERR! enoent 

npm ERR! Please include the following file with any support request:
npm ERR!     /opt/app-root/src/npm-debug.log
Run Code Online (Sandbox Code Playgroud)

显然,package.json找不到.我错过了什么?

Gra*_*ton 8

如果您使用:

oc new-app .
Run Code Online (Sandbox Code Playgroud)

在远程托管的Git存储库中克隆的git工作区中,构建将被设置为从托管的Git存储库中提取文件.这意味着如果您进行本地更改并且不将它们添加/提交/推送到托管的Git存储库,那么它们将永远不会被使用.

如果要从本地目录工作而不使用托管Git存储库,则需要使用二进制输入构建.要做的第一次运行:

oc new-build --binary --image-stream nodejs --name olmeo-openshift
Run Code Online (Sandbox Code Playgroud)

然后通过运行来启动构建:

oc start-build olmeo-openshift --from-dir=.
Run Code Online (Sandbox Code Playgroud)

这将从本地目录上传文件.

构建完第一个图像后,您就可以运行:

oc new-app olmeo-openshift
Run Code Online (Sandbox Code Playgroud)

部署映像,并:

oc expose svc/olmeo-openshift
Run Code Online (Sandbox Code Playgroud)

给它一个公共URL.

每次更改代码时,再次运行:

oc start-build olmeo-openshift --from-dir=.
Run Code Online (Sandbox Code Playgroud)