Coding使用构建计划,实现局域网Linux中docker的自动部署

Posted 18岁的许嵩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Coding使用构建计划,实现局域网Linux中docker的自动部署相关的知识,希望对你有一定的参考价值。


前言

在项目测试阶段,我们经常要部署测试环境。第一步先拉去测试分支的最新代码;第二步mvn clean install打包jar/war包;第三步通过一些ftp工具传输到局域网的linux上,第四步拷贝进docker镜像;第五步java -jar启动jar包/启动tomcat等等…繁琐的过程,今天我们就来一键完成这个操作。使用Coding的构建计划,加上shell脚本来实现,自动拉代码;自动打包;自动传输;自动拷贝替换;自动执行重启脚本等一整套自动部署流程。


一、创建节点池节点/接入新节点

此步骤在coding说明文档里有,按文档操作即可,此处不做详细介绍。参考

接入新节点成功后,可以看到占用状态为闲置

二、创建构建计划

1.选择简易模板

2.选择对应的git仓库,点击确定即可

3.流程配置

直接进入第三步构建->执行Shell脚本,修改为项目所需要的脚本,我的项目是:

mvn clean
mvn package


然后是收集构建物,根据项目的架构而定,单应用部署的,收集一次构建物即可,找到对应的jar/war包即可。

多应用则添加一个收集构建物流程,同理配置一下即可。

到这里构建的配置已完成,接下来配置部署流程,直接查看执行Pipeline脚本

这里推荐使用文本编辑器配置,屏幕大一些

语法使用的是Jenkins,我这边的Linux是使用私钥登录的,需要提前把id_rsa配置为项目凭据。参考
可以把对应的一些服务器信息,配置到环境变量里

stage('部署') {
  steps {
    echo '部署中...'
    script {
      def remoteConfig = [:]
      remoteConfig.name = "ssh-server"
      remoteConfig.host = "${env.REMOTE_HOST}"
      remoteConfig.port = "${env.REMOTE_PORT}".toInteger()
      remoteConfig.user = "${env.REMOTE_USER_NAME}"
      remoteConfig.allowAnyHosts = true
      // Linux私钥登录
      withCredentials([sshUserPrivateKey(
        credentialsId: "${env.REMOTE_CRED}",
        keyFileVariable: "id_rsa"
      )]) {
        remoteConfig.identityFile = id_rsa
        sshPut(remote: remoteConfig, from: "/target/demo-server.jar", into: "/home")
        sshCommand(remote: remoteConfig, command: "/home/auto_server.sh")
      }
    }
    echo '部署完成'
  }
}

4.触发规则

指定对应的分支,一般使用手动触发,当然你可以根据需求选择。

5.Linux shell脚本 auto_server.sh

调用Linux的shell脚本,实现把jar包拷贝进docker镜像里,再调用docker镜像中的shell脚本。

#!/bin/sh
#docker name
DOCKER_NAME=test
#file dir
FILE_DIR=/home/demo-server.jar
#project dir
PROJECT_DIR=/usr/local

#get docker cid
CID=$(docker ps | grep "$DOCKER_NAME" | awk '{print $1}')
docker cp $FILE_DIR $CID:$PROJECT_DIR
docker exec -i $CID /bin/bash -c 'cd /usr/local && ./demo.sh restart'

6.docker镜像中 shell脚本 demo.sh

这里是spring boot打包后的jar包

#!/bin/sh
#post
POST=8080

#app_name
API_NAME=demo
#jar_name
JAR_NAME=$API_NAME\\.jar
#log_name
LOG_NAME=$API_NAME\\.log

#MetaspaceSize
METASPACE_SIZE=2048m
#MaxMetaspaceSize
MAXMETASPACE_SIZE=2048m
#SurvivorRatio
SURVIVOR_RATIO=8
#garbage collector
GARBAGE_COLLECTOR=UseConcMarkSweepGC
#Xms
XMS=2048m
#Xmx
XMX=2048m
#Xmn
XMN=512m
#Xss
XSS=512k

#java opts
JAVA_OPTS="-XX:MetaspaceSize=${METASPACE_SIZE} -XX:MaxMetaspaceSize=${MAXMETASPACE_SIZE} -XX:SurvivorRatio=${SURVIVOR_RATIO} -XX:+${GARBAGE_COLLECTOR} -Xms${XMS} -Xmx${XMX} -Xmn${XMN} -Xss${XSS} -Dfile.encoding=utf-8 -Dserver.servlet.contextPath= -Dserver.port=${POST} -Dspring.application.name=${API_NAME}"

#pid
PID=0
#is_exist
is_exist(){
  PID=`ps -ef|grep $JAR_NAME|grep -v grep|awk '{print $2}'`
  if [ -z "${PID}" ]; then
    return 1
  else
    return 0
  fi
}

#start
start() {
  is_exist
  if [ $? -eq "0" ]; then
    echo "${JAR_NAME} is already running PID=${PID}"
  else
    nohup /usr/bin/java $JAVA_OPTS -jar /usr/local/$JAR_NAME > $LOG_NAME 2>&1 &
    echo "[OK]"
  fi
}

#stop
stop() {
  is_exist
  kill $PID
  sleep 2
  is_exist
  if [ $? -eq "0" ]; then
    echo "${JAR_NAME} begin kill, PID=${PID}"
    kill -9 $PID
    sleep 2
    echo "${JAR_NAME} process stopped"
  else
    echo "${JAR_NAME} is not running"
  fi
}

#status
status() {
  is_exist
  if [ $? -eq "0" ]; then
    echo "${JAR_NAME} is running PID is ${PID}"
  else
    echo "${JAR_NAME} is not running"
  fi
}

#restart
restart(){
  stop
  start
}

case $1 in
  start)
   start
  ;;
  stop)
   stop
  ;;
  restart)
   $0 stop
   sleep 2
   $0 start
  ;;
  status)
    status
  ;;
  *)
   echo "Usage: {start|stop|restart|status}"
  ;;
esac
exit 0

三、立即构建



构建成功则已经完成自动部署!

总结

Coding服务器执行:拉去对应分支最新代码;
Coding客户端:执行构建流程(后端:mvn clean install,前端vue:npm i)、执行部署流程(连接上Linux服务器,把文件传输进去,且可以调用shell脚本)
Linux局域网服务器:编写shell脚本实现备份、替换jar/war包、启动jar包等等(前提是局域网是可以上网的)。

原创,禁止转载!

以上是关于Coding使用构建计划,实现局域网Linux中docker的自动部署的主要内容,如果未能解决你的问题,请参考以下文章

sql server 2008 如何实现数据库定时备份到局域网内另外一台服务器上

弹性配置为构建提速 - CODING & 腾讯云 CVM 最佳实践

每日一道Linux命令

构建分离解析的域名服务器,以及实现SNAT和DNAT 转换

linux下定时任务计划的使用

Linux与Windows小型组合实验——DHCP服务