第八节:DevOps开发模式详解和基于Jenkins实现项目的自动化部署

一. DevOps开发模式

1. 传统模式

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

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

 * 工作的不协调:开发人员在开发阶段,测试和运维人员其实是处于等待的状态。等到测试阶段,开发人员等待测试反馈bug,也会处于等待状态。

 * 线上bug的隐患:项目准备交付时,突然出现了bug,所有人员需要加班、等待问题的处理;

2. DevOps模式

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

3. CI/CD

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

  • CI是Continuous Integration(持续集成);

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

(1). 持续集成CI

 

 

 

(2). 持续部署CD

 

 

 

 

二. 自动化部署目标和流程

1. 目标

  将一个 Vue3 项目提交到gitee后,可以实现自动部署到服务器上,即 随时提交,每隔30min中自动部署。

2. 环境准备

 服务器:centos8.1 (虚拟机)

 项目:基于VueCli创建的Vue3项目

 代码仓库:gitee

 服务器环境:

  (1). git环境 

  (2). git1.8

  (3). jenkins环境 (需要安装node插件)

  (4). nginx服务器

3. 流程图

  

三. 基于Jenkins自动化部署详细步骤

1. 安装Java环境

(jenkins依赖于java环境) 

(1). 先通过dnf工具搜索一下java安装包 【dnf search java-1.8】

(2). 安装java环境 【dnf install java-1.8.0-openjdk.x86_64】 

 PS: centos8.x版本,默认就含有dnf了,用它来安装各种包.(类似于npm, centos7版本用的是yum)

(3) 通过指令 【java -version】查看java版本 

2. 安装git环境

 服务器上需要安装git环境, 用于jenkins和gitee进行资源的同步

 运行指令【dnf install git -y】,-y表示直接进行安装,不需要在确认了

3. 安装/配置nginx

(1). 通过指令 【dnf install nginx -y】进行nginx的安装

(2). 启动nginx →  查看nginx状态 → 设置开机自动启动nginx

【systemctl start nginx】
【systemctl status nginx】
【systemctl enable nginx】

nginx默认监听80端口,输入:【 http://192.168.137.201 】,出现如下页面,表示nginx启动成功

(3).  在root目录下的publish文件夹下创建一个 vue3_test1文件夹,用来存放项目发布包;然后创建一个 index.html页面,用来测试使用。

【 mkdir /root/publish/vue3_test1 】

【touch index.html】

然后编辑 index.html页面,随意输入内容即可,比如 

(4). 修改nginx配置文件,使其映射到上述(3)中创建的index.html上   【vi /etc/nginx/nginx.conf】

默认配置文件:

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2 default_server;
#        listen       [::]:443 ssl http2 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers PROFILE=SYSTEM;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

}
View Code

修改后的配置文件

 

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        #root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
            root /root/publish/vue3_test1;
            index index.html;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2 default_server;
#        listen       [::]:443 ssl http2 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers PROFILE=SYSTEM;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

}
View Code

 

(5). 重启nginx   【systemctl restart nginx】, 继续访问 【 http://192.168.137.201 】,发现出现403禁止访问了

(6). 设置整个文件夹内容的权限:【chmod -R 777 /root/publish/vue3_test1】,发现还是403禁止访问

 

 (7) 关闭SELinux, 通过 【vi /etc/selinux/config】把SELINUX改为disabled,然后 reboot重启。  最后再次访问:【 http://192.168.137.201 】大功告成。

4. 创建gitee代码仓库

(1). 先通过vuecli创建一个项目vue3_test1

(2). 在gitee 创建一个私有仓库,仓库地址为:https://gitee.com/ypf0806/vue3_test1.git

(3). 运行下面指令,将本地的vue3_test1项目推送到远程仓库

【git remote add origin https://gitee.com/ypf0806/vue3_test1.git】
【git push -u origin "master"】

5. 安装Jenkins

(1).  进入目录 【cd /etc/yum.repos.d/ 】,然后运行指令 【wget http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo】进行下载

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

  • wget是Linux中下载文件的一个工具,-O表示输出到某个文件夹并且命名为什么文件;

  • rpm:全称为The RPM Package Manage,是Linux下一个软件包管理器;

(2). 导入GPG密钥以确保您的软件合法

【rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key】 或 【rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key】

