使用jenkins实现自动化部署springboot应用

2023-05-16

1. 前置准备

这里代码仓库使用gitlab。在介绍如何通过gitlab和jenkins进行自动化部署之前,需要先安装完成gitlab以及jenkins。两种程序的安装方式以及相关配置可以参看以下内容:

linux中安装gitlab:linux安装极狐gitlab

linux中安装jenkins:linux安装jenkins

部署jenkins的服务器上,还需要部署完毕对应的git和maven,用来进行代码拉取以及打包操作。git和maven的安装就不在文章中进行赘述了。

2. 创建应用

2.1 在gitlab新建一个项目

image-20230210180152280

2.2 创建一个springboot应用

创建一个springboot的web项目,具体创建流程不在说明。项目创建完成后,创建一个接口outputA,作用是直接返回字符串AAA。

package com.example.jenkinstest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class TestController {
    
    @GetMapping("/outputA")
    @ResponseBody
    public String outputA() {
        return "AAA";
    }
}

另外修改配置文件application.properties,将项目端口改为9000

server.port=9000

完成上述操作后,从ide运行项目,如果项目运行没有错误,就可以继续下述步骤的操作了。

2.3 将代码提交至自建的gitlab上

接下来,我们把能正常运行的代码,提交至之前从自建的gitlab中创建的项目内

首先要进入到自己的项目路径下,打开命令行工具,然后根据gitlab的初始化提示,执行对应的命令

image-20230210180346648

