使用Jenkins+BlueOcean构建Nuxt应用(Jenkinsfile配置)

1,841 阅读1分钟

目标

通过 Jenkins 子节点编译代码,将编译后的代码部署到指定目录,自动重启node进程。

Jenkinsfile

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'
      }
    }
  }
}

build.sh

主要用来构建环境

npm install
npm run build

restart.sh

主要用来将新版本发布

rsync -avzP --delete ./ /data/website/blog-page/
supervisorctl restart nuxt	# 我的前端服务主要通过supervisor来监控运行

supervisor nuxt配置

[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信号,包括子进程

需要注意是,配置中的 stopasgroupkillasgroup 必须为 true 否则将无法正常通过 supervisorctl 重启服务,因为在命令运行后node将在一个子进程中去监听端口,所以直接 kill 父进程后重新启动将会因为端口冲突而启动失败。

结果

image.png

每次都构建这么长时间可真头疼 -_-||