Jenkins前端项目持续部署

简介: Jenkins前端项目持续部署

前后端分离的开发模式下,往往前端只需将一个包含js,html,css以及其他静态资源的dist目录发给后端。

最直观的就是vue-cli,create-react-app,自定义脚手架中的npm run build命令,本质上,是webpack,gulp等打包工具去做了编译打包等等工作,最终会生成一个dist目录,它是我们唯一需要提供给后端的内容,

如果代码无bug且只发一次版本(有这么皮的项目吗?),上面这样的方式完全ok。但是如果需要频繁更新版本,那么就需要频繁 打包 发包 接包 部署,这对于前后端来说,都是一个很低效的事情。

因此我们需要将低效的手动式部署,升级为更加先进的工程化的持续部署。

Jenkins就很好的可以做这样的事情,而且公司项目正在正常使用。

下面我将在Github新建一个repo,并且使用vue-cli初始化一个前端项目,最后结合Jenkins做一次前端CD。

local:vue项目 Jenkins服务器

remote:github repo


新建repo


项目地址:https://github.com/FrankKai/f...


初始化项目


vue create demo


下载并安装Jenkins[](https://jenkins.io/doc/pipeli...


  1. Download Jenkins.
  2. Open up a terminal in the download directory.
  3. Run java -jar jenkins.war --httpPort=8080.
  4. Browse to http://localhost:8080.
  5. Follow the instructions to complete the installation.


CD配置


项目(Job)名称:foo-production

源码管理

Git

  • Repositories
  • Branches to build
  • Branch Specifier */master
  • Additional Behaviours
  • Fetch tags
  • Shallow clone
  • Shallow clone depth 0

构建触发器

触发远程构建 (例如,使用脚本)

  • 身份验证令牌

构建环境

Delete workspace before build starts

Abort the build if it’s stuck

  • Time-out strategy Absolute
  • Timeout minutes 5
  • Provide Node & nom bin/folder to PATH
  • NodeJS installation node_8.11.3
  • Npmrc file taboo registry

构建

Execute shell

  • Command

echo $PATH

node —version

npm install -g yarn —registry=https://registry.npm.taobao.org

yarn —version

yarn install

yarn lint

yarn build

Send files or execute commands over SSH

SSH Publishers

  • SSH Server
  • Name nginx-crm
  • Transfers
  • Transfer Set
  • Source files dist/**/*
  • Remove prefix dist

构建后操作

Notify Failure

Notify Success

问题汇总:

  • /Users/Shared/Jenkins下没有Home目录

Jenkins只能运行在Java 8上

  • 管理员密码获取不到

/Users/Shared/Jenkins/Home/secrets/initialAdminPassword

由于secrets目录权限为drwx------,因此需要使用sudo -i切换到文件拥有者root用户。

  • 凭据添加

添加全部的Jenkins凭证即可。

  • Fetch tags

不选择这个在克隆时不会带着tags,在你想访问refspec指定的内容时可以节省时间和空间。

  • Shallow clone

浅克隆,这样git才能不下载项目的历史,如果你只想获得最新版,这样可以节省你的时间和磁盘空间。

  • Shallow clone depth 0

设置一个shallow的深度,这样git才能下载项目最近的历史,节省时间空间。

注:与npm list --depth 0 -g是一个道理。

  • 触发远程构建(例如,使用脚本)

身份验证令牌

JENKINS_URL/job/weidian-crm-preproduction/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME

Optionally append &cause=Cause+Text

  • 卡住停止策略

Absolute Deadline Elastic Likely stuck No Activity

  • 如何安装NodeJS Jenkins插件?

系统管理->插件管理

插件安装完成后,就会出现Provide Node & npm bin/ folder to PATH选项。

  • NodeJS Installation无选项

在全局配置的NodeJS中新增NodeJS即可。

  • 没有npmrc文件

需要安装Pipeline NPM Plugin,在系统管理里找到Managed files,再Add a new Config即可。

  • 没有SSH Publishers

安装插件# Publish Over SSH Plugin,远程执行远程linux服务器上的命令。

  • SSH Publisher没有选项

在全局的系统设置中,新增一台ssh服务器。


Started by user 高凯
Building in workspace /Users/Shared/Jenkins/Home/workspace/crm-production
[WS-CLEANUP] Deleting project workspace...
[WS-CLEANUP] Done
Cloning the remote Git repository
Using shallow clone
Cloning repository https://github.com/FrankKai/frontend-jenkins-cd.git
 > git init /Users/Shared/Jenkins/Home/workspace/crm-production # timeout=10
Fetching upstream changes from https://github.com/FrankKai/frontend-jenkins-cd.git
 > git --version # timeout=10
using GIT_ASKPASS to set credentials 
 > git fetch --tags --progress https://github.com/FrankKai/frontend-jenkins-cd.git +refs/heads/*:refs/remotes/origin/* --depth=1
 > git config remote.origin.url https://github.com/FrankKai/frontend-jenkins-cd.git # timeout=10
 > git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git config remote.origin.url https://github.com/FrankKai/frontend-jenkins-cd.git # timeout=10
Fetching upstream changes from https://github.com/FrankKai/frontend-jenkins-cd.git
using GIT_ASKPASS to set credentials 
 > git fetch --tags --progress https://github.com/FrankKai/frontend-jenkins-cd.git +refs/heads/*:refs/remotes/origin/* --depth=1
 > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
 > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
Checking out Revision af6a29ef8221d59a533fd6139fd2cb23e7a0e9bd (refs/remotes/origin/master)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f af6a29ef8221d59a533fd6139fd2cb23e7a0e9bd
Commit message: "change"
 > git rev-list --no-walk af6a29ef8221d59a533fd6139fd2cb23e7a0e9bd # timeout=10
Adding all registry entries
copy managed file [taobao registry] to file:/Users/Shared/Jenkins/Home/workspace/crm-production@tmp/config7039915536655380363tmp
[crm-production] $ /bin/sh -xe /Users/Shared/Jenkins/tmp/jenkins2849389808941702160.sh
+ echo /Users/Shared/Jenkins/Home/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/node8.11.3/bin:/usr/bin:/bin:/usr/sbin:/sbin
/Users/Shared/Jenkins/Home/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/node8.11.3/bin:/usr/bin:/bin:/usr/sbin:/sbin
+ node --version
v8.11.3
+ npm install -g yarn --registry=https://registry.npm.taobao.org
/Users/Shared/Jenkins/Home/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/node8.11.3/bin/yarn -> /Users/Shared/Jenkins/Home/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/node8.11.3/lib/node_modules/yarn/bin/yarn.js
/Users/Shared/Jenkins/Home/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/node8.11.3/bin/yarnpkg -> /Users/Shared/Jenkins/Home/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/node8.11.3/lib/node_modules/yarn/bin/yarn.js
+ yarn@1.9.4
updated 1 package in 0.643s
+ yarn --version
1.9.4
[crm-production] $ /bin/sh -xe /Users/Shared/Jenkins/tmp/jenkins5038056372914853910.sh
+ yarn install
yarn install v1.9.4
info No lockfile found.
[1/4] Resolving packages...
warning @vue/cli-service > webpack-bundle-analyzer > bfj-node4@5.3.1: Switch to the `bfj` package for fixes and new features!
[2/4] Fetching packages...
[3/4] Linking dependencies...
warning "@vue/cli-plugin-babel > babel-loader@8.0.0" has incorrect peer dependency "@babel/core@^7.0.0".
warning "@vue/cli-plugin-babel > babel-loader@8.0.0" has unmet peer dependency "webpack@>=2".
warning "@vue/cli-plugin-eslint > eslint-loader@2.1.0" has unmet peer dependency "webpack@>=2.0.0 <5.0.0".
[4/4] Building fresh packages...
success Saved lockfile.
Done in 9.80s.
[crm-production] $ /bin/sh -xe /Users/Shared/Jenkins/tmp/jenkins3713308693086114075.sh
+ yarn lint
yarn run v1.9.4
$ vue-cli-service lint
 DONE  No lint errors found!
Done in 1.00s.
+ yarn build
yarn run v1.9.4
$ vue-cli-service build
 DONE  Compiled successfully in 4555ms13:48:31
  File                                 Size               Gzipped
  dist/js/chunk-vendors.df5f2e07.js    78.56 kb           28.33 kb
  dist/js/app.4aef55d1.js              4.31 kb            1.60 kb
  dist/css/app.d63511e4.css            0.33 kb            0.23 kb
  Images and other types of assets omitted.
 DONE  Build complete. The dist directory is ready to be deployed.
 INFO  Check out deployment instructions at https://cli.vuejs.org/guide/deployment.html
Done in 7.46s.
SSH: Connecting from host [frankdeiMac.local]
SSH: Connecting with configuration [crm-test] ...
SSH: Disconnecting configuration [crm-test] ...
SSH: Transferred 7 file(s)
Build step 'Send files or execute commands over SSH' changed build result to SUCCESS
Finished: SUCCESS


从日志中我们其实可以发现,Jenkins主要做了2件事:

  • 编译文件*
  • 从git仓库拉取文件到Jenkins
  • Jenkins更新node_modules
  • Jenkins build前端三板斧(html,css,js),一般为npm run build/ yarn build,生成dist目录
  • 发送文件
  • 与后端服务器建立ssh连接
  • 发送dist目录,更新旧目录
  • 断开连接

用一句话总结,其实就是jenkins构建,ssh更新

茅塞顿开的感觉真好!

关于前端自动化构建,还有以下博文可以参考:


参考资料:

https://segmentfault.com/a/1190000010200161

https://juejin.im/post/5ad1980e6fb9a028c42ea1be

https://yezihaohao.github.io/2017/09/09/Jenkins%E5%AE%9E%E7%8E%B0%E5%89%8D%E7%AB%AF%E9%A1%B9%E7%9B%AE%E8%87%AA%E5%8A%A8%E5%8C%96%E9%9B%86%E6%88%90%E6%89%93%E5%8C%85%E9%83%A8%E7%BD%B2/


相关文章
|
21天前
|
资源调度 前端开发 测试技术
前端工程化实践:从零搭建现代化项目构建流程
【4月更文挑战第6天】本文介绍了前端工程化的概念和重要性,包括模块化、自动化、规范化和CI/CD。接着,讨论了选择合适的工具链,如包管理器、构建工具和测试框架。然后,详细阐述了如何从零开始搭建一个基于React的现代化项目构建流程,涉及初始化、代码规范、测试、CSS处理、代码分割和CI/CD配置。最后,提到了持续优化与迭代的方向,如性能优化、类型检查和微前端。通过这样的实践,开发者可以提升开发效率和代码质量,为项目长远发展奠定基础。
27 0
|
2月前
|
资源调度 前端开发 JavaScript
构建高效前端项目:现代包管理器与模块化的深度解析
【2月更文挑战第21天】 在当今快速演变的前端开发领域,高效的项目管理和代码组织已成为成功交付复杂Web应用的关键。本文将深入探讨现代前端包管理器如npm, yarn和pnpm的工作原理,以及它们如何与模块化编程实践(例如CommonJS、ES6模块)协同工作以优化开发流程。我们将剖析这些工具的内部机制,了解它们如何解决依赖冲突,提高安装速度,并保证项目的健壮性。同时,本文还将介绍模块化编程的最佳实践,包括代码拆分、重用和版本控制,帮助开发者构建可维护且性能卓越的前端项目。
|
2月前
|
缓存 前端开发 JavaScript
Vite 构建流程大揭秘:快速构建前端项目的秘密武器
Vite 构建流程大揭秘:快速构建前端项目的秘密武器
|
2月前
|
前端开发 JavaScript jenkins
构建高效前端项目:从模块化到自动化
【2月更文挑战第13天】 随着Web技术的不断进步,前端项目的复杂性日益增加。为了确保可维护性和性能,前端工程师必须采用模块化和自动化的策略来优化开发流程。本文将探讨如何使用现代前端工具和最佳实践来构建一个高效的前端项目架构,包括模块打包、代码分割和持续集成等方面。
|
3月前
|
缓存 JavaScript 前端开发
IDEA启动VUE前端项目
IDEA启动VUE前端项目操作流程
|
28天前
|
前端开发 应用服务中间件 nginx
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
110 0
|
2天前
|
jenkins Java 持续交付
Jenkins离线安装部署教程简记
Jenkins离线安装部署教程简记
13 0
|
2天前
|
JavaScript 前端开发 开发者
前端框架(Vue.js&&vue-cli项目框架&&element-ui使用)
前端框架(Vue.js&&vue-cli项目框架&&element-ui使用)
|
5天前
|
缓存 前端开发 JavaScript
前端vue3分享——项目封装axios、vite使用env环境变量
前端vue3分享——项目封装axios、vite使用env环境变量
13 0
|
2月前
|
JavaScript Java jenkins
如何利用CentOS7+docker+jenkins+gitee部署springboot+vue前后端项目(保姆教程)
如何利用CentOS7+docker+jenkins+gitee部署springboot+vue前后端项目(保姆教程)
89 0