如果在执行命令的时候出现了该错误:error: unknown option `initial-branch=main’

则可以使用下述命令进行处理

git init
git checkout -b main
git remote add origin https://192.168.220.105/gitlab-instance-d6b15872/jenkinstest.git
git add ./*
git commit -m "初始化提交"

执行完毕后,从gitlab页面上就可以看到提交的内容了

image-20230210181347854

2.4 服务器直接克隆代码并且打包

接下来,我们从jenkins服务器上先直接通过git拉取代码并且使用maven进行打包并且运行jar包,以此来保障后续的操作可以顺利进行。首先我们先从服务器上拉取gitlab仓库的代码

git clone https://192.168.220.105/gitlab-instance-d6b15872/jenkinstest.git

遇到了一个报错信息

fatal: unable to access 'https://192.168.220.105/gitlab-instance-d6b15872/jenkinstest.git/': Issuer certificate is invalid.

这种错误是由于通过HTTPS访问Git远程仓库的时候,如果服务器上的SSL证书未经过第三方机构认证,git就会报错。因为未知的没有签署过的证书意味着可能存在很大的风险。可以通过关闭SSL验证解决。

git config --global http.sslVerify false

重新执行克隆命令,然后就可以执行成功了。

image-20230210182434245

而后进入到拉取下下来的目录中,使用maven进行打包

cd jenkinstest/
mvn clean package

打包完成后,会得到一个target包,进入到target包后,直接前台执行jar包

cd target/
java -jar jenkinstest-0.0.1-SNAPSHOT.jar

通过浏览器打开页面,访问http://192.168.220.105:9000/outputA,如果页面正常显示,则代表jenkins服务器上的git和maven以及jdk等都是配置无误的。

image-20230210174021167

3. 配置jenkins实现自动部署

上述流程都走通后,我们就开始准备配置jenkins,由jenkins代替我们手动进行代码拉取以及打包的操作。

3.1 额外说明

如果gitlab和jenkins在同一台服务器上,由于gitlab 10.6版本以后为了安全,默认不允许向本地网络发送webhook请求,如果想要向本地网络发请求的话,我们需要配置gitlab允许对本地网络发起请求。

需要使用管理员账户登录gitlab,然后点击左上角gitlab图标右侧的图标,选择管理员

image-20230210192232222

然后在跳转的页面中,选择左侧的设置,然后点击网络

image-20230210192509299

从跳转的页面中,选择出站请求,然后勾选 允许来自 web hooks 和服务对本地网络的请求 的按钮

image-20230210192627042

3.2 jenkins配置

首先需要为jenkins标明git、maven等程序的位置。

image-20230210194444337

3.3 安装插件

我们先从jenkins安装一些插件,方便我们与gitlab进行集成

image-20230210185317050

image-20230210185756724

在这里我们先安装三个必要的插件

  • gitlab

    集成gitlab。这个插件允许 GitLab 触发 Jenkins 构建,并在 GitLab UI 中显示它们的结果。

  • Maven Integration

    jenkins与maven的集成使用。

  • Gitlab Authentication

    用于gitlab的认证。

  • Publish Over SSH

    通过ssh传送文件。

3.4 从jenkins配置任务

3.4.1 配置手动编译任务

打开jenkins首页,选择新建任务或者Create a job都可以

image-20230211184738351

接下来需要填写任务名称和任务处理内容,这里由于之前安装了maven插件,且示例项目也是使用的maven,因此选择构建一个maven项目

image-20230211190239324

接下来需要填写对应的git项目地址、gitlab认证方式以及对应的分支信息

image-20230211190707225

如果之前没有全局配置过认证信息,那么可以直接点击添加按钮进行添加,这里我直接使用gitlab的用户名和密码进行认证

image-20230211190842894

image-20230211190945349

这里有个地方需要注意,如果是填入了gitlab地址,并且用户密码都没有问题,但是仍然提示

stderr: fatal: unable to access  'xxx':  Issuer certificate is invalid.

这种错误信息,如下图所示

image-20230211191057879

那么就需要去把jenkins用户修改成root用户进行启动,或者直接在jenkins服务器上使用以下命令

git config --system http.sslverify false

如果都没有出现错误提示,则可以继续向下配置

image-20230211191455701

输入maven打包命令

image-20230211212701703

选择只有构建成功才执行后续操作

image-20230211191531841

到这里,我们先进行保存,然后执行下构建,看能否正常进行代码拉取和打包操作。

点击最下方的保存后,选择左侧的立即构建。

image-20230211191725987

点击对应的编号就可以查看详情

image-20230211191754102

选择控制台输出选项,就可以查看对应的日志。等执行完成后,可以看到

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:17 min
[INFO] Finished at: 2023-02-11T19:18:20+08:00
[INFO] ------------------------------------------------------------------------
Waiting for Jenkins to finish collecting data
[JENKINS] Archiving /var/lib/jenkins/workspace/jenkinstest/pom.xml to com.example/jenkinstest/0.0.1-SNAPSHOT/jenkinstest-0.0.1-SNAPSHOT.pom
[JENKINS] Archiving /var/lib/jenkins/workspace/jenkinstest/target/jenkinstest-0.0.1-SNAPSHOT.jar to com.example/jenkinstest/0.0.1-SNAPSHOT/jenkinstest-0.0.1-SNAPSHOT.jar
channel stopped
Finished: SUCCESS

这时候我们从服务器上,看一下对应的目录中是否有日志里边的 /var/lib/jenkins/workspace/jenkinstest/target/jenkinstest-0.0.1-SNAPSHOT.jar 文件

image-20230211192009925

可以看到,的确构建出了对应的jar包。

3.4.2 配置后续任务1-本地开启编译的jar包服务

我们先实现一个功能,将生成的jar包放置到项目目录中,然后启动对应的jar包,并且通过浏览器进行访问。

假如我们的项目想要放置在/home/project/jenkinstest中。我们先找到post steps,选择Run only if build succeeds,也就是构建成功后才执行,然后点击 add post-build step,选择调用shell

image-20230211213308833

然后在框体内写入

APP_PID=`ps -ef|grep jenkinstest-0.0.1-SNAPSHOT.jar | grep -v grep | awk '{print $2}'`
if [ $APP_PID > 0 ]
then
  kill -9 $APP_PID
fi
rm -rf /home/project/jenkinstest/*.jar
cp /var/lib/jenkins/workspace/jenkinstest/target/jenkinstest-0.0.1-SNAPSHOT.jar /home/project/jenkinstest/
cd /home/project/jenkinstest/
nohup java -jar jenkinstest-0.0.1-SNAPSHOT.jar >./start.log 2>&1 &

保存后重新执行构建,从jenkins的控制台输出中可以看到以下内容

image-20230211221625343

而后打开网页,输入对应的ip:9000,我这里是http://192.168.220.105:9000/,可以看到项目已经启动成功了

image-20230211221833882

3.4.3 配置后续任务2-部署jar包到其他服务器

在上述步骤中,我们是通过jenkins编译完成后,直接在服务器上启动对应的jar包,从而开启web服务。然而在实际使用的时候,应用服务器和jenkins服务器是分开的,因此我们需要实现一个功能,那就是在jenkins编译完成以后,我们把编译出来的jar包分发到应用服务器上,而后启动对应的jar包。

接下来就实现该功能。想要实现该功能,jenkins里就需要用到Publish Over SSH插件,在安装插件中也已经提到了该插件。另外这里把192.168.220.106作为应用服务器。

3.4.3.1 配置SSH密钥

首先登录部署了jenkins的服务器,执行ssh-keygen命令,都直接回车即可。

[root@localhost ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):  # 路径默认即可,直接回车
Enter passphrase (empty for no passphrase):               # 密码可以为空,直接回车
Enter same passphrase again:                              # 确认密码,为空直接回车即可
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:sqM1UfKjKBU1G3XP18q1VH0cu3Ob5dAHA3pV/FYJM4E root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|      +.. . o=+=*|
|     . + . E oooO|
|    . o . . + +o*|
|     . +   . o.*=|
|    . o S     +==|
|   . . = .     oB|
|  . . *        o.|
|   . o o         |
|    .            |
+----[SHA256]-----+

执行完成后,就会在/root/.ssh/目录下方生成对应的文件

[root@localhost ~]# ls /root/.ssh/
id_rsa  id_rsa.pub

这时候,我们可以把 id_rsa.pub 中的内容复制到jenkins所在服务器(192.168.220.105)要连接的应用服务器(192.168.220.106)对应的用户或root用户目录的.ssh目录下,这里我们直接放置到应用服务器(192.168.220.106)root用户目录下的.ssh目录中。

如果应用服务器还没有初始化ssh目录,也可以先执行下ssh-keygen命令。

因为我的应用服务器中root用户目录下的.ssh目录中还没有authorized_keys这个文件,因此就直接把jenkins服务器的id_rsa.pub复制一份名称改为authorized_keys,然后直接传送到106应用服务器上,如果大家的应用服务器已经存在了authorized_keys文件,那么需要注意将文本追加进去即可,不要直接覆盖文件。

cd /root/.ssh/
cp id_rsa.pub authorized_keys

image-20230211230118911

接下来使用scp命令,将authorized_keys直接传送到应用服务器(192.168.220.106)中

# 下述命令的含义是将authorized_keys文件传送到106服务器的/root/.ssh目录中,登录用户使用root
# scp 要传递的文件 目标服务器用户名@目标服务器ip:要放置的目录
scp authorized_keys root@192.168.220.106:/root/.ssh 

image-20230211230457103

输入完成106服务器root用户对应的密码,没有错误后就会将文件传递到106应用服务器的目录下了

image-20230211230337653

3.4.3.2 jenkins中添加Publish Over SSH配置项

打开系统管理的系统配置,然后找到Publish Over SSH

image-20230211231756720

image-20230211232826907

点击SSH Servers下方的新增按钮

image-20230211234918975

3.4.3.3 配置jenkins向应用服务器传输文件

接下来,我们配置jenkins编译完成后将文件传输到应用服务器上。

打开之间从jenkins创建的任务,先选择新增一个执行操作,用来向应用服务器传输文件

image-20230211231415721

而后填写对应内容

image-20230212004344087

# 远程执行的脚本
APP_PID=`ps -ef|grep jenkinstest-0.0.1-SNAPSHOT.jar | grep -v grep | awk '{print $2}'`
if [ $APP_PID > 0 ]
then
  kill -9 $APP_PID
fi
rm -rf /home/project/jenkinstest/*.jar
mv /home/jenkins_putfile/jenkinstest-0.0.1-SNAPSHOT.jar /home/project/jenkinstest/
cd /home/project/jenkinstest/
nohup java -jar jenkinstest-0.0.1-SNAPSHOT.jar >./start.log 2>&1 &

上述配置填写完成后,我们将之前配置的本地执行的shell操作删除掉,最后保存操作。

image-20230211231304124

执行构建,可以看到命令如果顺利执行的话,会提示一个文件传输成功。

image-20230212003558594

这时候打开106服务器,会发现对应目录下已经有了对应的jar包,而且也可以访问对应的服务。

image-20230212004656835

3.4.4 配置自动构建,直接向分支push代码后触发构建

在上述的例子中,都是通过手动点击构建进行的,接下来要实现一个功能,那就是在代码出现新的推送(push)以后,自动触发构建操作。

打开之前从jenkins创建的任务,找到构建触发器,然后选中Build when a change is pushed to GitLab选项,复制下来后面的GitLab webhook URL地址,后面需要配置到gitlab对应的项目中。在我这里是:http://192.168.220.105:8090/project/jenkinstest

image-20230214212643553

而后点击高级,找到Secret token然后点击Generate进行生成

image-20230214212731876

这时候先不要关闭页面或者保存,先打开gitlab中对应的项目,在设置中找到webhooks然后进行配置

image-20230214212841616

image-20230214213043076

接下来配置触发规则,这里直接默认选中所有分支,如果不同分支需要对应不同的jenkins任务,则可以通过通配符或者表达式进行对应,然后创建多个webhook即可。

image-20230214213214537

配置完毕后,点击下方的添加webhook按钮,就可以看到新增的内容了

image-20230214213306633

回到jenkins中,对刚才的配置进行应用及保存。而后在gitlab中点击测试,选择推送事件,回到jenkins中,就可以看到触发构建任务了。

image-20230214213513936

3.4.5 配置自动构建,分支合并成功后触发构建

我们在实际开发中,往往不会直接向主分支提交代码,一般的流程都是从自己的开发分支上进行代码开发,而后合并到测试分支进行测试,测试没有问题后才会合并到主分支上。接下来将实现该流程下的自动创建。

先修改下之前配置的webhook规则,只有main分支出现push的时候,才触发webhook。

image-20230214231559943

而后修改下jenkins的配置,去除掉Opened Merge Request Events,目的是防止提交合并请求的时候就直接触发了构建操作。

image-20230214231744469

最后我直接从gitlab对应的项目上创建一个test分支,然后使用gitlab的web ide直接从test分支进行一些修改,合并到主分支。

image-20230214215700781

image-20230214215719357

将原本/outputAAA接口直接返回的字符串AAA改为outputAAA,保存修改后,发起合并请求,将test分支合并到main

image-20230214220048263

接下来进行代码合并,将test分支合并到main

image-20230214220229955

image-20230214220526709

接下来处理提交的合并请求

image-20230214231214491

而后jenkins就会开始触发构建操作,等待构建完成后,打开页面进行访问,可以看到显示的内容已经变成了outputAAA。

image-20230214231544129

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用jenkins实现自动化部署springboot应用 的相关文章

  • IP地址与MAC地址缺一不可吗?

    答案是肯定的 xff0c 最近复习到了网络这块的知识 xff0c 才突然弄懂了 xff08 1 xff09 首先 xff0c 我们如果第一次将信息从A端发往B端 xff0c 那么信息需要从应用层到物理层一层一层进行封装 xff0c 到达对端
  • [剑指offer] 连续子数组最大和

    题目 xff1a 对于一个有正有负的整数数组 xff0c 请找出总和最大的连续数列 给定一个 span class hljs keyword int span 数组A和数组大小n xff0c 请返回最大的连续数列的和 1 思路 xff1a
  • Visual Studio连接wsl使用C/C++进行Linux开发

    首先打开Visual Studio xff0c 打开顶部菜单栏上的项目 然后选择属性 这样就会弹出一个窗口 xff0c 窗口的标题不重要 xff0c 我给项目起的名字叫Linux控制台项目 xff0c 他就显示成 Linux控制台项目 属性
  • 输入一个字符串,求字符串中包含的字符集合

    输入 xff1a abcqweracb 输出 xff1a abcqwer 一 剖析 采用数组的方式 xff0c 定义一个可以存放256个字符的数组 xff08 ASCII最多包含256个字符 xff09 xff0c 先将数组初始化1 xff
  • 求最小步数变为斐波那契数

    一 解析 xff1a 当我们一步一步走的时候 xff0c 一边计算斐波那契数 xff0c 一边计算左边的数和输入的N值进行差值运算 xff0c 直到N比斐波那契数小就直接退出 二 代码 span class hljs keyword int
  • 逆置链表

    题目 xff1a 将一个链表逆置 解析 xff1a 使用三个指针 xff0c 前 中 后 xff0c 改变中指针 xff0c 遍历后指针 ListNode ReverseList ListNode pHead span class hljs
  • 字符串中连续最长数字串

    一 题目要求 二 解析 使用左右下标来记录连续数字 xff0c 使用cur来记录最长连续数字的个数 三 代码 span class hljs preprocessor include lt iostream gt span using na
  • 输出链表中倒数第K个结点

    1 结构体类型 span class hljs keyword struct span ListNode span class hljs built in int span span class hljs keyword val span
  • C语言深度解剖

    一 关键字 1 关键字 是编译器能认识的特殊字符串符号 C语言共有32个关键字 xff0c 含sizeof xff0c 计算对象所占内存空间的大小 2 定义 创建一个对象并分配一块内存 3 声明 告诉编译器 xff0c 名字已经匹配到了一块
  • QT 实现窗口四周阴影

    网上好多写的不清楚 又搞了好长时间 这样应该最简单了 一 效果图 二 思路 1 先将所有窗口控件拖到一个QFrame里 xff0c 注意 xff0c QWidget与QFrame之间必须有间距 否则QFrame发散的阴影没有地方显示 2 设
  • cmd中执行批处理(.bat)文件,批处理文件调用python脚本

    记录我在cmd中操作遇到的一些问题 以及Bat脚本常用的一些命令 文章目录 一 bat批处理文件调用python脚本 xff0c 此时执行 bat文件出现了无模块的问题 xff08 安装python模块 xff09 二 cmd执行带参的ba
  • 修改window下的MessageBox中默认文字

    1 方法是修改系统的下的默认名称 放在博客上就当我记住了哈哈 xff01 include lt windef h gt LRESULT CALLBACK CBTHookProc int nCode WPARAM wParam LPARAM
  • 批处理脚本中切换目录

    一 场景 我要在bin main目录下操作v1文件 xff0c 然后在bin目录下操作v2文件 xff0c 但是最后v2文件没有被改写 xff0c 原因是你已经进入bin main 子目录下 xff0c 不能直接进入父目录bin 所以应该注
  • Linux下最强安卓模拟器,流畅又丝滑(附详细安装教程)此瓜保熟|Linux游戏党

    我打算完全从头开始 xff0c 写一个专门用于桌面办公的纯国产操作系统 xff0c 规避主流操作系统上影响用户体验的问题 xff0c 系统力求简洁 有兴趣加QQ群 xff1a 709652950 好东西让更多人发现 xff01 我找了整整两
  • python删除创建文件夹遇到的WindowsError: [Error 5]问题

    一 背景 实际操作中 xff0c 想删除一个文件夹并创建一个文件夹 xff0c 并定义了一个函数 xff0c 但总是遇到WindowsError Error 5 问题 xff0c 经过一番百度 xff0c 是说操作文件权限不够 xff0c
  • Windows下使用WinSW.NET4.exe 设置Nginx的开机自启(新版)

    WinSW NET4 exe 适合X64 xff1b WinSW NET2 exe 适合X86 对应的版本为 xff1a v2 9 0 一 下载地址 https github com winsw winsw releases 下载解压ngi
  • 并查集(Union-Find)算法详解

    并查集 xff08 Union Find xff09 是解决动态连通性问题的一类非常高效的数据结构 本文中 xff0c 我将尽我所能用最简单 xff0c 最清晰的逻辑展示出并查集的构造过程 xff0c 同时还将对其中的关键步骤给出相应的Py
  • apache 编码设置解决

    在windows操作系统上使用IE作为浏览器时 常常会发生这样的问题 xff1a 在浏览使用UTF 8编码的网页时 xff0c 浏览器无法自动侦测 xff08 即没有设定 自动选择 编码格式时 xff09 该页面所用的编码 即使网页已经声明
  • python 字符串相似度判断详解

    1 背景介绍 最近项目中要用到两个字符串相似度的求解算法 xff0c 来矫正ocr文本识别的结果 xff0c 进而提高识别的准确率 xff0c 通过矫正 xff08 相当于模糊查询 xff09 xff0c 识别准确率从65 上升到90 其结
  • 学习使用ffmpeg命令给视频添加一张设计好的背景图片

    学习使用ffmpeg命令给视频添加一张设计好的背景图片 效果如下命令如下 效果如下 未加背景图片之前 xff1a 加上背景图片之后 xff1a 命令如下 ffmpeg loop span class token number 1 span

随机推荐

  • html页面实现使用原生js点击按钮复制文本

    span class token operator lt span span class token operator span Doctype html span class token operator gt span span cla
  • 2.IOC概念及使用xml管理Bean

    1 IOC底层原理 1 1 什么是IOC xff08 1 xff09 控制反转缩写为IOC xff0c 把对象创建和对象之间的调用过程 xff0c 交给Spring管理 xff08 2 xff09 使用IOC目的 xff1a 为了降低耦合度
  • 3. 基于注解方式管理Bean

    1 什么是注解 xff08 1 xff09 注解是代码中的特殊标记 xff0c 格式为 xff1a 64 注解名称 属性名称 61 属性值 属性名称 61 属性值 xff08 2 xff09 注解可以作用在类 方法 属性上面 xff08 3
  • 4. Spring之AOP

    1 AOP基本概念 面向切面编程 利用AOP可以对业务逻辑的各个部分进行隔离 xff0c 从而使业务逻辑各部分之间的耦合度降低 xff0c 提高程序的可重用性 xff0c 同时提高开发效率 AOP主要意图为将日志记录 xff0c 性能统计
  • Python判断时间

    跟着下面这个代码即可学会 使用datetime 模块 39 39 39 pyinstaller使用方法 home leopader local bin pyinstaller i xxx ico xxx py 39 39 39 导入库dat
  • 1.windows11开启wsl2并安装Ubuntu 20.04

    1 开启wsl2 打开控制面板 xff0c 选择程序 启用或关闭Windows功能 xff0c 勾选 适用于Linux的Windows子系统还有虚拟机平台选项 设置wsl版本为wsl2 使用管理员身份 xff0c 打开cmd xff08 命
  • 3.美化shell

    1 安装zsh 默认的shell空值台比较丑 xff0c 在Linux中可以使用oh my zsh进行美化 使用oh my zsh前需要有zsh xff0c 先查看是否安装了zsh span class token function cat
  • 4.ubuntu20.04安装mysql5.7

    1 下载安装包 打开链接 https downloads mysql com archives community 选择相应版本进行下载 xff0c 这里mysql版本选择 5 7 35 xff0c 系统选择Ubuntu Linux xff
  • 5.ubuntu20.04安装redis

    1 下载并安装redis 安装gcc相关依赖 Ubuntu提供了一个build essential软件包 xff0c build essential的依赖包中包含了gcc和g 43 43 xff0c 因此在这里直接安装build essen
  • CentOS 7 安装 node.js

    1 下载node js安装包 打开 https nodejs org zh cn download 链接 xff0c 选择对应的版本进行下载 xff0c 这里选择16 14 2 可以下载到本地 xff0c 然后传到Linux系统中 xff0
  • Linux安装Nginx

    1 下载nginx 进入 http nginx org en download html 网址 分别有 Mainline version xff08 主线版 开发版 xff09 Stable version xff08 稳定版 xff09
  • 使用nginx进行负载均衡

    1 nginx负载均衡介绍 nginx应用场景之一就是负载均衡 在访问量较多的时候 xff0c 可以通过负载均衡 xff0c 将多个请求分摊到多台服务器上 xff0c 相当于把一台服务器需要承担的负载量交给多台服务器处理 xff0c 进而提
  • 普通人的第一个Linux发行版-安装Deepin20.5

    1 Deepin系统闲聊 Deepin是Linux系统的发行版之一 Deepin其实在国内已经有相当长的发展时间了 xff0c 个人认为 xff0c 在国内的Linux发行版中 xff0c Deepin可以不夸张的说就是龙头 xff0c 例
  • Deepin20.5安装JDK8

    1 下载OpenJDK Deepin20 5下安装jdk 这里使用AdoptOpenJDK xff0c 版本8 虚拟机使用HotSplot 首先进入AdoptOpenJDK官网进行下载 xff0c 官方地址为 xff1a https ado
  • Deepin20.5安装maven

    1 前置依赖 安装Maven之前 xff0c 首先需要安装JDK xff0c 如何从Deepin中安装JDK xff0c 可以参考 xff1a Deepin20 5安装JDK8 2 下载Maven 官网最新版本已经变为3 8 xff0c 这
  • Python不智能的聊天机器人

    上代码 xff01 亲测好用 本文当做Git库 xff0c 经常更新 xff01 2022 08 17 V0 1 39 39 39 pyinstaller使用方法 home leopader local bin pyinstaller i
  • 厌倦了各种app推送广告?用RSS来订阅自己想看的内容吧

    前言 现在是2022年 xff0c 大数据加上信息大爆炸 xff0c 让各种资讯类App已经到了满天飞的地步 微博 头条 抖音 B站 公众号等等等 xff0c 数之不尽 xff0c 一会看看这个 xff0c 一会看看那个 xff0c 应用来
  • linux安装极狐gitlab

    1 官网寻找安装方式 不管我们使用任何软件 xff0c 最靠谱的方式就是查看官方文档 gitlab提供了相应的安装文档 xff0c 并且有对应的中文文档 地址如下 xff1a https gitlab cn install 我在这里以Cen
  • linux安装jenkins

    1 官网寻找安装方式 进入到jenkins官网 xff0c 找到对应的下载页面 xff1a https www jenkins io download 根据自己系统还有想要使用的版本 xff0c 进行选择即可 这里我们使用CentOS作为示
  • 使用jenkins实现自动化部署springboot应用

    1 前置准备 这里代码仓库使用gitlab 在介绍如何通过gitlab和jenkins进行自动化部署之前 xff0c 需要先安装完成gitlab以及jenkins 两种程序的安装方式以及相关配置可以参看以下内容 xff1a linux中安装