Jenkins利用nodejs插件实现vue项目构建(若依前端)

利用jenkins从git仓库拉取前端源码并打包成静态资源文件。前面也有一篇介绍用jenkins打包maven后端项目的文章也可以参考下https://ranjuan.cn/jenkins-maven-jar-gittag/

一、确保jenkins已经安装了打包前端代码所需的插件

在jenkins插件管理里查看是否安装了nodejs插件,如果没有就搜索安装,然后在jenkins地址后面加/restart进行重启

有node插件后需要在系统全局配置里安装node版本。我本地前端项目使用的node版本是14.17.5,所以最好jenkins也安装相同的版本!开发环境的node版本可以使用node -v命令查看。

二、在jenkins中创建前端发布任务

1、新建一个任务选择“构建一个自由风格的软件项目“

2、源码管理里面选择git仓库

3、构建环境选择Provide Node & npm bin/ folder to PATH

在执行shell命令里面输入编译命令(下面shell里面还输出了现实版本等信息)

echo $PATH
node -v
npm -v
cd ruoyi-ui
pwd
npm i
npm run build:prod
pwd

直接保存即可。如果配置正确,在第一次构建的时候会进行包安装需要较长的时间

三、还需要完善jenkins的事情

正常情况编译完成后,需要把dist目录下的文件全部拷贝的web目录才行(我的测试机jenkins与web服务器是在同一起,如果要发布到别的机器上则需要在jienkins构建后操作里面选Send build artifacts over SSH),在jenkins里面写复制脚本时需要注意路径的问题建议用绝对路径来,如果不清楚路径可以在操作前执行pwd命令显示下当前命令行所在路径。考虑到发版本及回滚的事情,可以在复制新版本前加一个备份的脚本把之前的web目录备份下来!生产环境一定要备份!

发布到远程服务器则需要配置此内容,本文暂不介绍
sleep 2s
pwd
mv -f  ./ruoyi-ui/dist/* /www/wwwroot/172.16.91.5/

从上面jenkins的控台输出可以看到命令都成功执行了,访问web前端显示正常。 部署若依前后端分离版本需要在nginx里面进行一些配置才行,否则可能导致若依不能显示验证码或一直提示登录过期的问题!

四、配置nginx

我是直接在宝塔里面站点配置里配置的nginx参数的。宝塔里面有个默认的location ~ .*.(js|css)?$配置一定要注释掉!如果不注释可能会导致你若依的“系统工具–系统接口”等菜单显示异常。

server
{
    listen 80;
    server_name 172.16.91.5;
    
 # location / {
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/172.16.91.5;
    try_files $uri $uri/ /index.html;
#}
    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    #SSL-END
    
    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    #error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END
    
    #PHP-INFO-START  PHP引用配置,可以注释或修改
    include enable-php-00.conf;
    #PHP-INFO-END
    
    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/server/panel/vhost/rewrite/172.16.91.5.conf;
    #REWRITE-END
    
    #禁止访问的文件或目录
    location ~ ^/(.user.ini|.htaccess|.git|.svn|.project|LICENSE|README.md)
    {
        return 404;
    }
    
    #一键申请SSL证书验证目录相关设置
    location ~ .well-known{
        allow all;
    }
    
    location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        error_log /dev/null;
        access_log /dev/null;
    }
#    location ~ .*.(js|css)?$
#    {
 #       expires      12h;
#        error_log /dev/null;
 #       access_log /dev/null;
#    }
    
    location /prod-api/{
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://172.16.91.5:8089/;
    }
    
    
	access_log  /www/wwwlogs/172.16.91.5.log;
    error_log  /www/wwwlogs/172.16.91.5.error.log;
}

在写反向代理的时候,一开是在location /prod-api/{配置项里面写的

proxy_pass http://172.16.91.5:8089/prod-api/;

怎么都不成功,后来发现,实际若依的java后端是直接使用后端ip+端口进行访问的,并不需要再加prod-api的路径,也就是说nginx代理时只要将http://172.16.91.5/prod-api/这个匹配规则直接转发到后端http://172.16.91.5:8089/就可以了,转发到http://172.16.91.5:8089/prod-api/反而会导致资源无法访问!

基于互联网精神,在注明出处的前提下本站文章可自由转载!

本文链接:https://ranjuan.cn/jenkins-nodejs-build/

赞赏

微信赞赏支付宝赞赏

python-excel-sum-columns
mitmproxy-python-http-methods-use
centos-srs-livestream