jenkins持续集成从0入门到实战【九】构建前端项目

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 在前后端分离的大背景下,前端团队的工程化非常重要,本篇我们来学习构建发布前端项目

安装node环境

  1. 点击下载Linux安装Nodejs

    image.png

    # 下载
    $ cd /data/software
    $ wget https://nodejs.org/dist/latest/node-v16.2.0-linux-x64.tar.gz
    
    # 解压
    $ tar -zxvf node-v16.2.0-linux-x64.tar.gz
    $ mv node-v16.2.0-linux-x64 node-v16.2.0
  2. 配置环境变量

    $ vim /etc/profile
    export PATH=/data/software/node-v16.2.0/bin:$PATH
    $ souce /etc/profile
    
    # 查看npm,cnpm,node版本号
    $ node -v
    v16.2.0
    
    $ npm -v
    7.13.0
  3. 安装cnpm淘宝镜像

    • npm和 cnpm区别

      npm(node package manager)是nodejs的包管理器,用于node插件管理(包括安装、卸载、管理依赖等) npm安装插件过程:从 http://registry.npmjs.org下载对应的插件包(该网站服务器位于国外,所以经常下载缓慢或出现异常)。
      cnpm是国内的淘宝团队分享的镜像,同步频率目前为 10分钟 一次以保证尽量与官方服务同步。
      cnpm跟npm用法完全一致,只是在执行命令时将npm改为cnpm。
    • npm install -g cnpm --registry=https://registry.npm.taobao.org
  4. Jenkins配置Node插件

    image.png

    "系统管理"--"全局工具设置"---" NodeJS 安装"

    image.png

npm打包

  1. 新建前端项目

    image.png

  2. 新建前端项目上传至Gitee,这里我以vue项目做示例

    $ npm install -g cnpm --registry=https://registry.npm.taobao.org
    
    # 安装vue脚手架
    $ cnpm install -g @vue/cli
    若出现:无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本
    解决方案:https://www.cnblogs.com/chenzhiran/p/12080349.html
    
    $ vue -V
    @vue/cli 4.5.13
  3. 访问vue ui 不要关闭窗口,保持运行,否则页面访问不了哦

    • 访问后会弹出项目管理器

      image.png

      image.png

      image.png

      image.png

      慢慢等待即可,完成以后界面如下

      image.png

      image.png

  4. 将该前端项目推送到Gitee

    image.png

    # 使用命令行推送到Gitee
    $ git add .
    $ git commit -m "first commit"
    $ git remote add origin https://gitee.com/nobug8/it235-jenkins-node.git
    $ git push -u origin master

    image.png

  5. Jenkins新建job且配置Nodejs

    image.png

    image.png

    image.png

    重要:

    image.png

    在构建后添加执行shell

    image.png

    构建代码如下:

    source /etc/profile
    npm install
    npm run build

    尝试执行构建,看到如下日志即表示构建成功

    image-20210524234425446.png

    image-20210524234740816.png

静态界面发布

6152595-ad86af969bb284a6.png

