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

如果要参考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并安装

工具配置

Manage Jenkins --> Tools

  • 配置本地JDK

  • Git自动安装即可

  • 配置Maven

记得最后要保存

系统配置

Manage Jenkins --> System

  • 全局属性

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

  • Publish over SSH

    这个工具需要前面安装好Publish Over SSH插件

同样记得最后要保存

Credentials配置

Manage Jenkins --> Credentials

  • 配置gitee的账号密码

Pipline任务配置

新建任务 New Item,任务类型为pipline

触发方式

这里使用Generic Webhook Trigger方式

流水线

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

  • 顶层pipeline

    pipeline {

    }

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

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

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

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

复制代码
/usr/local/maven/bin/mvn clean install -Dmaven.test.skip=true

还有一个需要使用到Publish over SSH,这个也可以使用模板生成脚本

注意命令会在上传完成之后执行,如果想要在上传完成之前执行命令,需要配两个Transfer Sets

  • 完整的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

配置没问题的话就可以在gitee中看到webhook请求历史

jenkins中也能看到pipline的执行视图

相关推荐
忆~遂愿25 分钟前
CANN metadef 核心解析:计算图原型定义、算子元数据抽象与异构系统互操作机制
docker·容器
说实话起个名字真难啊1 小时前
用docker来安装openclaw
docker·ai·容器
恬静的小魔龙2 小时前
【群晖Nas】群晖Nas中实现SVN Server功能、Docker/ContainerManager等
docker·svn·容器
Zfox_2 小时前
CANN Catlass 算子模板库深度解析:高性能 GEMM 融合计算、Cube Unit Tiling 机制与编程范式实践
docker·云原生·容器·eureka
人间打气筒(Ada)3 小时前
jenkins基于Pipeline发布项目
java·pipeline·jenkins·流水线·ci·cd·cicd
春日见3 小时前
如何创建一个PR
运维·开发语言·windows·git·docker·容器
DARLING Zero two♡3 小时前
告别 Docker 命令行!Portainer+cpolar 让容器管理从局域网走向公网
运维·docker·容器
liu****4 小时前
2.深入浅出理解虚拟化与容器化(含Docker实操全解析)
运维·c++·docker·容器·虚拟化技术
logocode_li5 小时前
OCI/CRI 双标准下:从 dockerd 到 containerd 的 K8s 运行时迭代史
docker·云原生·容器·k8s
_运维那些事儿17 小时前
VM环境的CI/CD
linux·运维·网络·阿里云·ci/cd·docker·云计算