使用Coding对java项目进行自动化的部署 (亲测有用)

news2024/9/29 17:31:34

Coding是啥嘞?看看百度百科把
https://baike.baidu.com/item/coding/8921246?fr=aladdin

普通部署和自动化部署比较
普通部署:打jar包->将jar包上传到服务器->执行java -jar命令,好像也不是很麻烦…

coding自动化部署:提交代码->触发构建,开始自动化部署,是不是非常的方便快捷

这里演示的是 把 springboot 项目自动部署到 宝塔服务器上

Coding自动化部署

1.首先,创建一个项目:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

然后点击完成创建

点击这里把 项目上传过来

在这里插入图片描述
选择第一个模板即可。

创建成功后,随便建一个Spring Boot项目,上传到该项目的代码仓库。

2. 开始配置构建

2.1 点击持续集成在这里插入图片描述

2.2 点击创建构建计划

在这里插入图片描述

2.3 选择 java 这个

在这里插入图片描述

2.5 下面 按照我圈的来 配置

在这里插入图片描述

2.6 这几个 如果没有新建 即可 这里 不用 docker

在这里插入图片描述

2.7 这个要新建的

在这里插入图片描述

在这里插入图片描述

写服务器地址 启用部署到远程服务器

在这里插入图片描述

新建ssh 登陆凭证 很重要

在这里插入图片描述
在这里插入图片描述

SSH 私钥*获取 方法 这里演示的是宝塔服务器 其他也差不多

在宝塔 终端 输入 ssh-keygen -m PEM -t rsa 点击回车

在这里插入图片描述

SSH 私钥* 在 这个文件里面 把这个 SSH 私钥* 放到 这里保存

/root/.ssh/id_rsa.

在这里插入图片描述

还有 ssh 公钥 要在 宝塔 配置 公钥 在这个文件里面

/root/.ssh/id_rsa.pub.

将生成的公钥(id_rsa.pub.)的内容 复制 后 放入(被访问)服务器 root/.ssh/authorized_keys 粘贴放入此文件之后 ,表示授权;其他服务器可以通过私钥访问此服务器 没有该文件或文件夹就创建一个;

在这里插入图片描述

建议 这里 直接授权 点击确认

在这里插入图片描述

创建后 复制这个 凭证id 保存起来 下面要用

在这里插入图片描述

记得 选择自己创建的代码 仓库

在这里插入图片描述

这里 点击确认

在这里插入图片描述

点击确定后会跳转到流程配置,点击文本编辑器,用下面这段内容覆盖原本的内容:

需要覆盖的就是这里的内容

在这里插入图片描述

把下面这个代码 覆盖到 上面 图片 里面

pipeline {
  agent any
  stages {
    stage('检出') {
      steps {
        checkout([
          $class: 'GitSCM',
          branches: [[name: env.GIT_BUILD_REF]],
          userRemoteConfigs: [[
            url: env.GIT_REPO_URL,
            credentialsId: env.CREDENTIALS_ID
          ]]])
        }
      }
      stage('构建${packageType}') {
        steps {
          echo '构建中...'
          sh 'mvn clean package -Ptest -DskipTests'
          echo '构建完成.'
        }
      }
      stage('收集构建物') {
        steps {
          archiveArtifacts 'target/*.jar'
        }
      }
      stage('部署到服务器') {
        steps {
          script {
            def remote = [:]
            remote.name = 'zqh'
            remote.host = '自己服务器ip地址'
            remote.user = 'root'
            remote.allowAnyHosts = true
            withCredentials([sshUserPrivateKey(credentialsId: "刚才复制的凭据id", keyFileVariable: 'id_rsa')]) {
              remote.identityFile = id_rsa
              stage("推送文件到远程服务器") {
                sshPut remote: remote, from: 'target/jshERP.jar', into: '/coding/zqh/'
              }
              stage("重启服务") {
                $result = sshCommand remote: remote, command: 'sh /coding/zqh/spring-start.sh restart /coding/zqh/jshERP.jar 7003'
                if($result.indexOf("jar包启动超时-1") > -1){
                  echo 'jar包启动超时-1'
                  set -e
                }
              }
            }
          }

        }
      }
    }
  }

上面代码有要修改的 地方 和注意事项