(3). 编辑 【vi /etc/yum.repos.d/jenkins.repo】, 改为下面代码

[jenkins]
name=Jenkins-stable
baseurl=http://pkg.jenkins.io/redhat
gpgcheck=1

(4). 运行指令进行安装 【dnf install jenkins --nobest -y】

 

(5) 启动jenkins → 查看状态 → 设置开机自动启动

【systemctl start jenkins】
【systemctl status jenkins】
【systemctl enable jenkins】

(6). Jenkins默认使用8080端口提供服务, 访问:【 http://192.168.137.201:8080 】, 云服务器需要配置安全组, 虚拟机需要通过防火墙开辟端口运行。运行上述地址,还是无法访问。

  运行了下面指令,发现8080端口没有监听到, 见鬼了。

【ps -ef|grep jenkins】 

【netstat -ntap|grep 8080】

(7). 重启虚拟机,重新启动jenkins 【systemctl start jenkins】,访问地址 【 http://192.168.137.201:8080 】发现成功了,至此大功告成。

(8). 查看密码 【cat /var/lib/jenkins/secrets/initialAdminPassword】,复制到上述页面,进入下面页面, 选择安装推荐插件。

(9). 创建管理员账号和密码,账号 root  密码123456,最后进入主页面,至此安装彻底完成。

 

6. Jenkins任务配置

(1).  新建Item → 输入任务名称 testJenkins1→ 选择 Freestyle project

 

 

 

(2). 填写描述 → 源码管理,输入Url地址 → 添加访问权限

 

(3). 输入用户名 和 密码,这里是gitee的用户名和密码如果密码不好用,需要去gitee生成token赋值到密码的位置,保存后,退回到上一个页面,红色的报错已经没了

 

(4). 配置触发器,选择 Build periodically(定时构建) → 输入 【H/5 * * * *】,表示每隔5分钟拉取一下代码, 保存

 ps:补充触发器的规则 ,定时字符串从左往右分别是:分 时 日 月 周

#每半小时构建一次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
View Code

(5). 配置到此处,已经可以实现 jenkins从 gitee上 定时抓取代码了,通过查看控制台记录,知道下载在如下图目录下

运行指令【cd /var/lib/jenkins/workspace/testJenkins1】,进入该目录进行查看,确实拉取成功了 

截至此处,Jenkins定时拉取代码已经大功告成了,下面就是制作发布包了!!!!

(5). 退回主面板,选择 Manage Jenkins → ① 先 Manage Plugins( 安装node插件的位置)② 然后 Global Tool Configuration (配置node环境的位置) 

 A. 安装node插件

 

 

 

 

 B. nodejs安装,并配置环境

 

 

C. 再回到jenkins任务中,选择构建环境,选择刚才的nodejs, 上面的命名为:node16.10,执行任务的时候,就会安装,这个安装过程有点慢

(6). 构建执行任务

构建执行的任务:

* 查看Node的版本等是否有问题;

* 执行 `npm install` 安装项目的依赖;

* 移除原来vue3_test1文件的所有内容;

* 将打包的dist文件夹内容移动到vue3_test1文件夹;(下面的脚本可以分两步来测试)

#第一步
pwd
node -v
npm -v

npm install 
npm run build

pwd
echo '构建成功'
ls

#第二步
# 删除/root/publish/vue3_test1文件夹里所有的内容
rm -rf /root/publish/vue3_test1/* 

# 将生成发布包复制到vue3_test1文件夹下
cp -rf ./dist/* /root/publish/vue3_test1/

第一步:光构建

 

 

 

第二步,执行删除和迁移

继续运行指令,发现rm删除权限不够,参考:https://www.cnblogs.com/zhangjianchao/p/15364286.html

主要是修改一下:【vi /etc/sysconfig/jenkins】

重新执行Jenkins任务,发现执行成功

查看vue3_test1文件夹下的内容,发现已经复制进去了。

 

 

 

(7).  本地修改代码,提交到gitee上,jenkins会自动拉取发布,访问niginx服务器 【 http://192.168.137.201】,发现是修改后的内容,至此大功告成

 

 

 

 

 

 

 

 

 

 

 

 

 

 

!

  • 作       者 : Yaopengfei(姚鹏飞)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 
posted @ 2022-01-07 09:30  Yaopengfei  阅读(1302)  评论(4编辑  收藏  举报