Nginx下载安装

  • wget直接下载

    $ cd /usr/local
    $ wget http://nginx.org/download/nginx-1.21.0.tar.gz
  1. 解压安装包

    $ tar -zxvf nginx-1.21.0.tar.gz

    注意:nginx被解压到了/usr/local/nginx-1.21.0 目录下(不要把压缩包解压到/usr/local/nginx目录下,或者将解压后的目录重命名为nginx,因为nginx会默认安装到/usr/local/nginx目录下)

  2. 安装前准备

    安装前先安装nginx所需的依赖库,如果缺少依赖库,可能会安装失败

    $ yum install gcc-c++
    $ yum install pcre
    $ yum install pcre-devel
    $ yum install zlib 
    $ yum install zlib-devel
    $ yum install openssl
    $ yum install openssl-devel
  3. 进入nginx-1.21.0目录,并执行以下配置命令

    $ cd nginx-1.21.0
    $ ./configure

    configure操作会检测当前系统环境,以确保能成功安装nginx,如果出错,请检查上述安装前依赖包是否已经安装

    如果出现如下信息表示你需要安装依赖库

    • gcc库未安装提示

      checking for OS
           + Linux 3.10.0-123.el7.x86_64 x86_64
          checking for C compiler ... not found
          ./configure: error: C compiler cc is not found
    • PCRE库未安装提示

       ./configure: error: the HTTP rewrite module requires the PCRE library.
          You can either disable the module by using --without-http_rewrite_module
          option, or install the PCRE library into the system, or build the PCRE library
          statically from the source with nginx by using --with-pcre=<path> option.
    • zlib库未安装提示

       ./configure: error: the HTTP gzip module requires the zlib library.
          You can either disable the module by using --without-http_gzip_module
          option, or install the zlib library into the system, or build the zlib library
          statically from the source with nginx by using --with-zlib=<path> option.

    如果没有其他错误,则可进行下一步

  4. 执行make安装

    # 注意:下面2步会将nginx安装到/usr/local/nginx目录下,所以请勿占用nginx目录命名
    # make
    $ make install

    如果上述2步操作未报错,你可以切换到上一级目录,会发现nginx目录已经存在了

    $ cd ..
    $ cd nginx
    $ ls
  5. 配置nginx开机启动

    切换到/lib/systemd/system/目录,创建nginx.service文件vim nginx.service

    $ cd /lib/systemd/system/
    $ vim nginx.service

    添加如下内容

    [Unit]
    Description=nginx 
    After=network.target 
       
    [Service] 
    Type=forking 
    ExecStart=/usr/local/nginx/sbin/nginx
    ExecReload=/usr/local/nginx/sbin/nginx reload
    ExecStop=/usr/local/nginx/sbin/nginx quit
    PrivateTmp=true 
       
    [Install] 
    WantedBy=multi-user.target

    退出并保存文件,执行如下名使nginx开机启动

    $ systemctl enable nginx.service
    # 启动nginx
    $ systemctl start nginx.service
    
    # 结束nginx
    $ systemctl stop nginx.service
    
    # 重启nginx
    $ systemctl restart nginx.service
  6. 验证是否安装成功

    # 你要将80端口添加到防火墙中
    $ firewall-cmd --zone=public --add-port=80/tcp --permanent
    #重新加载
    $ firewall-cmd --reload
    
    在浏览器访问如下地址
    http://192.168.2.195/

    image.png

  7. 项目配置

    为了能让项目在Nginx中访问,我们假设根目录为it235Vue,要求访问:http://192.168.2.194/it235Vue能够访问到项目,我们可以这样做:

    it235-jenkins-node目录下新增vue.config.js文件,内容如下

    //表示该项目的资源前缀:it235Vue
    module.exports = {
      // vue.config.js
      publicPath: "/it235Vue/",
      outputDir: "dist",
      assetsDir: "assets",
      indexPath: "index.html"
    };
  8. Nginx静态项目配置

    server {
            listen       80;
            server_name  localhost 192.168.2.194;
            
            location /it235Vue {
                alias /data/app/it235Vue;
                index index.html;
            }
    
             location @rewrites {
                rewrite ^(.+)$ /index.html last;
            }
    }
  9. 将打好的静态HTML资源文件放到html下,并命名it235Demo,如下:

    image.png

  10. 前端界面打包后自动部署

    跟部署SpringBoot差不多,就是将资源备份,然后重新打包拷贝到指定目录即可,jenkins中完善后的脚本如下:

    # 一般Nginx和jenkins在不同机器上,这样就需要涉及到跨机器拷贝,使用到免密登录
    #!/bin/bash
    
    echo "部署的目录和项目名称"
    DIR="/data/app/"
    projectName="it235Vue"
    
    echo "待部署的应用服务器,可多台"
    server_ips="192.168.2.194"
    for server_ip in ${server_ips[@]}
    do
    
    echo "ssh连接进行备份操作"
    ssh -Tq -oStrictHostKeyChecking=no admin@${server_ip} <<EOF
    mkdir -p $DIR/backup/${projectName}
    if [ -f "$DIR/${projectName}.tar.gz" ];then
      mv $DIR/${projectName}.tar.gz $DIR/backup/${projectName}/${projectName}-`date "+%Y%m%d_%H%M%S"`.tar.gz
      rm -rf $DIR/${projectName}*
    fi
    EOF
    
    echo "拷贝tar.gz包到目标服务器的DIR目录"
    cd ${WORKSPACE}
    tar -czf ${projectName}.tar.gz dist
    scp -q -oStrictHostKeyChecking=no ${WORKSPACE}/${projectName}.tar.gz admin@${server_ip}:${DIR}/${projectName}.tar.gz
    
    echo "ssh远程连接进行发布操作"
    ssh -q -oStrictHostKeyChecking=no admin@${server_ip} <<EOF
    cd ${DIR}
    mkdir ./${projectName} && tar -zxvf ${projectName}.tar.gz -C ./${projectName} --strip-components 1
    EOF
    
    done
    
    echo "success"
  11. 打开浏览器访问静态页面,查看是否已经变更

