feat(支持自动部署): 结合conventional-changelog,配合部署脚本完成部署任务
conventional-changelog是一个很好的工具,用于自动生成changelog,再配上自定义的部署脚本,整个部署流程就显得更规范了
Breaking Change: 比较大的更新
Closes #315
其中,Header
是必需的,Body
和Footer
可以省略。
大致了解规范后,就可以上工具了,这里我们用到的是commitizen
。
npm install -g commitizen
接着在项目根目录运行以下命令:
commitizen init cz-conventional-changelog --save --save-exact
运行成功后,package.json
会新增如下内容:
“devDependencies”: {
“cz-conventional-changelog”: “^3.1.0”
},
“config”: {
“commitizen”: {
“path”: “./node_modules/cz-conventional-changelog”
}
}
git commit
这一步用git cz替代
,cz
就是指commitizen
,通过交互式命令行完成commit
操作。
PS D:\robin\frontend\spa-blog-frontend> git cz
cz-cli@4.0.3, cz-conventional-changelog@3.1.0
? Select the type of change that you’re committing: feat: A new feature
? What is the scope of this change (e.g. component or file name): (press enter to skip) 支持自动部署
? Write a short, imperative tense description of the change (max 86 chars):
(37) 结合conventional-changelog,配合部署脚本完成部署任务
? Provide a longer description of the change: (press enter to skip)
? Are there any breaking changes? No
? Does this change affect any open issues? No
[master ee41f35] feat(支持自动部署): 结合conventional-changelog,配合部署脚本完成部署任务
3 files changed, 15 insertions(+), 3 deletions(-)
接着我们要更新npm
包的版本号,结合npm version
和conventional-changelog
使用,可以同时更新CHANGELOG.md
。
好的,我们先准备好脚本:
“scripts”: {
“start”: “vue-cli-service serve”,
“build”: “vue-cli-service build”,
“deploy”: “node deploy”,
“version”: “conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md”,
“postversion”: “npm run deploy”
}
根据实际版本情况选择更新patch/minor/major
版本。假设我们更新的是minor
版本号,那么操作命令如下:
npm version minor -m ‘特性版本更新’
执行这条命令会更新package.json
中的version
字段,
同时会执行conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md
,更新CHANGELOG.md
。
执行完这条命令后,可以看到CHANGELOG.md
已经被修改了。
通过postversion
钩子触发部署脚本node deploy
,开始进行部署工作。deploy.js
文件内容如下:
const { execFile } = require(‘child_process’);
const version = process.env.npm_package_version;
execFile(‘deploy.sh’, [version], { shell: true }, (err, stdout, stderr) => {
if (err) {
throw err;
}
console.log(stdout);
});
这里利用了nodejs
的 child_process
模块执行子进程,调用了execFile
执行了 deploy.sh
,并将npm
包版本号作为参数传递给了deploy.sh
。
deploy.sh
文件内容如下:
#!/bin/bash
npm run build
htmldir=“/usr/share/nginx/html”
uploadbasedir=“${htmldir}/upgrade_blog_vue_ts”
appenddir=$1
uploaddir=“ u p l o a d b a s e d i r / {uploadbasedir}/ uploadbasedir/{appenddir}”
projectdir=“/usr/share/nginx/html/blog_vue_ts”
scp -r ./dist/. txcloud:${uploaddir}
ssh txcloud > /dev/null 2>&1 << eeooff
ln -snf ${uploaddir} ${projectdir}
exit
eeooff
echo done
以上命令主要做的事情是:
-
npm run build
执行构建任务 -
将构建得到的
dist
文件夹中的内容通过scp
传输到服务器,通过版本号区分各个版本。 -
nginx
配置的是监听80
端口,指向/usr/share/nginx/html/blog_vue_ts
,而我通过软连接将blog_vue_ts
再次指向到upgrade_blog_vue_ts
下的版本目录,如upgrade_blog_vue_ts/0.5.4
。每次发布版本时,以上脚本会修改软连接,指向目标版本,如upgrade_blog_vue_ts/0.6.0
,完成版本过渡。
我这里使用了软连接改进了之前的部署脚本,既可以在服务器保留各个历史版本文件夹,也不用考虑处理index.html
与静态资源分离的问题。
强烈建议结合自动化部署的一小步,前端搬砖的一大步这篇文章一起看。
lrwxrwxrwx 1 root root 47 Feb 3 21:35 blog_vue_ts -> /usr/share/nginx/html/upgrade_blog_vue_ts/0.6.0
如果要回退版本,也可以通过修改软连接的方式实现,还是比较方便的。
最后别忘了把代码push
到远程仓库。
git push
更新日志changelog
查看也变得很方便了,修改了什么内容一目了然,并且可以直接跳转到commit
历史,issue
等。
=====================================================================
可以看到,我是通过deploy.js
调用了deploy.sh
。之前本想直接在npm scripts
中调用deploy.sh
并传入版本号参数的,但是试了几种写法都不行,这里也记录一下。
“deploy”: “deploy.sh npm_package_version”
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
存中…(img-6QVAJPu9-1715892361076)]
[外链图片转存中…(img-Yy5UhpmX-1715892361076)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!