Jenkins 持续集成 & 持续交付:解锁高效开发新方式

349 阅读5分钟

一. 项目部署和 DevOps

1.1. 传统的开发模式

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

1.png

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

1.2. DevOps 开发模式

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

2.png

3.png

1.3. 持续集成和持续交付

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

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

持续集成CI:

4.png

持续交付和持续部署:

持续交付:手动上传服务器

5.png

持续部署:自动化部署到服务器上

6.png

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版本不同,需要使用不同的命令进行安装:

9.png

  • 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

7.png

Java17 的操作: 修改文件的路径:/usr/lib/systemd/system/jenkins.service

8.png

[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 配置

  1. 打开浏览器,输入:http://xxxx:8080/
  2. 获取输入管理员密码: cat /var/lib/jenkins/secrets/initialAdminPassword
  3. 选择安装推荐的插件:

2.1.5. Jenkins 任务

UI界面我用Java17版本对应版本的Jenkins,Java1.8差不多的

新建任务:

10.png

配置项目

13.png 11.png

构建触发器:

14.png

这里的触发器规则是这样的: 定时字符串从左往右分别是:分 时 日 月 周

#每半小时构建一次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 的环境

  1. 第一步:安装 Node 的插件;
  2. 第二步:配置 Node 的环境;

18.png

第一步:安装 Node 的插件

16.png

第二步:配置 Node 的环境

17.png

构建执行的任务:
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

配置用户:

15.png

配置 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;
        }
    }
}