如何使用jenkins重启PM2?

Posted

技术标签:

【中文标题】如何使用jenkins重启PM2?【英文标题】:How to use jenkins to restart PM2? 【发布时间】:2019-10-30 03:36:14 【问题描述】:

我正在使用 PM2 在 linux 服务器上运行我的 node.js 应用程序,并带有一个配置文件,如下所示:

PM2 start mywebsite.config.js

一切都很好。但现在我想将詹金斯添加到图片中。 我正在使用 Jenkinsfile 在 jenkins 中运行一个管道项目。 一切正常,除了最后一条命令,它应该重新启动应用程序,以使新版本生效:

stage('Restart PM2')   
  steps 
    sh 'pm2 restart all'  
  

这个命令失败了。这是日志输出:

+ 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

我了解 PM2 对每个用户都有效。意味着,运行第一个命令(启动)的用户也应该运行重新启动。 但是该怎么做呢?

【问题讨论】:

用 docker container 包装你的应用。 pm2 非常简单。它将解决您的权限问题 这是在 Jenkins Fix Jenkins pm2 中运行 pm2 的解决方法 这是在 Jenkins Fix pm2 Jenskins 中运行 pm2 的解决方法 【参考方案1】:

不要通过 jenkins 代码重新启动 PM2,而是让 PM2 使用 watch 标志自行完成。在您的配置文件中,将 watch 设置为 true。 您可能想要添加一个名为 watch-ignore 的相对较新的标志。那是一个数组,其中包含要被手表忽略的文件。将您的日志文件和错误文件添加到此列表中。否则,任何记录的信息都会导致您的节点应用程序无休止地重新启动。 对配置文件进行这些更改后,再次使用配置运行 pm2。从 Jenkinsfile 中删除重启代码,你不再需要了,pm2 会检测到新版本并重新加载应用程序!

【讨论】:

Jenkins 是否可以通过另一种方式自行重启,以便在管道中对其进行跟踪?【参考方案2】:

要从 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 配置中检查你的

    之后,您可以去 jenkins 并设置一个 shell 命令,在我的例子中我是这样做的:

#!/bin/sh echo "RESTARTING ALL" sudo pm2 restart all echo "ALL RESTARTED"

注意:如果您的 jenkins 根目录中已经有一个 .pm2 文件夹,请将其重命名,以便您可以进行符号链接

希望对你有帮助

【讨论】:

【参考方案3】:
BUILD_ID=dontKillMe PM2 start mywebsite.config.js

Jenkins 会杀死要由构建创建的 pm2 守护进程。 您应该放置关键字以防止 Jenkins 杀死守护进程。

【讨论】:

以上是关于如何使用jenkins重启PM2?的主要内容,如果未能解决你的问题,请参考以下文章

jenkins部署pm2遇到问题

pm2 开机自启动如何弄?

如何手动重启 Jenkins?

PM2的基本使用

如何在 Ubuntu 上使用 pm2 和 Nginx 部署 Node.js 应用

pm2 部署 nuxt3.js 项目并设置服务器重启时项目自动重启