Skip to content

一. 项目部署和DevOps

传统的开发模式

在传统的开发模式中,开发的整个过程是按部就班就行:

早期的开发模式

但是这种模式存在很大的弊端:

  • 工作的不协调:开发人员在开发阶段,测试和运维人员其实是处于等待的状态。等到测试阶段,开发人员等待测试反馈bug,也会处于等待状态。
  • 线上bug的隐患:项目准备交付时,突然出现了bug,所有人员需要加班、等待问题的处理;

DevOps开发模式

DevOps是Development和Operations两个词的结合,将开发和运维结合起来的模式:

打开格局

DevOps模式

持续集成和持续交付

伴随着DevOps一起出现的两个词就是持续集成和持续交付(部署):

  • CI是Continuous Integration(持续集成);
  • CD是两种翻译:Continuous Delivery(持续交付)或Continuous Deployment(持续部署);

持续集成CI:

持续集成

持续交付和持续部署:

持续交付持续部署

自动化部署流程

自动化部署的流程image-20220929232048548

二. 购买云服务器

注册阿里云的账号

  • 云服务器我们可以有很多的选择:阿里云、腾讯云、华为云。
  • 目前在公司使用比较多的是阿里云

  • 选择目前使用更加广泛的阿里云来讲解

  • 我们需要注册阿里云账号 https://aliyun.com/

  • 注册即可,非常简单

购买云服务器

购买云服务器其实是购买一个实例。

1.来到控制台:

image-20201204152032769

2.创建实例,选择类型和配置

![image-20201204152133800](/Users/coderwhy/Library/Application Support/typora-user-images/image-20201204152133800.png)

![image-20201203103047329](/Users/coderwhy/Library/Application Support/typora-user-images/image-20201203103047329.png)

3.配置网络安全组

image-20201203103725892

4.创建实例

image-20201203104249296

三. 搭建服务器环境

连接服务器

  • 方式一:cmd命令行工具中,通过ssh连接:ssh root@公网ip地址

    • root:系统配置中的登录名
    shell
    	ssh root@120.78.91.175 # 服务器公网ip
    • 输入密码,连接成功如下:

      image-20220929224611261
  • 方式二:vsCode中的Remote - SSH插件

    image-20220929224722370

    image-20220929225117918 image-20220929225454429

image-20220929225518487 image-20220929225616893

image-20220929225652107image-20220929225830218

jenkins自动化部署

安装Java环境

Jenkins本身是依赖Java的,所以我们需要先安装Java环境:

  • 这里我安装了Java1.8的环境,对应的java8
shell
dnf search java-1.8
dnf install java-1.8.0-openjdk.x86_64

服务器安装最新的jenkins,那么java也安装最新的

安装Jenkins

因为Jenkins本身是没有在dnf的软件仓库包中的,所以我们需要连接Jenkins仓库:

  • wgetLinux中下载文件的一个工具,-O表示输出到某个文件夹并且命名为什么文件
  • rpm:全称为The RPM Package Manage,是Linux下一个软件包管理器
shell
# 将 jenkins 的仓库地址下载到本地
wget –O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/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

可以通过vim(命令行中的一种编辑器,可以编辑我们打开的文件内容)编辑文件/etc/yum.repos.d/jenkins.repo

  • 打开该文件
shell
vi /etc/yum.repos.d/jenkins.repo
  • i,如下

    image-20220929234657645
  • 编辑为如下内容,直接cv即可

shell
[jenkins]

name=Jenkins-stable

baseurl=http://pkg.jenkins.io/redhat

gpgcheck=1

退出,先按ESC

