自动化部署
1. 什么是自动化部署
自动化部署是指通过代码仓库的变动,自动触发构建、测试、部署等流程。vercel 部署博客就是自动化部署,本地提交代码到 github, vercel 监听到代码部署后自动构建,部署到服务器。省去了将项目打包、上传服务器、部署的繁琐步骤,将一切交给软件自动完成。
这里仅介绍我个人使用的两个部署方案: jenkins 与 云服务商提供的自动部署服务,如果你在阿里云等云服务商购买了服务器,而他们也提供自动化部署服务,那么我更推荐使用云服务商提供的自动化部署服务,毕竟 jenkins 相对臃肿,也更费服务器的性能;
友情提示:正真自动化部署远比我这个复杂、全面,我的方案仅供参考
2. 通过 jenkins & nginx 部署
jenkins 是一个自动化部署工具,更多信息详见 jenkins 官网
2.1 安装 jenkins
官网详细介绍了 jenkins 的安装: jenkins 安装
使用 jenkins 还需要安装 java: java 下载,注意:推荐下载 JDK21
安装 java 使用 dpkg -i
命令安装,安装完成后使用 java -version
查看版本,如果安装成功,会显示 java 版本信息。
2.2 jenkins 配置
jenkins 默认配置文件目录为:/lib/systemd/system/jenkins.service
,需要端口被占用可以修改配置文件的 port
配置项
jenkins 默认工作目录为:/var/lib/jenkins/workspace/
在使用前我们还需要给 jenkins root 权限,否则在自动化部署过程中涉及文件的操作可能会显示权限不足
jenkins 设置 root 权限:
更改配置文件的配置项 jenkins 为 root:
重新加载配置文件: systemctl daemon-reload
重启 jenkins: systemctl restart jenkins
当 jenkins 启动后,访问 http://ip:port
即可进入 jenkins 页面
创建自动部署项目
安装 node
在 系统管理 - 插件管理 - available plugins 中,添加 nodejs 安装包
下载对应的 node 版本
在 系统管理 -> 全局工具配置 -> NodeJS 安装 (在最下面)选择相应的 node 版本点击 保存创建自动化部署任务
选择新建任务,输入任务名称,选择 构建一个自由风格的软件项目:
在源码管理处选择 git,输入仓库地址和分支,分支需要对应正确否则会导致构建失败:
如果你之前没有配置,点击
添加 - jenkins
来添加 github 用户名和密码:用户名为 github 用户名,密码为 github token 需要在 github 生成:
github - setting - developer settings - personal access tokens -tokens
,点击 generate new token 选择 classic,将生成的 token 填入 jebkins 密码中分支地址选择 main(与你项目中的分支保持一致),分支不一致会导致构建项目执行失败
构建触发器选择:github hook
构建环境选择 node
buildstep: 代码拉下来后的动作,我们选择执行 shell, 并添加以下命令
完整命令:
1
2
3
4
5
6
7rm -rf node_modules
npm i
npm run build
rm -rf /usr/share/nginx/test
mv ./dist /usr/share/nginx
cd /usr/share/nginx
mv ./dist test当 git 仓库拉下后会执行以下命令:
- 删除 node_modules
- 下载
- 打包
- 删除原有的资源文件夹(nginx 有缓存,对于缓存的静态资源,页面不会更新)
- 移动 dists 文件到 /nginx 目录
- 进入到 nginx 目录
- 重命名 dist 文件按夹为 test
shell 命令可以根据自己的需求创建
3. nginx 配置
nginx 进行以下配置:
1 |
|
4,github 设置
我们已经在构建项目中的构建触发中选择了 github,接下来还需要在 github 中进行配置:
点击 项目 - setting - webhooks - add webhook: payload url 填入 [http://ip:port/]github-webhook/
,centente-type 选择 application/json
更加详细的设置参考:github hook 配置
至此所有配置已经完成,当 git push
时,仓库更新,jenkins 会自动构建项目并部署到 nginx 中