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;
        }
    }
}
相关推荐
徐子颐1 分钟前
从 Vibe Coding 到 Agent Coding:Cursor 2.0 开启下一代 AI 开发范式
前端
小月鸭14 分钟前
如何理解HTML语义化
前端·html
jump68037 分钟前
url输入到网页展示会发生什么?
前端
诸葛韩信40 分钟前
我们需要了解的Web Workers
前端
brzhang1 小时前
我觉得可以试试 TOON —— 一个为 LLM 而生的极致压缩数据格式
前端·后端·架构
yivifu1 小时前
JavaScript Selection API详解
java·前端·javascript
这儿有一堆花1 小时前
告别 Class 组件:拥抱 React Hooks 带来的函数式新范式
前端·javascript·react.js
十二春秋1 小时前
场景模拟:基础路由配置
前端
六月的可乐1 小时前
实战干货-Vue实现AI聊天助手全流程解析
前端·vue.js·ai编程
一 乐2 小时前
智慧党建|党务学习|基于SprinBoot+vue的智慧党建学习平台(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·学习