我正在使用 PM2 在 linux 服务器上运行我的 node.js 应用程序,并带有一个配置文件,如下所示:
PM2 start mywebsite.config.js
Run Code Online (Sandbox Code Playgroud)
一切都很好。但现在我想在图片中添加詹金斯。我正在 jenkins 中运行一个管道项目,使用 Jenkinsfile。一切正常,除了最后一个命令,应该重新启动应用程序,以使新版本生效:
stage('Restart PM2') {
steps {
sh 'pm2 restart all' }
}
}
Run Code Online (Sandbox Code Playgroud)
并且此命令失败。这是日志输出:
+ pm2 restart all
Use --update-env to update environment variables
[PM2][WARN] No process found
< empty pm2 log table here>
Use `pm2 show <id|name>` to get more details about an app
Run Code Online (Sandbox Code Playgroud)
我知道 PM2 正在为每个用户工作。意味着,运行第一个命令 (start) 的用户也应该运行重启。但如何做到这一点?
尝试构建我的 dockerfile,并收到权限被拒绝错误。该项目是一个 Nest.js 服务器。这是泊坞窗文件:
FROM node:12.13-alpine
WORKDIR /usr/src/app
COPY package.json .
RUN npm install <<< this fails
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["npm", "run", "start:prod"]
Run Code Online (Sandbox Code Playgroud)
错误(在 npm install 上)是:
internal/fs/utils.js:220
throw err;
^
Error: EACCES: permission denied, open '/usr/local/lib/node_modules/npm/bin/npm-cli.js'
at Object.openSync (fs.js:440:3)
at Object.readFileSync (fs.js:342:35)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:994:22)
at Module.load (internal/modules/cjs/loader.js:815:32)
at Function.Module._load (internal/modules/cjs/loader.js:727:14)
at Function.Module.runMain (internal/modules/cjs/loader.js:1047:10)
at internal/main/run_main_module.js:17:11 {
errno: -13,
syscall: 'open',
code: 'EACCES',
path: '/usr/local/lib/node_modules/npm/bin/npm-cli.js'
Run Code Online (Sandbox Code Playgroud)
任何想法?
当我的 Nest.js 应用程序加载时,我需要运行一些数据库操作。(主要围绕数据初始化)。所有这些任务都已经构建并在控制器中作为操作工作。如果我手动去 /api/controller/action - 他们工作。当服务器加载时,我需要一种方法来调用它们中的每一个。有什么建议吗?