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

文章目录

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

在这里插入图片描述

maven 项目的编译构建可以用这个

mvn clean install

在这里插入图片描述

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/目录即可 要注意 jdk 目录是否正确 和 jar包所在的目录 所在目录是否正确

#!/bin/bash
JVM_OPEION='-Xms246m -Xmx246m'
JAR_PID='无效'
# jar包所在的目录
JAR_HOME='/opt/zqh/'
# JDK的目录
JAVA_HOME='/usr/local/btjdk/jdk8/bin/java'
JAR_ACTIVE='prod'
# 检查次数
EXAMINE_TIME=50
#使用说明,用来提示输入参数
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 后是这样的

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值