1. 确保 宝塔 服务器 有这两个文件夹 /coding/zqh 都是需要新建的 新建完成 要授权 不然 jar 上传不了 会报错

在这里插入图片描述

授权

在这里插入图片描述

2. 填入自己的服务器ip

3.一个是填入凭据id,刚才创建构建计划的时候已经帮我们自动创建了一个,只需去复制凭据id即可(下方图片是凭据id的位置):

在这里插入图片描述
在这里插入图片描述

到此配置就结束了。

3. 一定要配置

需要一个spring-start.sh的脚本,将该脚本复制到服务器的/coding/zqh/目录即可 (这里我可能要改下 )

#!/bin/bash
JVM_OPEION='-Xms246m -Xmx246m'
JAR_PID='无效'
# jar包所在的目录
JAR_HOME='/opt/zqh/'
# JDK的目录
JAVA_HOME='/usr/java/jdk1.8.0_271/bin/java'
JAR_ACTIVE='prod'
# 检查次数
EXAMINE_TIME=13
#使用说明,用来提示输入参数
usage() {
  echo "Usage: sh spring-startup.sh [start|stop|restart|status]"
  exit 1
}

#检查程序是否在运行
is_exist() {
  orderStr="ps -ef | grep $1 | grep -v "\$0" | grep -v "grep" | awk '{print \$2}'"
  echo "检查命令: $orderStr"
  pid=$(eval $orderStr)
  #如果存在返回1,不存在返回0
  if [ -n "${pid}" ]; then
    JAR_PID=$pid
    echo "pid=${pid}"
    echo "JAR_PID=${JAR_PID}"
    return 1
  else
    return 0
  fi
}

#启动方法
start() {
  is_exist $1
  if [ $? -eq "1" ]; then
    echo "$1 is already running. pid=${JAR_PID} ."
  else
    echo "--------$1 开始启动--------"
    jarname=$1
    filename=${jarname##*/}
    name=${filename%.*}
    logName=${name%_*}_$2.log
    javaShellStr="nohup $JAVA_HOME -jar $1 --spring.profiles.active=$JAR_ACTIVE --server.port=$2 >/opt/api-server/logs/$logName 2>&1 &"
    echo "启动命令: $javaShellStr"
    eval $javaShellStr
    # 检查端口
    portStr="lsof -i:$2 | grep "LISTEN" | awk '{print \$2}'"
    echo "端口检查:$portStr"
    jarPort=$(eval $portStr)
    # 计时器
    stime=0
    # 判断端口是否为0,次数是否小于7
    until [[ -n "$jarPort" ]]; do
      sleep 3s
      tail -n 5 $JAR_HOME/logs/$logName
      stime=$((stime + 1))
      jarPort=$(eval $portStr)
      echo "启动检查第$stime次"
      # 超时判断 大于13,打印 -1 结束当前操作
      if [ $stime -ge $EXAMINE_TIME ]; then break; fi
    done
    if [ $stime -ge $EXAMINE_TIME ]; then
      echo "jar包启动超时-1"
      exit; fi
    echo "$1 start success"
  fi
}

#停止方法
stopPort() {
  portStr="netstat -nlp | grep :$1 | awk '{print \$7}' | awk -F\"/\" '{ print \$1 }'"
  echo "启动命令: $portStr"
  JAR_PID=$(eval $portStr)
  if [ -n "$JAR_PID" ]; then
    kill -9 $JAR_PID
    JAR_PID=$(eval $portStr)
    if [ -n "$JAR_PID" ]; then
      echo "$1 is running. Pid is ${JAR_PID}"
    else
      echo "$1 is stop."
    fi
  else
    echo "$1 is not running"
  fi
}

#停止方法
stop() {
  is_exist $1
  if [ $? -eq "1" ]; then
    while [[ -n "$JAR_PID" && "$JAR_PID" -ne "0" ]]; do
      echo "$1 is already running. pid=${JAR_PID} ."
      kill -9 $JAR_PID
      sleep 1s
      is_exist $1
      JAR_PID=$?
    done
    echo "$1 is kill"
  else
    echo "$1 is not running"
  fi
}

#输出运行状态
status() {
  is_exist $1
  if [ $? -eq "1" ]; then
    echo "$1 is running. Pid is ${JAR_PID}"
  else
    echo "$1 is NOT running."
  fi
}

#重启
restart() {
  stop $1
  start $1 $2
}

#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
  start $2 $3
  ;;
"stop")
  stop $2
  ;;
