Ron*_* Al 5 node.js jenkins pm2
我正在使用 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) 的用户也应该运行重启。但如何做到这一点?
要从 Jenkins 运行,pm2 restart all您需要:
配置您的系统以从 jenkins 运行 sudo ( https://sgoyal.net/2016/11/18/run-a-shell-from-jenkins-using-sudo-ubuntu/ )
创建到 .pm2/ 文件夹的符号链接,在我的情况下(Ubuntu)它位于 /root/.pm2 所以我运行
sudo ln -s /root/.pm2/ /var/lib/jenkins/
注意:/var/lib/jenkins 如果是默认的 jenkins 根目录,你可以在 Jenkins 配置中检查你的根目录
#!/bin/sh
echo "RESTARTING ALL"
sudo pm2 restart all
echo "ALL RESTARTED"
注意:如果您的 jenkins 根目录中已有 .pm2 文件夹,请重命名它,以便您可以执行符号链接
希望这可以帮助
小智 3
不要通过 jenkins 代码重新启动 PM2,而是让 PM2 使用 watch 标志自行完成。在您的配置文件中,将 watch 设置为 true。您可能想要添加一个名为 watch-ignore 的相对较新的标志。这是一个数组,其中包含手表要忽略的文件。将您的日志文件和错误文件添加到此列表中。否则,任何记录的信息都会导致您的节点应用程序无休止地重新启动。对配置文件进行这些更改后,使用配置再次运行 pm2。从 Jenkinsfile 中删除重新启动代码,您不再需要它,pm2 将检测新版本并重新加载应用程序!
| 归档时间: |
|
| 查看次数: |
4029 次 |
| 最近记录: |