Springboot项目远程部署gitee仓库(docker+Jenkins+maven+git)

创建仓库

  • 创建一个Springboot项目,勾选web
  • 将该项目创建git本地仓库,再创建远程仓库推送上去
创建TestController
@RestController

@RequestMapping("/test")

public class TestController {

    @GetMapping("/hello")

    public String sayHelloJenkins(){

        return "Hello Jenkins!";

    }

}
  • 本地测试无误之后就可以开始执行下面的内容了。

安装Maven

​ 因为Jenkins容器没有Maven环境,如在容器内部安装Maven,由于构建的项目要下载相关的依赖这样造成一部分资源浪费。所以我这里采用的将Maven和容器通过挂载达到共享本地Maven仓库

  • 去官网下载Maven,我使用的版本是3.5.0
  • 上传至Docker服务所在的服务器
  • 我这里放到的 /usr/local/目录下了
  • 解压后进入apache-maven-3.5.0/
    • 创建repository目录
      mkdir repository

    • 进入conf目录
       vim settings.xml 
      配置本地仓库路径(换成自己的路径和版本)和阿里镜像源
    • <?xml version="1.0" encoding="UTF-8"?>
      
      <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
        <!--这里写自己的路径-->
        <localRepository>/usr/local/apache-maven-3.5.0/repository</localRepository>
      
        <pluginGroups>
        </pluginGroups>
        
        <proxies>
        </proxies>
      
        <servers>
        </servers>
      
        <mirrors>
      <mirror>
         <id>aliyunmaven</id>
         <mirrorOf>*</mirrorOf>
         <name>阿里云公共仓库</name>
         <url>https://maven.aliyun.com/repository/public</url>
      </mirror>
        </mirrors>
      
        <profiles>  
        </profiles>
      
      </settings>
      
      

  • 回到/usr/local/给apache-maven-3.5.0文件递归增加其他用户写权限
    • chmod -R o+w apache-maven-3.5.0
  • 查看apache-maven-3.5.0/bin/目录下的mvn是否有执行权限(绿色的),没有就添加
  • 添加Maven环境变量
    • vim /etc/profile
      # 将如下配置到/etc/profile,注意是你的Maven目录的位置
      export MAVEN_HOME=/usr/local/apache-maven-3.5.0
      export PATH=$PATH:$MAVEN_HOME/bin
      
      配置生效: source /etc/profile

  • 配置成功后关闭终端,重新连接
  • 在任意目录输入
    mvn -version
    没有提示mvn 命令找不到说明配置完成
    • 如果提示找不到java 命令,只是说明你没有安装java环境。根据你自己的需要是否安装,这里可以不安(jenkins容器里有openjdk环境)

启动Jenkins容器

  • 选择一个目录(我选择的是 /home目录)
  • 在该目录下创建目录
    mkdir jenkins

  • 进入目录,创建data目录 用于挂载Jenkins的数据文件
  • 为其他用户添加写的权限chmod o+w data

启动jenkins:

docker run -d -uroot -p 9095:8080 -p 50000:50000 --name jenkins -v /home/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime jenkins/jenkins

基础配置
  • 进入界面 端口是你映射的端口
  • 本地地址:在浏览器中输入:http://serverIp:port/访问jenkins,serverIp为docker宿主机的ip,port即为宿主机映射的端口。这里可以输入ifconfig指令测试,如果没有的话就可以下载下面这个工具来进行IP获取了。

(可在控制台用ifconfig查询ip)

这里可能不知道密钥在哪里,详情可以看我主页的另一篇笔记,有记录下如何找到Jenkins的密钥:http://t.csdnimg.cn/Zj4xg

  • 安装推荐插件
  • 安装过程要等会,这里的问题仍然存在,有一些插件不能安装下来,还在想办法中。。。。,有懂得大神也可以评论一下怎么解决。
  • 直接使用admin用户
  • 之后保存并完成,然后重启(如果你觉得重启慢的话,去终端另开一个端口,用docker restart 容器id 重启容器)。重启好了页面要刷新一下,不然一直等待页面
  • 使用admin用户登录
全局安全配置

这里可以根据自己的需求做配置

全局工具配置

​ 通过

 docker exec -it 

容器id /bin/bash 进入容器(以下参数全是容器中的参数)

  • 获取Maven的settings文件路径
  • 获取环境变量JAVA_HOME
  • 获取环境变量MAVEN_HOME

配置JAVA_HOME时把自动安装取消就可以了

Maven同上 git直接用容器默认的

插件管理
  • 安装Publish Over SSH插件 选中然后下载(我这里截图没来得及选)
  • 等待下载完成重启一下容器就完成了(重启后记得刷新页面),之后要用的时候再配置