"status")
  status $2
  ;;
"restart")
  restart $2 $3
  ;;
*)
  usage
  ;;
esac


4. 下面要设置 推送代码自动构建

接下来,我们只需在idea里随意改动代码的一个地方,将改动推到我们的代码仓库就会自动触发构建,我们不需要做任何事情就能完成自动化的部署。

在这里插入图片描述
在这里插入图片描述

可以手动构建

在这里插入图片描述

另外 每次构建时间太长 就需要设置一个 变量与缓存

在这里插入图片描述
在这里插入图片描述

勾选这两个 下次启动会更快

在这里插入图片描述

到这里就结束了

上传 jar 后是这样的

在这里插入图片描述

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

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

相关文章

bh004- Blazor hybrid / Maui 使用 BootstrapBlazor UI 库快速教程

1. 建立工程 bh004_BootstrapBlazorUI 源码 2. 添加 nuget 包 <PackageReference Include"BootstrapBlazor" Version"7.*" /> <PackageReference Include"BootstrapBlazor.FontAwesome" Version"7.*" />3. 添加样式表文…

【实例分割】(二)Mask2Former

mask2former提出了一个统一的分割架构&#xff0c;能够在语义分割、实例分割、全景分割上取得sota的结果&#xff0c;在coco数据集上&#xff0c;全景分割57.8PQ、实例分割50.1AP、语义分割在ADE20K达57.7miou。 目录 1.&#x1f353;&#x1f353; 网络总体结构 2.&#x…

Android GreenDao数据库升级(附Demo)

前言 大家好久不见&#xff0c;一转眼马上八月份下旬了&#xff0c;最近由于工作比较忙&#xff0c;没时间给大家更新博文。百忙之中抽出时间&#xff0c;给大家来更新一篇关于GreenDao3数据库的升级。 关于GreenDao的详细介绍以及一些逻辑性的增、删、改、查等&#xff0c;可以…

Maven的超级POM

对于我们创建的一个maven工程&#xff0c;即便我们自己的pom.xm文件中没有明确指定一个父工程&#xff08;父POM&#xff09;&#xff0c;其实也默认继承了超级POM&#xff0c;就好比JAVA类继承Object类一样。 maven官网关于超级POM的介绍&#xff1a; https://maven.apache.o…

Tomcat10安装及配置教程win11

Tomcat10安装及配置教程win11 Tomcat下载链接 Tomcat官网 Tomcat官网地址 https://tomcat.apache.org/ Tomcat的版本列表 点击上图中左侧红框内**Which version?**即可得下图 下载Tomcat 点击上图中左侧红框内红框内tomcat版本即可得下图&#xff0c;下载zip包 解压zip包…

dnsmasq-dhcp DHCPDISCOVER “no address available“ 问题解决方法

问题现象 在Centos7.5系统中已安装dnsmasq组件并开启DHCP服务功能&#xff0c;然而客户端无法通过DHCP的方式获取IP&#xff0c;通过查看系统日志/var/log/messages发现日志中存在以下两个关键信息&#xff1a; dnsmasq-dhcp DHCPDISCOVER “no address available”DHCPNAK 1…

docker 内apt-get安装软件都不好使

报各种错误 apt-get install --no-install-recommends libboost-all-dev Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed:autoconf automake autotools-dev cpp-8 gc…

CRC循环冗余码计算

计算步骤 计算冗余位的位数&#xff0c;即生成多项式的最高阶数 在信息位后补冗余位个数的0 将第二步的结果与生成多项式相除&#xff0c;这里采用的除法叫做模2除法&#xff0c;就是只要部分余数的高位为1&#xff0c;便可商1 之后上下做的减法是异或。 经过第三步不断地计…

【分布式共识】Raft算法 成员变更

对于一个分布式系统&#xff0c;一般都是有多个节点组成集群&#xff0c;比如原理有3个节点&#xff0c;需要增加一个&#xff0c;那么raft这个时候如何保证ledaer的唯一性。 当增加两个节点的时候&#xff0c;就可能造成出现两个分区。从而打破原有的领导者的唯一性。影响集群…

