IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 使用Coding对项目进行自动化的部署 -> 正文阅读

[系统运维]使用Coding对项目进行自动化的部署

Coding是啥嘞?看看百度百科把

https://baike.baidu.com/item/coding/8921246?fr=aladdin

普通部署和自动化部署比较

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

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

Coding自动化部署

首先,创建一个项目:

请添加图片描述

选择第一个模板即可。

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

创建构建计划

选择“构建计划”->“创建构建计划”->Java + Spirng + Docker模板

请添加图片描述

请添加图片描述

点击选择凭据->录入新凭据并授权:

请添加图片描述

将这段SSH密钥添加到服务器/root/.ssh/authorized_keys文件中,没有该文件或文件夹就创建一个;点击确定后会跳转到流程配置,点击文本编辑器,用下面这段内容覆盖原本的内容:

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/myblog-4.0.0-SNAPSHOT.jar', into: '/opt/zqh/'
              }
              stage("重启服务") {
                $result = sshCommand remote: remote, command: 'sh /opt/zqh/spring-start.sh restart /opt/zqh/myblog-4.0.0-SNAPSHOT.jar 8080'
                if($result.indexOf("jar包启动超时-1") > -1){
                  echo 'jar包启动超时-1'
                  set -e
                }
              }
            }
          }

        }
      }
    }
  }

上方的配置有3个需要注意的地方:

  1. 填入自己的服务器ip

  2. 需要一个spring-start.sh的脚本,将该脚本复制到服务器的/opt/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
    
    
  3. 一个是填入凭据id,刚才创建构建计划的时候已经帮我们自动创建了一个,只需去复制凭据id即可(下方图片是凭据id的位置):

左下方的项目设置–>开发者选项–>凭据管理

请添加图片描述

请添加图片描述

到此配置就结束了。

推送代码自动构建

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

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-19 12:28:08  更:2021-08-19 12:30:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 9:59:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码