# 查看密码

[root@lj jenkins]# cat data/secrets/initialAdminPassword

a86*********************26

第一个任务

源码管理
构建
测试构建

项目在第一次打包构建时有点慢,因为要下载相关Maven依赖,别急,去喝口水走走!!

搞定了,Jenkins已经帮我们从远程仓库自动拉取代码然后打包好了,回到工程去看一下

然后点击工作区,这个目录熟不熟悉??哈哈哈。进去target目录查看打包好的jar包吧

使用Gitee来触发项目构建

上面我们完成了Jenkins的基本构建。但是,我们在实际业务中不是去手动点击立即构建让Jenkins去构建。这tm的算什么自动构建啊!我们程序员写完代码后本地测试没问题了就会通过git的git push推送到远程代码仓库,我们要做到远程代码仓库接收到了新的推送然后去触发Jenkins的构建功能达到自动构建的效果!!!别急慢慢来会很快的!

Gitee官方提供的帮助文档

安装插件

和刚才安装 Publish Over SSH插件插件一样

  • 点击最上角 Dashboard 进到首页。然后 系统管理 -> 插件管理 -> 可选插件 搜索Gitee

安装完成了记得重启

插件配置

系统管理 -> 系统配置 -> Gitee 配置

先去Gitee生成API 令牌 https://gitee.com/profile/personal_access_tokens

点击高级根据你的需求选择 再点击测试连接

插件配置完成!!

任务配置

进入我们jenkins_test任务,左边导航栏有个配置点击进入

Gitee链接

选择我们刚才配置的链接

源码管理配置

在源码管理点击高级

触发器配置

保存!!!!!!!

Gitee代码仓库配置WebHook

管理 -> WebHooks -> 添加webHook

测试

去我们之前的示例项目里随便做点修改然后git push到远程仓库试试

测试成功!!!

使用GitLab触发项目构建

安装插件

安装 Gitlab 和 Gitlab Hook 过程同上。基本配置都相同,GitLab官方的配置是英文的。emmm面向有道翻译学习了。

任务配置

进入我们jenkins_test任务,左边导航栏有个配置点击进入

源码管理

要换成你GitLab的地址和密码哦(用公钥私钥免密登录也行,记得要将容器内jenkins私钥配置给凭证,还有jenkins的公钥配置给GitLab)

触发器配置

和Gitee类似。选择你的触发事件( Push Events )。点击高级还会生成 Secret token 。

记得把WebHook和生成的Secret token配置给GitLab的WebHooks

测试

测试一样啊,你把你的项目推送,然后看看有没有触发构建咯。

持续部署

​ 在前面我们已经完成了有远程代码仓库推送代码触发项目构建的功能。但是,每次构建完了是不是还是要我们去下载然后部署到我们的目标服务器。这样未必过于麻烦,而且有些时候还会出现不及时等情况,或者部署后又上线新需求又要从新部署!!!我们能不能让Jenkins自动帮我们连接我们要部署的目标服务器帮我们自动化部署呢??? 嘿嘿嘿!懒使人进步。come on!

​ 还记得我们前面安装了 Publish Over SSH插件吗?我们来思考一下,我们到底想让Jenkins帮我们做什么?emmm! 首先,帮我们把构建打包好的jar包发送到目标服务器上,然后连接我们的目标服务器去执行启动项目的命令(java -jar xxx,jar > /dev/null &)!

准备:

  • 在你的搭建的Jenkins服务的宿主机上生成ssh秘钥ssh-keygen(生成过就别生成了或者覆盖)
  • 将你的公钥发送到你们要部署的目标服务器 ssh-copy-id 目标服务器ip
插件配置

进入 系统管理 -> 系统配置 -> Publish over SSH

SSH Servers 点击新增 你也可以点击高级用目标服务器的账号密码登录它的ssh

点击保存

任务配置

进入我们jenkins_test任务,左边导航栏有个配置点击进入

构建后操作

保存

测试

去我们之前的示例项目里随便做点修改然后git push到远程仓库

......参照上面的测试

查看控制台

查看目标服务器

你可以在任务配置里面刚才脚本的位置添加相关的脚本,比如判断某个该服务是否启动启动就关闭启动新的服务,完成自动化部署 示例:

#!/bin/bash

cd jenkins_test

# 这是一个坑点 ssh远程执行命令的时候,被远程机器的有些环境变量是无法获取的,比如java环境信息,所以java命令执行不出来 !!!

source /etc/profile

# 获取jenkins_test-0.0.1-SNAPSHOT.jar服务的pid 第一次就啥都没有