pm2环境安装

  1. pm2是什么?

    pm2是node进程管理工具。

    • 内建负载均衡(使用Node cluster 集群模块)
    • 后台运行
    • 收集日志,并有插件配合进行管理
    • 0秒停机重载,可以监听某些文件改动,自动重启,不影响服务
    • 具有Ubuntu和CentOS 的启动脚本
    • 停止不稳定的进程(避免无限循环),限制不稳定的重启的次数
    • 控制台检测
    • 提供 HTTP API
    • 远程控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互 )
  2. 使用样例

    启动服务:$ pm2 start app.js

    列出当前服务信息:$ pm2 list

    image.png

    • 其中app name 和id都是这个进程的标识,可以对他们进行别的操作,比如stop,delete等。
    • mode:进程模式,cluster或fork。cluster有多个进程,而fork只有一个。
    • status:进程是否在线
    • restart:重启次数
    • uptime:运行时间
    • cpu:cpu占用率
    • mem:内存占用大小
  3. pm2 监视器

    image.png

  4. 基于npm安装pm2

    # 命令行全局安装pm2,注意需要有node安装目录的写权限
    $ npm install -g pm2
    
    $ pm2 start app.js
    $ pm2 start build/dev-server.js
    
    $ pm2 start npm --name it235 -- run serve

    image.png

  5. 列出由pm2管理的所有进程信息,还会显示一个进程会被启动多少次,因为没处理的异常。

    $ pm2 logs 显示所有进程日志
    $ pm2 stop all 停止所有进程
    $ pm2 restart all 重启所有进程
    $ pm2 reload all 0秒停机重载进程 (用于 NETWORKED 进程)
    $ pm2 stop 0 停止指定的进程
    $ pm2 restart 0 重启指定的进程
    $ pm2 startup 产生 init 脚本 保持进程活着
    $ pm2 web 运行健壮的 computer API endpoint
    $ pm2 delete 0 杀死指定的进程
    $ pm2 delete all 杀死全部进程 
  6. pm2使用详情

    $ npm install pm2 -g     # 命令行安装 pm2 
    $ pm2 start app.js -i 4 #后台运行pm2,启动4个app.js 
                                    # 也可以把'max' 参数传递给 start
                                    # 正确的进程数目依赖于Cpu的核心数目
    $ pm2 start app.js --name my-api # 命名进程
    $ pm2 list               # 显示所有进程状态
    $ pm2 monit              # 监视所有进程
    $ pm2 logs               #  显示所有进程日志
    $ pm2 stop all           # 停止所有进程
    $ pm2 restart all        # 重启所有进程
    $ pm2 reload all         # 0秒停机重载进程 (用于 NETWORKED 进程)
    $ pm2 stop 0             # 停止指定的进程
    $ pm2 restart 0          # 重启指定的进程
    $ pm2 startup            # 产生 init 脚本 保持进程活着
    $ pm2 web                # 运行健壮的 computer API endpoint (http://localhost:9615)
    $ pm2 delete 0           # 杀死指定的进程
    $ pm2 delete all         # 杀死全部进程
    
    运行进程的不同方式:
    $ pm2 start app.js -i max  # 根据有效CPU数目启动最大进程数目
    $ pm2 start app.js -i 3      # 启动3个进程
    $ pm2 start app.js -x        #用fork模式启动 app.js 而不是使用 cluster
    $ pm2 start app.js -x -- -a 23   # 用fork模式启动 app.js 并且传递参数 (-a 23)
    $ pm2 start app.js --name serverone  # 启动一个进程并把它命名为 serverone
    $ pm2 stop serverone       # 停止 serverone 进程
    $ pm2 start app.json        # 启动进程, 在 app.json里设置选项
    $ pm2 start app.js -i max -- -a 23                   #在--之后给 app.js 传递参数
    $ pm2 start app.js -i max -e err.log -o out.log  # 启动 并 生成一个配置文件
    你也可以执行用其他语言编写的app  ( fork 模式):
    $ pm2 start my-bash-script.sh    -x --interpreter bash
    $ pm2 start my-python-script.py -x --interpreter python
    
    0秒停机重载:
    这项功能允许你重新载入代码而不用失去请求连接。
    注意:
    仅能用于web应用
    运行于Node 0.11.x版本
    运行于 cluster 模式(默认模式)
    $ pm2 reload all
    
    CoffeeScript:
    $ pm2 start my_app.coffee  #这就是全部
    
    PM2准备好为产品级服务了吗?
    只需在你的服务器上测试
    $ git clone https://github.com/Unitech/pm2.git
    $ cd pm2
    $ npm install  # 或者 npm install --dev ,如果devDependencies 没有安装
    $ npm test

