一. 项目部署和 DevOps
1.1. 传统的开发模式
在传统的开发模式中,开发的整个过程是按部就班就行:
但是这种模式存在很大的弊端:
- 工作的不协调:开发人员在开发阶段,测试和运维人员其实是处于等待的状态。等到测试阶段,开 发人员等待测试反馈 bug,也会处于等待状态。
- 线上 bug 的隐患:项目准备交付时,突然出现了 bug,所有人员需要加班、等待问题的处理;
1.2. DevOps 开发模式
DevOps 是 Development 和 Operations 两个词的结合,将开发和运维结合起来的模式:
1.3. 持续集成和持续交付
伴随着 DevOps 一起出现的两个词就是持续集成和持续交付(部署):
- CI 是 Continuous Integration(持续集成);
- CD 是两种翻译:Continuous Delivery(持续交付)或 Continuous Deployment(持续部署);
持续集成CI:
持续交付和持续部署:
持续交付:手动上传服务器
持续部署:自动化部署到服务器上
1.4. 自动化部署流程
二. 搭建服务器环境
2.1. jenkins 自动化部署
2.1.1. 安装 Java 环境
Jenkins 本身是依赖 Java 的,我安装了 Java17 的环境
dnf search java-17-openjdk
dnf install java-17-openjdk
Java1.8 的话,需要安装一下:
dnf search java-1.8
dnf install java-1.8.0-openjdk.x86_64
2.1.2. 安装 Jenkins
因为 Jenkins 本身是没有在 dnf 的软件仓库包中的,所以我们需要连接 Jenkins 仓库:
- wget 是 Linux 中下载文件的一个工具,-O 表示输出到某个文件夹并且命名为什么文件;
- rpm:全称为 The RPM Package Manage ,是 Linux 下一个软件包管理器;
注意:不同Java版本的Jenkins版本不同,需要使用不同的命令进行安装:
- Java17:
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io-2023.key
- Java8:
wget –O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhatstable/jenkins.repo # 导入GPG密钥以确保您的软件合法 rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key # 或者 rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
注意 下载Jenkins的位置/etc/yum.repos.d/jenkins.repo 不可以随意更改必须这个位置
Java8 还要多一步操作,Java17 已经处理好了
编辑一下文件/etc/yum.repos.d/jenkins.repo
可以通过 vim 编辑更改以下 baseurl,去除后面多余的,
[jenkins]
name=Jenkins-stable
baseurl=http://pkg.jenkins.io/redhat
gpgcheck=1
安装 Jenkins
dnf install jenkins
启动 Jenkins 的服务:
systemctl start jenkins # 启动
systemctl status jenkins # 查看状态
systemctl enable jenkins # 设置开机启动
注意:Jenkins默认使用 8080 端口提供服务,所以需要加入到安全组中:
2.1.3. Jenkins 用户
我们后面会访问 centos 中的某些文件夹,默认 Jenkins 使用的用户是 jenkins,可能会没有访问权限,
所以我们需要修改一下它的用户:
Java8 的操作:
修改文件的路径:/etc/sysconfig/jenkins
Java17 的操作:
修改文件的路径:/usr/lib/systemd/system/jenkins.service
[jenkins]
name=Jenkins-stable
baseurl=http://pkg.jenkins.io/redhat
gpgcheck=
之后需要重启一下 Jenkins:
# 也可以将Jenkins添加到root组中
sudo usermod -a -G root jenkins
systemctl restart jenkins
2.1.4. Jenkins 配置
- 打开浏览器,输入:http://xxxx:8080/
- 获取输入管理员密码:
cat /var/lib/jenkins/secrets/initialAdminPassword
- 选择安装推荐的插件:
2.1.5. Jenkins 任务
UI界面我用Java17版本对应版本的Jenkins,Java1.8差不多的
新建任务:
配置项目
构建触发器:
这里的触发器规则是这样的:
定时字符串从左往右分别是:分 时 日 月 周
#每半小时构建一次OR每半小时检查一次远程代码分支,有更新则构建
H/ 30 * * * *
#每两小时构建一次OR每两小时检查一次远程代码分支,有更新则构建
H H/ 2 * * *
#每天凌晨两点定时构建
H 2 * * *
#每月 15 号执行构建
H H 15 * *
#工作日,上午 9 点整执行
H 9 * * 1 - 5
#每周1,3,5,从8:30开始,截止19:30,每 4 小时 30 分构建一次
H/ 30 8 - 20 / 4 * * 1 , 3 , 5
构建环境:
注意:我们需要搭建 Node 的环境
- 第一步:安装 Node 的插件;
- 第二步:配置 Node 的环境;
第一步:安装 Node 的插件
第二步:配置 Node 的环境
构建执行的任务:
pwd # 查看当前路径node -v # 查看node版本
npm -v # 查看npm版本npm config set registry=https://registry.npmmirror.com # 安装淘宝镜像源npm install # 安装依赖包
npm run build # 构建项目pwd # 查看当前路径
echo '构建成功' # 输出构建成功
ls # 查看当前文件夹rm -rf /www/vitepress/* # 删除/www/vitepress文件夹里所有的内容
cp -rf ./dist/* /www/vitepress/ # 将构建好的文件复制到/www/vitepress文件夹
最后 保存配置,立即构建,然后查看控制台信息即可,GitHub拉代码有时候网络问题~~~
2.2. nginx 安装和配置
2.2.1. 安装 nginx
dnf install nginx
启动nginx:
systemctl start nginx # 启动
systemctl status nginx # 查看状态
systemctl enable nginx # 设置开机启动
2.2.2. 配置 nginx
我们这里主要配置 nginx 的用户和默认访问目录:
/etc/nginx/nginx.conf
配置用户:
配置 nginx.conf:
这是我个人项目仅供参考的 nginx 配置,可以参考一下:
# user nobody;
worker_processes 1;events {worker_connections 1024;
}http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;# 主域名 zimotop.top 的配置server {listen 80;server_name zimotop.top www.zimotop.top;# 配置主域名的根目录和索引页location / {root /www/vitepress; # a项目的根目录index index.html;}# 配置错误页面的处理error_page 500 502 503 504 /50x.html;location = /50x.html {root /www/vitepress;}}# 子域名 code.zimotop.top 的配置server {listen 80;server_name code.zimotop.top;# 配置子域名的根目录和索引页location / {root /www/training-vue2; # b项目的根目录index index.html;}# 配置错误页面的处理error_page 500 502 503 504 /50x.html;location = /50x.html {root /www/training-vue2;}}
}
top;
# 配置子域名的根目录和索引页location / {root /www/training-vue2; # b项目的根目录index index.html;}# 配置错误页面的处理error_page 500 502 503 504 /50x.html;location = /50x.html {root /www/training-vue2;}
}
}