PID=`ps -aux|grep jenkins_test-0.0.1-SNAPSHOT.jar|grep -v grep |awk '{printf $2}'`

for id in $PID

do

kill -15 $id

echo "killed $id"  

done

nohup java -jar jenkins_test-0.0.1-SNAPSHOT.jar > ./console.log 2>&1 &

用docker-compose完成容器化自动部署

  • 在实例项目中添加Dockerfile和docker-compose.yaml文件
FROM java:8

MAINTAINER Lj<1126184155@qq.com>



COPY target/jenkins_test-0.0.1-SNAPSHOT.jar /usr/local/jenkins_test-0.0.1-SNAPSHOT.jar



ENV MYPATH /usr/local

WORKDIR $MYPATH



EXPOSE 8080



CMD ["java","-jar","jenkins_test-0.0.1-SNAPSHOT.jar"]

version: "3.8"

services:

  web:

    build: .

    ports:

      - "8081:8080"

修改构建后配置

测试

​ 修改实例代码,然后推送到远程仓库,查看Jenkins控制台的构建,第一次因为要下载相关的镜像所以会比较慢。耐心等待。然后访问8081端口的/test/hello接口

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 热题 HOT 100 (001/100)【宇宙最简单版】

【链表】 No. 0160 相交链表 【简单】&#x1f449;力扣对应题目指路 希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#x…

【系统架构设计 每日一问】四 如何对关系型数据库及NoSql数据库选型

根据不同的业务需求和场景&#xff0c;选择适合的数据库类型至关重要。以下是一个优化后的表格展示&#xff0c;涵盖了管理型系统、大流量系统、日志型系统、搜索型系统、事务型系统、离线计算和实时计算七大类业务系统的数据库选型建议。先明确下NoSQL的分类 NoSQL数据库分类…

RabbitMQ_基础篇

文章目录 第一章 消息中间件1.1 应用场景1.2 常用消息中间件1.2.1 ActiveMQ1.2.2 RabbitMQ1.2.3 RocketMQ1.2.4 Kafka 第二章 RabbitMQ2.1 为什么选择RabbitMQ2.2 RabbitMQ简介2.3 RabbitMQ架构2.4 RabbitMQ工作模式2.4.1 Hello World2.4.2 Work Queues2.4.3 Publish/Subscribe…

分离式网络变压器的集成化设计替代传统网络变压器(网络隔离滤波器)尝试

Hqst盈盛&#xff08;华强盛&#xff09;电子导读&#xff1a;今天分享的是应用了分离式网络变压器设计的的新型网络变压器&#xff08;网络隔离变压器&#xff09; 今天我们一起来看这款新型网络变压器&#xff0c;它就是应用分离式网络变压器集成到电路板上&#xff0c;加上外…

googleTest 源码主线框架性分析

本文备忘一个主题的分析过程和结论&#xff0c;即&#xff0c;googleTest框架中是如何调用相关的测试宏的&#xff1f; TEST TEST_F TEST_P 等等 1&#xff0c;googleTest 环境与简单示例 1.1 下载 googletest 并编译 下载&#xff1a; $ git clone https://github.com/goog…

linux环境安装mongoDB

一、安装单体mogodb 目标&#xff1a;在Linux中部署一个单机的MongoDB&#xff0c;作为生产环境下使用。 提示&#xff1a;和Windows下操作差不多。 步骤如下&#xff1a; &#xff08;1&#xff09;先到官网下载压缩包 mongod-linux-x86_64-4.0.10.tgz 。 &#xff08;2&…

细说MCU用定时器控制ADC采样频率的实现方法并通过Simulink查看串口输出波形

目录 一、硬件工程 二、建立Simulink模型 1.安装MATLAB和Simulink 2.建立Simulink模型 三、代码修改 1.修改回调函数 2.产看结果 3.完整的main.c 本文作者的文章 细说MCU用定时器控制ADC采样频率的实现方法-CSDN博客 https://wenchm.blog.csdn.net/article/details/…

《python语言程序设计》第6章4题反向显示一个整数,使用函数reverse 实现 4位数

* def reverse(n):a n // 1000b n % 1000 // 100c n % 1000 % 100 // 10d n % 100 % 10return str(d) str(c) str(b) str(a)numberT 3456 aText reverse(numberT) print(f"{numberT} is reverse number {aText}")

Spring的IoC与DI介绍

Spring基础 Spring Framework系统架构 Spring Framework是Spring生态圈中最基础的项目,是其它项目的根基。 IoC(Inversion ofControl)控制反转 使用对象时,由主动new产生对象转换为由外部提供给对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。Sprin…