这时还未完全退出,按shift + :,(:键,L键旁边

再输入wq,w: 保存修改,q:退出。

image-20220929235136309

之后Enter键确认一下完事,这时dnf中就能找到jenkins

image-20220929235254822

安装Jenkins

shell
dnf install jenkins # --nogpgcheck(可以不加)

启动Jenkins的服务:

shell
systemctl start jenkins
systemctl status jenkins
systemctl enable jenkins

Jenkins默认使用8080端口提供服务,所以需要加入到安全组中:

image-20220930002014672

这时,就能访问8080端口了

image-20220930002108998
  • 为了防止第三方人获取到ip地址之后访问该端口进入,需要从服务器/var/lib/jenkins/secrets/initialAdminPassword中,获取密码

    • cat查看某个路径下文件的内容
    shell
    cat /var/lib/jenkins/secrets/initialAdminPassword

Jenkins用户

我们后面会访问centos中的某些文件夹,默认Jenkins使用的用户是 jenkins,可能会没有访问权限,所以我们需要修改一下它的用户:

修改文件的路径:/etc/sysconfig/jenkins

image-20210825162827962

之后需要重启一下Jenkins:

shell
systemctl restart jenkins

如果上面方式不行,可以尝试下面的方式

shell
# 也可以将Jenkins添加到root组中,这样root有的权限,jenkins也有了
sudo usermod -a -G root jenkins

systemctl restart jenkins

如果还是不行,还有第三种方式

shell
# 也可以给Jenkins目录权限
chown -R jenkins  /xxx/xxx # 将/xxx/xxx目录的权限复制给jenkins 

systemctl restart jenkins

Jenkins配置

打开浏览器,输入:http://8.134.60.235:8080/,注意:这里输入的是根据你自己的IP地址

获取输入管理员密码:

  • 在下面的地址中 cat /var/lib/jenkins/secrets/initialAdminPassword

可以安装推荐的插件:

image-20220930002716351

安装推荐的插件

image-20220930002747212

安装完之后创建对应的用户

image-20220930142100799image-20220930142226536image-20220930142318391

Jenkins任务

新建任务:

image-20220930142515167image-20220930142926044

配置项目和保留策略:

image-20220930170329142

源码管理:

选择git方式,服务器需安装git

shell
dnf install git

输入对应的仓库地址和凭证

如果是私有仓库,需要添加安全凭证,公共仓库则不需要

image-20220930171637507

创建全局凭证

image-20220930171217146

创建完成

image-20220930171254949

指定分支

image-20220930171856217

构建触发器:

定时构建:按照指定时间构建

轮询SCM:比较仓库中的代码与服务器中的代码是否一致,不一致则更新服务器中的代码

这里的触发器规则是这样的:

  • 定时字符串从左往右分别是:分 时 日 月 周
  • *:根据对应的位置,为每分/时/日/月/周
shell
#每半小时构建一次OR每半小时检查一次远程代码分支,有更新则构建
H/30 * * * * 

#每天的每个小时的第30分钟构建一次
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
image-20220930173154682

构建环境:

注意:因为我们代码需要执行npm install、npm run build等命令,所以我们需要搭建Node的环境,Node内置了npm工具

  • 第一步:配置Node的环境,没有就先安装Node插件,再来配置
  • 第二步:安装Node的插件

image-20201204190055096

第一步:配置Node的环境

node环境

第二步:安装Node的插件

image-20220930173731413image-20220930173843565

这里需要等待安装完重启插件

之后,再进入到全局工具配置中,就有对应的node选项了,而且重启之后,我们的jenkins也都汉化了

选择新建Node.js,有了这个插件之后,jenkins会自动帮我们安装node

image-20220930174115293

我们选择稳定版16.x,目前最先18.x,然后点击保存之后,jenkins就会自动安装node了

image-20220930174408326

这时,再来到我们之前创建的任务的配置中进行修改

image-20220930174743102

构建执行的任务:

  • 查看Node的版本等是否有问题;
  • 执行 npm install 安装项目的依赖;
  • 移除原来airbnb文件的所有内容;
  • 将打包的dist文件夹内容移动到airbnb文件夹;
shell
pwd # 查看当前所在位置
node -v
npm -v

ls # 查看当前目录

npm install 
npm run build

pwd

echo '构建成功'

ls # 查看当前目录

# 删除/root/airbnb文件夹里所有的内容,airbnb是我们在服务器中存放对应项目的打包资源的文件夹,具体名字根据文件名来
rm -rf /root/airbnb/*

cp -rf ./dist/* /root/airbnb/ # vue2中构建文件在dist,vue3为build,将对应的构建包下的文件移入到/root/airbnb/中
image-20220930182017276

保存之后,我们进行立即构建测试,发现构建失败:没有权限

image-20220930210745509

可以按照上面的3.1.3. jenkins用户一节中的几种方式解决

image-20220930212059805

构建成功

image-20220930212125203

nginx安装和配置

我们访问我们服务器的公网地址,默认访问的是80端口,但是80端口没有被监听,所以我们可以在服务器中安装一个nginx,安装之后,在服务器中启动,nginx就会帮我们监听80端口,之后一旦有人访问80端口,就会返回在nginx中所配置的那些网页

安装nginx

后续我们部署会使用nginx,所以需要先安装一下nginx:

可以通过vscode面板中的终端打开,直接对应的就是服务器的终端

通过CentOS中的工具dnf来安装

搜索是否有对应的nginx包

shell
dnf search nginx

如下所示,有:

image-20220929230658455

安装:

shell
dnf install nginx

启动nginx:

shell
systemctl start nginx
systemctl status nginx
systemctl enable nginx # 配置开机启动nginx

配置nginx

我们这里主要配置nginx的用户和默认访问目录:

shell
/etc/nginx/nginx.conf # 先进入到 /etc/nginx 中

配置用户:

nginx
	user nginx # => user root

让我们的nginx拥有root的权限,之后访问每个文件夹的时候,都是以root的身份去访问的

image-20210825163329209

通过Linux命令创建文件夹和文件:

shell
mkdir /root/mall_cms # 打包后的文件就放入到创建的 mall_cms 文件夹中,在vscode中可以直接拖入文件,帮我们上传到远程服务器
cd /root/mall_cms
touch index.html

vi index.html

配置访问目录:

image-20210825163406566
  • 配置完之后,都需要重启一下nginx

    js
    	systemctl restart nginx

Released under the MIT License.