docker+jenkins+maven+git构建聚合项目,实现自动化部署,走了800个坑

news2024/10/7 14:23:50

流程

主要的逻辑就是Docker上安装jenkins,然后拉取git上的代码,把git上的代码用Maven打包成jar包,然后在docker运行
这个流程上的难点

  • 一个是聚合项目有可能Maven install的时候失败。
    解决办法:在基础模块的pom文件上添加
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <classifier>exec</classifier>
                </configuration>
            </plugin>

        </plugins>
    </build>
  • 一个是jenkins是在docker上运行的,那么如何git上的代码用Maven打包成jar包,然后在docker运行是个问题
    解决办法:用远程shell脚本,直接在宿主机上执行命令,相当于jenkins去git拉代码打包成jar之后,然后把手动jar包变成容器运行的步骤写成脚本让jenkins去执行

Docker安装jenkins

  • 下载Jenkins的Docker镜像:
    docker pull jenkins/jenkins:lts
  • 在Docker容器中运行Jenkins:
`docker run -p 8080:8080 -p 50000:5000 --name jenkins \ -u root \
-v /mydata/jenkins_home:/var/jenkins_home \
-d jenkins/jenkins:lts`

注意-v之后的“/mydata/jenkins_home”这个很关键,jenkins拉取下来的代码和install之后的代码都会在这个目录下,docker执行的时候也需要在这个目录下。

  • 运行成功后访问该地址登录Jenkins,第一次登录需要输入管理员密码:http://192.168.6.132:8080/
    在这里插入图片描述
    使用管理员密码进行登录,可以使用以下命令从容器启动日志中获取管理密码:
docker logs jenkins

1
从日志中获取管理员密码:
在这里插入图片描述

选择安装插件方式,这里我们直接安装推荐的插件:
在这里插入图片描述

进入插件安装界面,联网等待插件安装:
在这里插入图片描述

安装完成后,创建管理员账号:

在这里插入图片描述

jenkins安装maven

  • 有一个简单安装的方法,但是对于网络要求很高
    通过系统管理->全局工具配置来进行全局工具的配置
    在这里插入图片描述
    但是这种方式对网络要求比较高,可能下载不下来。可以看下面的方案
  • 利用挂载容器来安装maven
    注意并不能在docker的jenkins容器里安装maven,这样在重启之后maven就没有了,可以在jenkins的宿主机里安装maven,把maven安装到上面启动jenkins是的/mydata/jenkins_home路径下面,然后在jenkins里配置。
    在系统管理->全局工具配置里,配置MAVEN_HOME,主要这个路径是jenkins容器里的路径,而不是/mydata/jenkins_home路径。
    在这里插入图片描述
    在系统配置->系统配置里
    在这里插入图片描述

jenkins连接远程ssh

因为需要执行docker命令,docker又不是在jenkins容器里,所以需要远程shell命令来执行,这块要注意,网上说的ssh plugs插件现在不能安装了,需要另外的办法。

  • Jenkins安装Publish over SSH插件
  • 配置服务器相关信息
  • 要先在jenkins所在的机器上生成秘钥。生成方式为:
ssh-keygen -t rsa         #产生公钥与私钥对

因为没加密码所以一路enter完成。此时在 用户名文件夹/root/.ssh/文件夹下生成两个文件:
is_rsa 为密钥文件
id_rsa.pub 为公钥文件
查看秘钥

vim /root/.ssh/is_rsa
  • 打开 系统管理——>系统设置,下拉到底部的Publish over SSH区域。
    在这里插入图片描述
    Passphrase:根据网上的资料说这里是生成秘钥时的密码,如果生成秘钥没有加密码,直接enter到底生成的,则这里不用填写。(保存后会有些·········表示空密码)。

Path to key:网上说这里填的是私钥的路径,没尝试,因为在下面填写了私钥key。

Key:私钥的值。要将文件里的内容都带着。

点击SSH Servers的“增加”,新添目标服务器。

Name:你起的可以分辨服务器的名称。

Hostname:目标服务器的ip,一般服务器之间交互的话用内网ip就行。

Username:登录目标服务器的账号。

Remote Directory:将jenkins构建的文件发送到目标服务器的哪个文件夹下。
在这里插入图片描述