STC12红外接收与NEC解码

文章目录 一、红外通信简介二、红外遥控组成三、NEC协议简介四、红外接收与NEC解码例程五、参考资料 一、红外通信简介 红外通信是一种无线通信技术&#xff0c;利用红外光传输信息。红外光波长介于可见光和微波之间&#xff0c;通常在780纳米至1毫米的范围内。红外通信在许多…

python爬虫10:selenium库

python爬虫10&#xff1a;selenium库 前言 ​ python实现网络爬虫非常简单&#xff0c;只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点&#xff0c;方便以后复习。 申明 ​ 本系列所涉及的代码仅用于个人研究与讨论&#xff0c;并不会对网站产…

一文详解:安防监控视频AI智能分析平台区域入侵/周界报警

区域入侵/周界报警入侵检测技术是TSINGSEE青犀智能分析平台推出的一种视频监控系统&#xff0c;可检测划定区域内是否有可疑人员并且在检测出这样的事件时生成警报。 视频监控/安防监控/视频存储TSINGSEE青犀视频智能分析平台可以在监控范围内划定特定区域&#xff0c;有人员入…

业务系统架构实践总结

我从2015年起至今2022年&#xff0c;在业务平台&#xff08;结算、订购、资金&#xff09;、集团财务平台&#xff08;应收应付、账务核算、财资、财务分析、预算&#xff09;、本地生活财务平台&#xff08;发票、结算、预算、核算、稽核&#xff09;所经历的业务系统研发实践…

记录解决IOS滚动跳转不生效问题

目录 背景 &#xff1a; 解决过程 &#xff1a; 解决方案 &#xff1a; 最终代码 &#xff1a; 背景 &#xff1a; 项目类似于问卷星里面的问卷调查&#xff0c;当你点击提交按钮时&#xff0c; 页面会有弹窗提醒你有哪些题型没回答&#xff0c;点击确认之后&#xff0c; 页…

C++学习-特殊的6个函数

设计一个Per类&#xff0c;类中包含私有成员&#xff1a;姓名&#xff0c;年龄&#xff0c;指针成员身高&#xff0c;体重&#xff0c;在设计一个stu类&#xff0c;类中包含私有成员&#xff1a;成绩&#xff0c;Per类对象p1,设计这两类的构造函数&#xff0c;析构函数和拷贝函…

2000-2020年全国各地级市资本存量测算数据(以2000年为基期)(含原始数据和测算过程)

2000-2020年全国各地级市资本存量测算数据&#xff08;以2000年为基期&#xff09;&#xff08;含原始数据和测算过程&#xff09; 1、时间&#xff1a;2000-2020年 2、来源&#xff1a;整理自城市统计年鉴、省份统计年鉴以及各市的公报 3、指标&#xff1a;固定资产投资总额…

DevOps团队如何提高Kubernetes性能

今天&#xff0c;Kubernetes仍然是开发人员最需要的容器。Kubernets最初由 Google 工程师开发&#xff0c;作为跨本地、公共云、私有云或混合云托管的首选解决方案享誉全球。 来自Statista的报告显示&#xff0c;公共云中的Kubernetes市场份额在过去一年中上升了近30%。并且在…

Pandas数据清洗和常用函数

数据清洗 数据清洗是对一些没用的数据进行处理的过程。 当数据出现确实、数据格式错误、错误数据或重复数据的情况&#xff0c;如果我们想要分析的更加准确&#xff0c;就要对没用的数据进行处理。 此时我们学习采用菜鸟教程的数据作为案例&#xff0c;如下图所示。 在途中包…

IDEA常用插件之依赖关系查看Maven Helper

文章目录 安装使用 安装 使用 安装完成后点击pom.xml文件&#xff0c;可以查看Maven依赖关系

Linux下jenkins全量迁移到新服务器

文章目录 1、目的2、迁移1&#xff09;查看jenkins的主目录2&#xff09;登录要迁出的服务器打包3&#xff09;找到对应的war包4&#xff09;登录对应迁入服务&#xff0c;上传war包和打包的jenkins数据等5&#xff09;在新的服务器解压迁入的数据等&#xff0c;并查看端口是否…