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

news/2025/2/13 5:46:51/

流程

主要的逻辑就是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 1echo "结束进程完成"cd /mydata/jenkins_home/workspace/ceres/ceres-api/targetcp /mydata/jenkins_home/workspace/ceres/Dockerfile /mydata/jenkins_home/workspace/ceres/ceres-api/target/
# 修改文件权限
chmod 755 $JAR_NAMEecho "看看docker能不能用"
docker -vecho "停止容器"
# 停止容器
docker stop ceresecho "删除容器"
# 删除容器
docker rm ceres
echo "删除镜像"
# 删除镜像
docker rmi ceres
echo "打包镜像"
# 打包镜像
docker build -t ceres .
echo "运行镜像"
# 运行镜像
docker run -d -p 9000:9000 --name ceres ceres

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

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

在这里插入图片描述

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

http://www.ppmy.cn/news/47663.html

相关文章

【数据结构】堆的应用(堆排序的实现 + (向上/向下)建堆时间复杂度证明 + TopK问题(笔记总结))

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;数据结构 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&…

Flink Table API 和 Flink-SQL使用详解

Flink Table API 和 Flink-SQL使用详解 1.Table API & Flink SQL-核心概念 ​ Apache Flink 有两种关系型 API 来做流批统一处理&#xff1a; Table API Table API 是用于 Scala 和 Java 语言的查询API&#xff0c;它可以用一种非常直观的方式来组合使用选取、过滤、join…

RK3568平台开发系列讲解(调试篇)IS_ERR函数的使用

🚀返回专栏总目录 文章目录 一、IS_ERR函数用法二、IS_ERR函数三、内核错误码沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍 IS_ERR 函数的使用。 一、IS_ERR函数用法 先看下用法: 二、IS_ERR函数 对于任何一个指针来说,必然存在三种情况: 一种是合…

电源常识-PCB材质防火等级焊锡工艺

1、目前主流的PCB材质分类主要有以下几种,如图1&#xff0c;图2&#xff0c;图3。FR-4材质比CEM-1好&#xff0c;CEM-1比FR-1好。 按结构分为单面板&#xff0c;双面板&#xff0c;多层板。单面板就是单面铺铜走线&#xff0c;双面板就是上下两面都可以铺铜走线&#xff0c;多层…

Guns社区医疗项目

又是一年毕业季&#xff0c;计算机专业大四的同学们要接受毕业设计的考验啦。又有多少同学为了毕业设计而愁眉苦脸&#xff0c;心力憔悴。考虑到这些&#xff0c;这里为同学们分享一个适合你们毕业设计的作品以及详细介绍&#xff0c;让正在焦头烂额的同学们有所启发&#xff0…

asp.net+C#房地产销售系统文献综述和开题报告+Lw

本系统使用了B/S模式&#xff0c;使用ASP.NET语言和SQL Server来设计开发的。首先把所有人分为了用户和管理员2个部分&#xff0c;一般的用户可以对系统的前台进行访问&#xff0c;对一般的信息进行查看&#xff0c;而注册用户就可以通过登录来完成对房屋信息的查看和对房屋的…

开发插件JFormDesigner(可视化GUI编程)的使用与注册-简单几步即可完成

开发插件JFormDesigner&#xff08;可视化GUI编程&#xff09;的使用与注册 获取链接&#xff1a;1.JFormDesigner获取2.记录插件下载路径3.使用zcj注册4.生成license5.打开idea进行注册 获取链接&#xff1a; https://pan.baidu.com/s/1N9ua2p3BpiMIARCEewRxIw?pwd4e9a 提取…

浅说情绪控制被杏仁体劫持

2023年4月16号&#xff0c;没想到被杏仁体劫持那么严重&#xff0c;触发手抖和口干的症状&#xff0c;这个还真是自己完全没有意识到的【这就是焦虑固化的记忆会持续化】。 【修行】人生要修炼两条线&#xff1a;一条明线是做的事情&#xff0c;那是自己要做的具体事情。 一条…