通过 Jenkins
子节点编译代码,将编译后的代码部署到指定目录,自动重启node进程。
pipeline { agent { label 'my-blog' # 因为我的博客服务器已经搭建了node环境,所以就用他来构建啦 } stages { stage('build') { steps { sh './build.sh' } } stage('deploy') { steps { input message: 'Begin deployment? (Click "Proceed" to continue)' sh './restart.sh' } } } } 复制代码
主要用来构建环境
npm install npm run build 复制代码
主要用来将新版本发布
rsync -avzP --delete ./ /data/website/blog-page/ supervisorctl restart nuxt # 我的前端服务主要通过supervisor来监控运行 复制代码
[program:nuxt] command =npm run start autostart=true ; 在supervisord启动的时候也自动启动 startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒 autorestart=true ; unexpected,表示进程意外杀死后才重启 startretries=3 ; 启动失败自动重试次数,默认是3 user=roki ; 用哪个用户启动进程,默认是root directory=/data/website/blog-page priority=999 ; 进程启动优先级,默认999,值小的优先启动 redirect_stderr=true ; 把stderr重定向到stdout,默认false stdout_logfile_maxbytes=200MB ; stdout 日志文件大小,默认50MB stdout_logfile_backups = 20 ; stdout 日志文件备份数,默认是10 stdout_logfile=/var/log/blog-nuxt.log stderr_logfile=/var/log/blog-nuxt-err.log stopasgroup=true ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程 killasgroup=true ;默认为false,向进程组发送kill信号,包括子进程 复制代码
需要注意是,配置中的 stopasgroup
和 killasgroup
必须为 true
否则将无法正常通过 supervisorctl
重启服务,因为在命令运行后node将在一个子进程中去监听端口,所以直接 kill
父进程后重新启动将会因为端口冲突而启动失败。
每次都构建这么长时间可真头疼 -_-||