AP ERP与汉得SRM系统集成案例(制药行业)

一、项目环境 江西某医药集团公司&#xff0c;是一家以医药产业为主营、资本经营为平台的大型民营企业集团。公司成立迄今&#xff0c;企业经营一直呈现稳健、快速发展的态势&#xff0c; 2008 年排名中国医药百强企业前 20 强&#xff0c;2009年集团总销售额约38亿元人民币…

监控易V7.6.6.15升级详解15:智能预测管理功能

随着企业IT系统的日益复杂和运维需求的不断提高&#xff0c;传统的监控管理方式已经难以满足现代企业的需求。为了应对这一挑战&#xff0c;监控易系统近期对智能预测管理功能进行了全面升级。本次升级不仅优化了原有功能&#xff0c;还新增了一系列实用特性&#xff0c;旨在为…

openstack设置IP直接登录,不需要加dashboard后缀

openstack 实验环境&#xff0c;openstack-t版&#xff0c;centos2009 修改配置文件 [rootcontroller ~]# vim /WEBROOT /etc/openstack-dashboard/local_settings #将dashboard去掉 WEBROOT /dashboard/ #改为 WEBROOT /[rootcontroller ~]# vim /etc/httpd/conf.d/openst…

交叉编译ethtool(ubuntu 2018)

参考文章&#xff1a;https://www.cnblogs.com/nazhen/p/16800427.html https://blog.csdn.net/weixin_43128044/article/details/137953913 1、下载相关安装包 //ethtool依赖libmul git clone http://git.netfilter.org/libmnl //ethtool源码 git clone http://git.kernel.or…

yolov5进行识别安全帽

进行毕业设计 下载yolov5使用按照教程来进行就行注意事项&#xff08;有必要看看&#xff09;效果 总结 下载yolov5 地址是&#xff1a;https://github.com/ultralytics/yolov5 使用按照教程来进行就行 这里简单说一下&#xff1a; 下载需要的命令&#xff1a; pip install -…

腾讯元宝上线“3D角色梦工厂”:快速生成专属3D角色!

7月16日&#xff0c;腾讯旗下大模型应用“腾讯元宝”上线“3D角色梦工厂”&#xff0c;允许用户通过上传一张五官清晰的正面头像&#xff0c;并选择不同的角色模板&#xff0c;迅速生成个人3D角色&#xff01; 技术特点 “3D角色梦工厂”将大模型生成技术与3D应用相结合&#…

【开发实战】QT5 + OpenCV4 开发环境配置应用演示

前言 作为深度学习算法工程师&#xff0c;必须要掌握应用开发技能吗&#xff1f;搞工程肯定是必须要会界面开发&#xff0c;QT就是一个很不错的选择。本文以QT5.15 OpenCV4.8 OpenVINO2023为例&#xff0c;搭建应用开发环境&#xff0c;演示深度学习模型的QT应用案例。 开发…

提前批不要盲目投!

大家好&#xff0c;我是洋子&#xff0c;最近25届秋招提前批陆续开始了&#xff0c;特别是大厂&#xff0c;比如百度&#xff0c;深信服&#xff0c;OPPO等陆续已经启动提前批招聘 前几天我在群里发了百度的秋招提前批内推码进行内推&#xff0c;今天打开内推系统一看全凉了 …

PACS-医学影像信息管理系统,全影像科室PACS源码,内置包括MPR、CMPR、VR等三维处理功能

PACS系统可以覆盖医院现有放射、CT、MR、核医学、超声、内镜、病理、心电等绝大部分DICOM和非DICOM检查设备&#xff0c;支持从科室级、全院机、集团医院级乃至到区域PACS的平滑扩展&#xff0c;能够与医院HIS、集成平台的有效集成和融合&#xff0c;帮助医院实现了全院医学影像…

园区AR导航系统构建详解:从三维地图构建到AR融合导航的实现

随着现代园区规模的不断扩大与功能的日益复杂&#xff0c;传统的二维地图导航已难以满足访客高效、精准定位的需求。园区内部错综复杂的布局、频繁变更的商户位置常常让访客感到迷茫&#xff0c;造成寻路上的时间浪费。园区AR导航系统以创新的技术手段&#xff0c;破解了私域地…

基于天地图使用Leaflet.js进行WebGIS开发实战

目录 前言 一、天地图的key 1、创建应用 2、调用限制策略 注&#xff1a; &#xff08;1&#xff09;日服务调用超量会暂时拒绝访问&#xff0c;次日自动开启&#xff1b; &#xff08;2&#xff09;如果服务调用过程中存在数据爬取或者下载行为&#xff0c;服务调用会被自…