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;
        }
    }
}
相关推荐
cwtlw22 分钟前
CSS学习记录11
前端·css·笔记·学习·其他
轻动琴弦39 分钟前
nestjs+webpack打包成一个mainjs
前端·webpack·node.js
m0_748236111 小时前
前端怎么预览pdf
前端·pdf
快乐牛牛不要困难1 小时前
前端将base64转pdf页面预览
前端
m0_748233641 小时前
Python Flask Web框架快速入门
前端·python·flask
凉辰1 小时前
使用FabricJS对大图像应用滤镜(巨坑)
前端
梓沂1 小时前
pom.xml中dependencyManagement的作用
xml·java·前端
m0_748250031 小时前
前端pdf预览方案
前端·pdf·状态模式
neeef_se1 小时前
【Linux】WG-Easy:基于 Docker 和 Web 面板的异地组网
linux·前端·docker
stormsha2 小时前
解决 npm 安装慢的问题:加速 npm 包下载的实用方法
前端·npm·node.js