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

一. 项目部署和 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 的环境

sh 复制代码
dnf search java-17-openjdk
dnf install java-17-openjdk

Java1.8 的话,需要安装一下:

sh 复制代码
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:

    sh 复制代码
    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:

    sh 复制代码
    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,去除后面多余的,

sh 复制代码
[jenkins]
name=Jenkins-stable
baseurl=http://pkg.jenkins.io/redhat
gpgcheck=1

安装 Jenkins

sh 复制代码
dnf install jenkins

启动 Jenkins 的服务:

sh 复制代码
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

sh 复制代码
[jenkins]
name=Jenkins-stable
baseurl=http://pkg.jenkins.io/redhat
gpgcheck=

之后需要重启一下 Jenkins:

sh 复制代码
# 也可以将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差不多的

新建任务:
配置项目

构建触发器:

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

sh 复制代码
#每半小时构建一次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 的环境;

第一步:安装 Node 的插件

第二步:配置 Node 的环境

构建执行的任务:
sh 复制代码
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

sh 复制代码
dnf install nginx

启动nginx:

sh 复制代码
systemctl start nginx # 启动
systemctl status nginx # 查看状态
systemctl enable nginx # 设置开机启动

2.2.2. 配置 nginx

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

sh 复制代码
/etc/nginx/nginx.conf

配置用户:

配置 nginx.conf:

这是我个人项目仅供参考的 nginx 配置,可以参考一下:

sh 复制代码
# 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;
        }
    }
}
相关推荐
vvilkim12 分钟前
Flutter 常用组件详解:Text、Button、Image、ListView 和 GridView
前端·flutter
vvilkim18 分钟前
Flutter 命名路由与参数传递完全指南
前端·flutter
NA19 分钟前
redis
前端
你真好看_19 分钟前
6年低代码 零代码 系统二开人员的角度,看低代码 到底有多好用!!!
前端
JC_You_Know26 分钟前
边缘计算一:现代前端架构演进图谱 —— 从 SPA 到边缘渲染
前端·人工智能·边缘计算
可观测性用观测云27 分钟前
Ingress-nginx 接入可观测性最佳实践
nginx
DoraBigHead29 分钟前
深入 JavaScript 作用域机制:透视 V8 引擎背后的执行秘密
前端·javascript
Tu_Jipang30 分钟前
前端从零搭建企业级后台系统实战指南
前端
快起来别睡了31 分钟前
CSS定位的奥秘:从文档流到position,一文讲透前端布局核心!
前端·css·程序员
菥菥爱嘻嘻34 分钟前
React---Hooks深入
前端·javascript·react.js