pm2程序Jenkins构建

image.png

source /etc/profile
npm install
npm run build

cd ${WORKSPACE}
# 第一次构建使用即可,或手动创建该进程,后续只需要reload或restart即可
pm2 start npm --name it235 -- run serve

# 第二次使用reload或restart
pm2 restart it235
pm2 reload it235

发布至云oss

  1. 插件安装

    image.png

  2. 阿里云RAM账号设置

    配置阿里云帐号的Access Key、Secret Key和阿里云EndPoint后缀。

    image.png

    阿里云后缀:内网填"-internal.aliyuncs.com",外网填".aliyuncs.com",默认外网。如果您的Jenkins也部署在阿里云上面,那么可以使用内网,上传速度更快。

    image.png

    image.png

  3. 创建阿里云bucket
  4. 增加构建后的操作,(jenkins凭证配置)

    image.png

  5. 执行构建,查看日志

    image.png

  6. 查看OSS控制台中的bucket中有没有对应的文件

    image.png

总结

以上内容讲解了前端发布构建的主要场景,基本覆盖以vue框架为主的发布体系

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
9天前
|
前端开发 JavaScript 数据库
从前端到后端:构建高效数据驱动应用的全栈策略
在构建现代应用程序时,前端与后端的高效协作至关重要。本篇文章深入探讨了如何将前端技术与后端架构相结合,以构建强大的数据驱动应用。我们将分析常见技术栈,包括React与Node.js的集成、Python与Django的应用,以及如何利用数据库优化数据处理。通过具体的示例和最佳实践,读者将能掌握如何在全栈开发中实现高效的数据交互与应用性能优化。
|
5天前
|
前端开发 Java 编译器
【前端学java】java基础练习缺少项目?看这篇文章就够了!(完结)
【8月更文挑战第11天】java基础练习缺少项目?看这篇文章就够了!(完结)
14 0
|
4天前
|
前端开发 JavaScript
在 Vue3 + ElementPlus 项目中使用 computed 实现前端静态分页
本文介绍了在Vue3 + ElementPlus项目中使用`computed`属性实现前端静态分页的方法,并提供了详细的示例代码和运行效果。
22 1
在 Vue3 + ElementPlus 项目中使用 computed 实现前端静态分页
|
11天前
|
前端开发 JavaScript NoSQL
构建苏宁商品详情页:从前端展示到后端服务的实战指南
苏宁商品详情页集成前端展示与后端服务,前端利用HTML/CSS/JavaScript呈现信息,后端采用Node.js/Java/Python等技术处理请求并从MySQL/MongoDB等数据库获取数据。示例中,Node.js通过Express框架搭建API,模拟商品查询逻辑。实际应用更为复杂,涵盖用户评价、推荐等功能,并需考虑分布式架构、安全防护及性能优化等方面。
构建苏宁商品详情页:从前端展示到后端服务的实战指南
|
4天前
|
前端开发 数据库
SpringBoot+Vue+token实现(表单+图片)上传、图片地址保存到数据库。上传图片保存位置到项目中的静态资源下、图片可以在前端回显(二))
这篇文章是关于如何在SpringBoot+Vue+token的环境下实现表单和图片上传的优化篇,主要改进是将图片保存位置从磁盘指定位置改为项目中的静态资源目录,使得图片资源可以跨环境访问,并在前端正确回显。
|
4天前
|
前端开发 Java C++
超简单使用Vite+Vue3构建共享开发和分模块打包的前端项目
使用Vite和Vue3构建支持共享组件和分模块独立打包的前端项目的方法。
9 0
超简单使用Vite+Vue3构建共享开发和分模块打包的前端项目
|
5天前
|
前端开发 Java 编译器
【前端学java】java基础练习缺少项目?看这篇文章就够了!(17)
【8月更文挑战第11天】java基础练习缺少项目?看这篇文章就够了!
11 0
【前端学java】java基础练习缺少项目?看这篇文章就够了!(17)
|
8天前
|
前端开发 JavaScript C++
【绝技大公开】Webpack VS Rollup:一场前端工程化领域的巅峰对决,谁能笑到最后?——揭秘两大构建神器背后的秘密与奇迹!
【8月更文挑战第12天】随着前端技术的发展,模块化与自动化构建成为标准实践。Webpack与Rollup作为主流构建工具,各具特色。Webpack是一款全能型打包器,能处理多种静态资源,配置灵活,适合复杂项目;Rollup专注于ES6模块打包,利用Tree Shaking技术减少冗余,生成更精简的代码。Rollup构建速度快,配置简洁,而Webpack则拥有更丰富的插件生态系统。选择合适的工具需根据项目需求和个人偏好决定。两者都能有效提升前端工程化水平,助力高质量应用开发。
11 1
|
11天前
|
jenkins 持续交付 开发工具
"引爆效率革命!Docker+Jenkins+GIT+Tomcat:解锁持续集成魔法,一键部署Java Web应用的梦幻之旅!"
【8月更文挑战第9天】随着软件开发复杂度的增加,自动化变得至关重要。本文通过实例展示如何结合Docker、Jenkins、Git与Tomcat建立高效的持续集成(CI)流程。Docker确保应用环境一致性;Jenkins自动化处理构建、测试和部署;Git管理源代码版本;Tomcat部署Web应用。在Jenkins中配置Git插件并设置项目,集成Docker构建Tomcat应用镜像并运行容器。此外,通过自动化测试、代码质量检查、环境隔离和日志监控确保CI流程顺畅,从而显著提高开发效率和软件质量。
34 3
|
11天前
|
jenkins Java 持续交付
【一键搞定!】Jenkins 自动发布 Java 代码的神奇之旅 —— 从零到英雄的持续集成/部署实战秘籍!
【8月更文挑战第9天】随着软件开发自动化的发展,持续集成(CI)与持续部署(CD)已成为现代流程的核心。Jenkins 作为一款灵活且功能丰富的开源 CI/CD 工具,在业界应用广泛。以一家电商公司的 Java 后端服务为例,通过搭建 Jenkins 自动化发布流程,包括创建 Jenkins 项目、配置 Git 仓库、设置构建触发器以及编写构建脚本等步骤,可以实现代码的快速可靠部署。
34 2