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

文章目录

    • 这里演示的是 把 springboot 项目自动部署到 宝塔服务器上
    • Coding自动化部署
    • 1.首先,创建一个项目:
    • *然后点击完成创建*
    • 点击这里把 项目上传过来
    • 2. 开始配置构建
      • 2.1 点击持续集成![在这里插入图片描述](https://img-blog.csdnimg.cn/9e9d9baeeac34728a89af974b1464aaf.png)
    • 2.2 点击创建构建计划
    • 2.3 选择 java 这个
    • 2.5 下面 按照我圈的来 配置
    • 2.6 这几个 如果没有新建 即可 这里 不用 docker
    • 2.7 这个要新建的
    • 写服务器地址 启用部署到远程服务器
    • 新建ssh 登陆凭证 很重要
    • SSH 私钥*获取 方法 这里演示的是宝塔服务器 其他也差不多
    • 在宝塔 终端 输入 ssh-keygen -m PEM -t rsa 点击回车
    • SSH 私钥* 在 这个文件里面 把这个 SSH 私钥* 放到 这里保存
    • 还有 ssh 公钥 要在 宝塔 配置 公钥 在这个文件里面
    • 将生成的公钥(id_rsa.pub.)的内容 复制 后 放入(被访问)服务器 root/.ssh/authorized_keys 粘贴放入此文件之后 ,表示授权;其他服务器可以通过私钥访问此服务器 没有该文件或文件夹就创建一个;
    • 建议 这里 直接授权 点击确认
    • 创建后 复制这个 凭证id 保存起来 下面要用
    • 记得 选择自己创建的代码 仓库
    • 这里 点击确认
  • 点击确定后会跳转到流程配置,点击文本编辑器,用下面这段内容覆盖原本的内容:
  • 需要覆盖的就是这里的内容
    • 把下面这个代码 覆盖到 上面 图片 里面
    • 上面代码有要修改的 地方 和注意事项
    • 1. 确保 宝塔 服务器 有这两个文件夹 /coding/zqh 都是需要新建的 新建完成 要授权 不然 jar 上传不了 会报错
  • 授权
    • 2. 填入自己的服务器ip
    • 3.一个是填入凭据id,刚才创建构建计划的时候已经帮我们自动创建了一个,只需去复制凭据id即可(下方图片是凭据id的位置):
    • 到此配置就结束了。
  • 3. 一定要配置
    • 需要一个spring-start.sh的脚本,将该脚本复制到服务器的/coding/zqh/目录即可 要注意 jdk 目录是否正确 和 jar包所在的目录 所在目录是否正确
  • 4. 下面要设置 推送代码自动构建
  • 接下来,我们只需在idea里随意改动代码的一个地方,将改动推到我们的代码仓库就会自动触发构建,我们不需要做任何事情就能完成自动化的部署。
    • 可以手动构建
  • 另外 每次构建时间太长 就需要设置一个 变量与缓存
    • 勾选这两个 下次启动会更快
  • 到这里就结束了
  • 上传 jar 后是这样的

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

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

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

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

Coding自动化部署

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

使用Coding对java项目进行自动化的部署 (亲测有用)_第1张图片
使用Coding对java项目进行自动化的部署 (亲测有用)_第2张图片
使用Coding对java项目进行自动化的部署 (亲测有用)_第3张图片
使用Coding对java项目进行自动化的部署 (亲测有用)_第4张图片
使用Coding对java项目进行自动化的部署 (亲测有用)_第5张图片
使用Coding对java项目进行自动化的部署 (亲测有用)_第6张图片

然后点击完成创建

点击这里把 项目上传过来

使用Coding对java项目进行自动化的部署 (亲测有用)_第7张图片
选择第一个模板即可。

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

2. 开始配置构建

2.1 点击持续集成使用Coding对java项目进行自动化的部署 (亲测有用)_第8张图片

2.2 点击创建构建计划

使用Coding对java项目进行自动化的部署 (亲测有用)_第9张图片

2.3 选择 java 这个

使用Coding对java项目进行自动化的部署 (亲测有用)_第10张图片

2.5 下面 按照我圈的来 配置

使用Coding对java项目进行自动化的部署 (亲测有用)_第11张图片

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

使用Coding对java项目进行自动化的部署 (亲测有用)_第12张图片

2.7 这个要新建的

使用Coding对java项目进行自动化的部署 (亲测有用)_第13张图片

使用Coding对java项目进行自动化的部署 (亲测有用)_第14张图片

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

使用Coding对java项目进行自动化的部署 (亲测有用)_第15张图片

新建ssh 登陆凭证 很重要

使用Coding对java项目进行自动化的部署 (亲测有用)_第16张图片
使用Coding对java项目进行自动化的部署 (亲测有用)_第17张图片

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

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

使用Coding对java项目进行自动化的部署 (亲测有用)_第18张图片

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

/root/.ssh/id_rsa.

使用Coding对java项目进行自动化的部署 (亲测有用)_第19张图片

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

/root/.ssh/id_rsa.pub.

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

使用Coding对java项目进行自动化的部署 (亲测有用)_第20张图片

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

使用Coding对java项目进行自动化的部署 (亲测有用)_第21张图片

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

使用Coding对java项目进行自动化的部署 (亲测有用)_第22张图片

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

使用Coding对java项目进行自动化的部署 (亲测有用)_第23张图片

这里 点击确认

使用Coding对java项目进行自动化的部署 (亲测有用)_第24张图片

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

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

使用Coding对java项目进行自动化的部署 (亲测有用)_第25张图片

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

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 上传不了 会报错

使用Coding对java项目进行自动化的部署 (亲测有用)_第26张图片

授权

使用Coding对java项目进行自动化的部署 (亲测有用)_第27张图片

2. 填入自己的服务器ip

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

使用Coding对java项目进行自动化的部署 (亲测有用)_第28张图片
使用Coding对java项目进行自动化的部署 (亲测有用)_第29张图片

到此配置就结束了。

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里随意改动代码的一个地方,将改动推到我们的代码仓库就会自动触发构建,我们不需要做任何事情就能完成自动化的部署。

使用Coding对java项目进行自动化的部署 (亲测有用)_第30张图片
使用Coding对java项目进行自动化的部署 (亲测有用)_第31张图片

可以手动构建

使用Coding对java项目进行自动化的部署 (亲测有用)_第32张图片

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

使用Coding对java项目进行自动化的部署 (亲测有用)_第33张图片
使用Coding对java项目进行自动化的部署 (亲测有用)_第34张图片

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

使用Coding对java项目进行自动化的部署 (亲测有用)_第35张图片

到这里就结束了

上传 jar 后是这样的

使用Coding对java项目进行自动化的部署 (亲测有用)_第36张图片

你可能感兴趣的:(Java开发,java,自动化,redis,coding)