jenkins自动化流程部署

  • 首先我们需要新建一个任务:
  • 设置任务名称后选择构建一个maven风格的软件项目:
  • 然后在源码管理中添加我们的git仓库地址:
  • 此时需要添加一个凭据,也就是我们git仓库的账号密码:
  • 填写完成后选择该凭据,就可以正常连接git仓库了;
    在这里插入图片描述
  • 之后我们需要添加一个构建,选择调用顶层maven目标,该构建主要用于把我们的源码打包成jar包
    在这里插入图片描述
  • 之后添加一个执行远程shell脚本的构建,用于在我们的jar打包完成后执行启动Docker容器的脚本:
    在这里插入图片描述
    脚本如下,都有注解只要有点docker基础的都能看懂,也可以先在服务器上执行一下试试
#!/bin/bash
# 等待三秒
echo sleep 3s
sleep 1
echo sleep 2s
sleep 1
echo sleep 1s
sleep 1
      
echo "结束进程完成"

cd /mydata/jenkins_home/workspace/ceres/ceres-api/target

cp /mydata/jenkins_home/workspace/ceres/Dockerfile /mydata/jenkins_home/workspace/ceres/ceres-api/target/
# 修改文件权限
chmod 755 $JAR_NAME

echo "看看docker能不能用"
docker -v

echo "停止容器"
# 停止容器
docker stop ceres

echo "删除容器"
# 删除容器
docker rm ceres
echo "删除镜像"
# 删除镜像
docker rmi ceres
echo "打包镜像"
# 打包镜像
docker build -t ceres .
echo "运行镜像"
# 运行镜像
docker run -d -p 9000:9000 --name ceres ceres

如果执行有问题可以把这个打开,看看是哪出错了
在这里插入图片描述

  • 之后点击保存操作,我们的任务就创建完成了,在任务列表中我们可以点击运行来执行该任务;

在这里插入图片描述

  • 我们可以通过控制台输出来查看整个任务的执行过程:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/412637.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【配电网故障重构SOP】基于二阶锥松弛的加光伏风机储能进行的配电网故障处理和重构【考虑最优潮流】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

uniapp即时通讯sdk哪个好?

UniApp 是什么? UniApp 是一种跨平台移动应用开发框架&#xff0c;可以使用 Vue.js 语法开发支持 Android、iOS 和桌面浏览器的应用。 UniApp 即时通讯功能如何实现? 对于实现即时通讯功能&#xff0c;您可以使用以下2种方法: 1、使用 websocket 实现即时通讯。Websocket 是一…

x210官方uboot配置编译

