Gitee+Jenkins(docker版)自动推送并部署Springboot项目到远程服务器

news/2024/5/17 15:16:01 标签: gitee, jenkins, docker

如果要参考gitlab配置请参考Gitlab+Webhook自动推送并更新Springboot项目 Gitlab的配置部分

环境介绍

  1. Jenkins服务器(Centos7.6):
  • docker安装的jenkins,参考Jenkins(docker安装)部署Springboot项目
  • JDK1.8
  • Maven3.6.3
    注意docker安装的jenkins,而且是较新的版本,所以jenkins容器内的java版本是11的,而我的项目是基于JDK1.8的,所以不能用jenkins容器来的java去打包项目,会出错,得使用服务器上的JDK1.8版本。能这么使用主要得益于使用docker安装jenkins的挂载卷配置,挂在卷映射配置好之后就可以在jenkins的容器内部使用java和mvn命令
  1. 远程应用服务器 - 用来运行springboot项目的

Jenkins配置

安装插件

Manage Jenkins --> Plugins --> Available plugins
搜索Publish Over SSH并安装
image-1691657014697

工具配置

Manage Jenkins --> Tools

  • 配置本地JDK
    image-1691657187604

  • Git自动安装即可
    image-1691657215073

  • 配置Maven
    image-1691657273946

记得最后要保存

系统配置

Manage Jenkins --> System

  • 全局属性
    因为不能使用jenkins容器内的java11,所以我们要给容器内的JAVA_HOME环境变量设置成挂载jdk1.8的路径
    image-1691657552556

  • Publish over SSH
    这个工具需要前面安装好Publish Over SSH插件
    image-1691657770283

同样记得最后要保存

Credentials配置

Manage Jenkins --> Credentials

  • 配置gitee的账号密码
    image-1691657970450

Pipline任务配置

新建任务 New Item,任务类型为pipline
image-1691658149770

触发方式

这里使用Generic Webhook Trigger方式
image-1691658514824

流水线

流水线的任务是通过脚本配置的,就长下面这样
image-1691658744544

  • 顶层pipeline
pipeline {

}
  • pipeline下面包含agent、stages,stages下面包含多个stage步骤,stage下面又包含多个steps子步骤(也就是具体的执行命令或脚本)
    image-1691659024484

这里面脚本要实现的步骤就三个:

  1. 拉取代码
  2. maven重新打包
  3. 上传到远程服务器并执行命令重启服务
  • 脚本的编写jenkins提供模板生成Pipeline Syntax(流水线语法)
    比如获取git源码,要生成pipline脚本
    image-1691659445543

maven打包不需要模板,直接写命令就行,其中sh代表执行命令,然后mvn命令要写文件的全路径

/usr/local/maven/bin/mvn clean install -Dmaven.test.skip=true

还有一个需要使用到Publish over SSH,这个也可以使用模板生成脚本
image-1691660061222
注意命令会在上传完成之后执行,如果想要在上传完成之前执行命令,需要配两个Transfer Sets
image-1691660202565

  • 完整的pipline脚本
pipeline {
    agent any
    stages {
        stage('Get Code') {
            steps {
                // 获取git源码
                git credentialsId: 'd76b95e1-74d3-4ae9-920a-1a8d5027abef', url: 'https://gitee.com/zrzrno/demo.git'
            }
        }
        stage('Maven Build') {
            steps {
                // Maven打包
                sh "/usr/local/maven/bin/mvn clean install -Dmaven.test.skip=true"
            }
        }
        stage('Deploy') {
            steps {
                // 上传jar包到到213试服务器
                sshPublisher(publishers: [sshPublisherDesc(configName: '213', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'cd /usr/local/demo/ && sh demo.sh restart', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/usr/local/demo', remoteDirectorySDF: false, removePrefix: 'target/', sourceFiles: 'target/demo-1.0.0.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)])
            }
        }
    }
}

这里边还有一个问题,就是通过Publish over SSH执行远程命令,有的远程服务器的环境变量是识别不到的,比如我这里上传完jar包之后需要进入到特定目录并运行另一个脚本文件,那个脚本文件大致就是重启了java服务,问题就在这个java命令居然没有识别到,报错了,所以我把java命令写成了全路径就可以了

nohup /usr/local/jdk1.8.0_271/bin/java -jar ${APP_NAME} >logs.out 2>&1 &

Gitee配置

找到项目–>管理–>webHooks
image-1691660832737

配置没问题的话就可以在gitee中看到webhook请求历史
image-1691660924534
jenkins中也能看到pipline的执行视图
image-1691661004437


http://www.niftyadmin.cn/n/4928909.html

相关文章

机器学习笔记 - 基于C++的​​深度学习 一、向量运算

由于它们的可扩展性和灵活性,现在很少找到不使用TensorFlow、PyTorch、Paddle......(这里的省略号是指各种成熟的深度学习库)的项目。 花时间从头开始编写机器学习算法(即在没有任何基础框架的情况下)似乎有些重复造轮子的感觉。然而,事实并非如此。自己编写算法可以让我…

instanceof的模式匹配(java)

JDK14中预览特性: instanceof 模式匹配通过提供更为简便的语法,来提高生产力。有了该功能,可以减少Java程序中显式强制转换的数量,实现更精确、简洁的类型安全的代码。 Java 14之前旧写法: if(obj instanceof String…

【项目 计网4】4.11 socket地址 4.12 IP地址转换函数 4.13TCP通信流程 4.14socket函数

文章目录 4.11 socket地址通用 socket地址专用 socket地址 4.12 IP地址转换函数(字符串ip -> 整数)4.13TCP通信流程4.14socket函数 4.11 socket地址 socket地址其实是一个结构体,封装端口号和IP等信息。后面的socket相关的api中需要使用到…

OceanBase X Flink 基于原生分布式数据库构建实时计算解决方案

摘要:本文整理自 OceanBase 架构师周跃跃,在 Flink Forward Asia 2022 实时湖仓专场的分享。本篇内容主要分为四个部分: 分布式数据库 OceanBase 关键技术解读 生态对接以及典型应用场景 OceanBase X Flink 在游戏行业实践 未来展望 点击…

postman官网下载安装登录详细教程

目录 一、介绍 二、官网下载 三、安装 四、注册登录postman账号(不注册也可以) postman注册登录和不注册登录的使用区别 五、关于汉化的说明 一、介绍 简单来说:是一款前后端都用来测试接口的工具。 展开来说:Postman 是一个…

STL文件格式详解【3D】

STL(StereoLithography:立体光刻)文件是 3 维表面几何形状的三角形表示。 表面被逻辑地细分或分解为一系列小三角形(面)。 每个面由垂直方向和代表三角形顶点(角)的三个点来描述。 切片算法使用…

黑马头条项目学习--Day3: 自媒体文章发布

Day3: 自媒体文章发布 Day3: 自媒体文章发布1) 素材管理-图片上传a) 前期微服务搭建b) 具体实现 2) 素材管理-图片列表a) 接口定义b) 具体实现 3) 素材管理-照片删除/收藏a) 图片删除a1) 接口定义a2) 代码实现 b) 收藏与取消b1) 接口定义b2) 代码实现 4) 文章管理-频道列表查询…

Qt 文件对话框使用 Deepin风格

当你在Deepin或UOS 上开发 Qt 程序时,如果涉及到文件对话框功能,那么就会遇到调用原生窗口的问题。 如果你使用的是官方的Qt版本,那么在Deepin或者UOS系统上,弹出的文件对话框会是如下这样: 而Deepin或UOS系统提供的默…