1、在linux源生目录下配置编译 (1)X210移植过的uboot在开发板光盘的BSP中。 (2)BSP就是board support package(板级支持包&#xff0c;一般由开发板供应商提供)&#xff0c;里面的内容就是这个开发板的所有相关的源代码、文档、教程等。 (3)将整个BSP打包文件弄到linux的源生目…

Linux的vi编辑器常见命令总结

注&#xff1a;本文中的给定模式或者模式等词中模式所指是指的一个词语并无其他意思。例如给定模式查找定位指的是查找到给定词的定位。 三种方式的关系图 命令方式和插入方式之间可以相互转换&#xff0c;命令方式和ex转义方式也可以相互转换。但是插入方式和ex转义方式之间不…

Python 小型项目大全 61~65

六十一、ROT13 密码 原文&#xff1a;http://inventwithpython.com/bigbookpython/project61.html ROT13 密码是最简单的加密算法之一&#xff0c;代表“旋转 13 个空格”密码将字母A到Z表示为数字 0 到 25&#xff0c;加密后的字母距离明文字母 13 个空格&#xff1a; A变成N&…

MyBatis 03 -MyBatis动态SQL与分页插件

动态SQL与分页插件 动态SQL与分页插件动态SQL与分页插件1 动态SQL1.1 < sql >1.2 < if >1.3 < where >1.4 < set >1.5 < choose >1.6 < trim >1.7 < foreach >2 mybatis缓存2.1 一级缓存2.2 二级缓存3 分页插件3.1 概念3.2 访问与下…

没有什么壁纸比这里的更绝美精致了吧,我一天换一张

嗨&#xff0c;这里是清安&#xff0c;本章来学习学习获取精美壁纸。视频教程&#xff1a;https://b23.tv/iR7bOFF源码&#xff1a;https://gitee.com/qinganan_admin/reptile-case/tree/master/%E5%A3%81%E7%BA%B8本视频还会有第二期&#xff0c;代码也会有第二份&#xff0c;…

类ChatGPT项目的部署与微调(上):从LLaMA到Alpaca、Vicuna、BELLE

前言 近期&#xff0c;除了研究ChatGPT背后的各种技术细节 不断看论文(至少100篇&#xff0c;100篇目录见此&#xff1a;ChatGPT相关技术必读论文100篇)&#xff0c;还开始研究一系列开源模型(包括各自对应的模型架构、训练方法、训练数据、本地私有化部署、硬件配置要求、微…

Python | 蓝桥杯进阶第三卷——动态规划

欢迎交流学习~~ 专栏&#xff1a; 蓝桥杯Python组刷题日寄 蓝桥杯进阶系列&#xff1a; &#x1f3c6; Python | 蓝桥杯进阶第一卷——字符串 &#x1f50e; Python | 蓝桥杯进阶第二卷——贪心 &#x1f49d; Python | 蓝桥杯进阶第三卷——动态规划 ✈️ Python | 蓝桥杯进阶…

精通Python(基础篇)——流程控制语句

流程控制语句 文章目录流程控制语句1️⃣简介2️⃣条件判断⚜️关系运算符⚜️逻辑运算符⚜️if语句⚜️if...else 语句⚜️if...elif...else语句⚜️match...case3️⃣循环结构⚜️while⚜️while...else语句⚜️for⚜️for...else语句4️⃣退出循环⚜️continue⚜️break1️⃣…

(排序6)快速排序(小区间优化,非递归实现)

TIPS 快速排序本质上是一个分治递归的一个排序。快速排序的时间复杂度是NlogN&#xff0c;这是在理想的情况之下&#xff0c;但是它最坏可以到达N^2。决定快速排序的效率是在单趟排序之后这个key最终落在的位置&#xff0c;越落在中间就越接近二分&#xff0c;越接近2分就越接…

Android创建项目

目录 创建Android项目 配置项目结构 创建安卓模拟器 模拟器运行 HelloWorld 应用 真机运行 HelloWorld 应用 创建Android项目 打开 Android studio 工具&#xff0c;选择Project&#xff0c;选择 New Project 由于现在是教程博客&#xff0c;所以我们随便选择 一个 空 Ac…

JS内置对象2

数组对象&#xff1a; &#xff08;1&#xff09;检测是否为数组&#xff1a; …

【数据结构】第十站:堆与堆排序

目录 一、二叉树的顺序结构 二、堆的概念及结构 三、堆的实现 1.堆的创建 2.堆的各接口实现 四、堆排序 1.堆排序的基本思想 2.堆排序的实现 3.堆排序时间复杂度 四、TOP-K问题 五、堆的完整代码 一、二叉树的顺序结构 二叉树有顺序结构和链式结构&#xff0c;分别使…

Android之adb安装busybox使用wget、telnet等服务

一、adb里面安装busybox BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件。BusyBox 包含了一些简单的工具&#xff0c;例如ls、cat和echo等等&#xff0c;还包含了一些更大、更复杂的工具&#xff0c;例grep、find、mount以及telnet。 1、下载busybox busybox—bi…

有哪些通过PMP认证考试的心得值得分享?

回顾这100多天来艰辛的备考经历&#xff0c;感慨颇多 一&#xff0c;对于pmp的认知 百度百科&#xff1a;PMP&#xff08;Project Management Professional&#xff09;指项目管理专业人士&#xff08;人事&#xff09;资格认证。美国项目管理协会&#xff08;PMI&#xff09;举…

使用 Floyd Warshall 检测负循环

我们得到了一个有向图。我们需要计算图形是否有负循环。负循环是循环的总和为负的循环。 在图形的各种应用中都可以找到负权重。例如,如果我们沿着这条路走,我们可能会得到一些好处,而不是为一条路付出代价。 例子:

PVE相关的各种一键脚本(一键安装PVE)(一键开设KVM虚拟化的NAT服务器-自带内外网端口转发)

PVE 原始仓库&#xff1a;https://github.com/spiritLHLS/pve 前言 建议debian在使用前尽量使用最新的系统 非debian11可使用 debian一键升级 来升级系统 当然不使用最新的debian系统也没问题&#xff0c;只不过得不到官方支持 请确保使用前机器可以重装系统&#xff0c;…

RK3568平台开发系列讲解(驱动基础篇)自动创建设备节点

🚀返回专栏总目录 文章目录 一、自动创建设备节点1.1、创建和删除类函数1.2、创建设备函数二、创建类函数三、创建设备函数沉淀、分享、成长,让自己和他人都能有所收获!😄 📢自动创建设备节点分为两个步骤: 步骤一:使用 class_create 函数创建一个类。步骤二:使用 d…

C++算法初级7——二分查找

C算法初级7——二分查找 文章目录C算法初级7——二分查找在升序的数组上进行二分查找总结应用范围应用二分查找的原理&#xff1a;每次排除掉一半答案&#xff0c;使可能的答案区间快速缩小。 二分查找的时间复杂度&#xff1a;O(log n)&#xff0c;因为每次询问会使可行区间的…