为女朋友写一个小程序(六)— —结合docker实现devOps

版权声明:本文为博主思考总结而得,只做抛砖引玉,欢迎大家转载指导 https://blog.csdn.net/hayre/article/details/87686845

为女朋友写一个小程序(一)— —目的与需求
为女朋友写一个小程序(二)— —数据库设计
为女朋友写一个小程序(三)— —基于springboot的服务器端接口设计与实现
为女朋友写一个小程序(四)— —前端小程序的设计与实现
为女朋友写一个小程序(五)— —如何用docker简化部署
为女朋友写一个小程序(六)— —结合docker实现devOps(本文)
为女朋友写一个小程序(七)— —优化引进redis(未编码,未写)
为女朋友写一个小程序(八)— —基于moongodb实现即时通讯(未编码,未写)

最近几篇文章又得到一些朋友的认可,感谢大家,大家的点赞与评论都是我持续努力的东西呀~,可惜明天又要出差了

一、什么是devOps

DevOps: Development和Operations的组合。用我的话来说就是开发与部署可以实现一条龙服务。程序员在开发完了之后直接提交代码至版本控制器(GIT,SVN),然后可以一键完成代码审核、单元测试、编译打包、自动化创建虚拟机(部署机器)、自动完成部署部署、对环境进行监控、反馈、能对现有环境实现自动化运维的整一套流程。

其核心体现在于自动化,免去了传统的开发-打包-部署等一系列的人工干涉环节,是为了更好的CI和CD,将强开发与部署之间的联系。当然啦,DevOps不仅仅只是如此,真正的DevOps还涵盖很多关于软件工程层面的东西,背书可自行百度。

而本小程序的DevOps其实主要体现在于CI/CD,因为是小程序来的嘛,所以只是使用简单的模型探索、了解DevOps方面的知识,取个高大上的名字。

二、为什么要devOps

刚刚有提及CI/CD的概念,如果你玩过docker、Jenkins,那么你应该听过CI/CD。

不知道你开始玩微信小程序开发了没,小程序IDE很好的体现了CI/CD。当你完成代码的开发之后,你可以直接在线调试,调试完了之后一键提交审核(其实这里就是腾讯拉取你的小程序前端代码进行部署),审核通过后就可以在微信平台中使用小程序啦,这里就是一个很好的一个CI/CD的过程。那么:

CI:代码持续集成,因为需求的不断变动触发持续的编码、构建流程。

CD:持续部署,因为代码改变,自动化的构建、测试和部署循环来快速交付高质量的产品。

而DevOps是为了更好的执行CI/CD。所以我们使用DevOps理论可以让我们的软件产品更快的完成一次迭代,快速的交付给用户。(当然DevOps还是不仅仅如此,如上所述它更体现在对于生产环境的运维等等等)

对于该小程序来说,是为了更快的对小程序的服务器端程序进行迭代。原因很简单,就像上次的一篇文章提及到的一样。简而言之就是懒,开发慢、打包慢、部署慢,所以迭代慢,实现DevOps就是为了快起来。

三、简单的devOps是怎么实现的

不知道你是否已经看完了我上次的一篇文章,这次的小程序DevOps实现也是根据这个思路实现的,因为小程序是基于docker部署的,所以把一些的动作切换成了对于docker的操作。

1、CI的实现
代码持续集成,提及到这,一定要思考一个问题,如何集成?回顾之前人工操作的过程:

修改代码->maven打包->上传包到服务器

针对这个过程,我们可以这样设计:

借助Git来做中间的枢纽,过程是修改代码,代码上传至Git,服务器再拉取最新代码,在服务器上面使用maven进行打包,利用脚本完成这一系列动作,过程演化如下:

修改代码->上传至Git->在服务器启动脚本->服务器自动拉取最新代码并使用maven打包

好了,有了方案,那便需要在服务器上预装好Git和maven
在这里插入图片描述
这里Git用了源码安装,并事先在服务器本地建立起git仓库,并配置好git远程仓库权限(这里就不详细说了,百度一大把)

主要提一下这里的maven,我也是使用了docker镜像,主要是充当了一个执行环境,也是为了尝鲜,关于docker的东西可以参考上一篇文章
在这里插入图片描述
这里也给一下maven镜像的启动脚本让大家参考参考

#!/bin/bash
docker run  --rm --name target-maven -v /apps/software:/apps/software   -w /apps/software/git-respository/kiki-target maven:3.5-jdk-8  mvn -s /apps/software/maven/conf/settings.xml  -Ppro  clean install appassembler:generate-daemons -e -Dmaven.test.skip=true

脚本里面已经写好了对源码编译的方法,只要执行这个脚本,就可以立刻启动一个maven docker镜像并对源码进行打包。

2、CD的实现
持续部署对该小程序来说并不存在很大的问题,因为服务器端使用的是wrapper maven插件进行 打包的,具体可以参考这一篇,我只需要成功打包出部署包,就可以立刻使用java docker镜像进行启动,不需要依赖其他的东西(如 tomcat)。所以结合上一步的过程,我设计出了脚本如下:

#! /bin/bash
#日志文件夹
logsPath=/apps/service/deploy/logs
#源码文件夹
srcPath=/apps/software/git-respository/kiki-target/target/generated-resources/appassembler/jsw
#程序包部署文件夹
deployPath=/apps/service/
#maven文件夹
mavenPath=/apps/software/maven 
#日志
function log(){
        logPath=$logsPath/deploy.`date +%Y-%m-%d`.log
        if [ ! -d $logsPath  ]; then
                mkdir -p $logsPath
        fi
        if [ ! -d $logPath ];then
                touch $logPath
        fi
        echo [`date +%Y-%m-%d\ %H:%M:%S`] $* >> $logPath;
}
#拉取源码
log 'pull src from github'
cd $srcPath
gitLog=`git pull kiki-target master  2>&1`
if [ $? -ne 0  ];
then 
	log $gitLog
	exit $?
fi
echo "$gitLog" | while read line
do 
	log $line
done
#使用maven打包
log 'maven is building'
mavenLog=`$mavenPath/docker/run.sh 2>&1`
if [ $? -ne 0  ];
then 
        log $mavenLog
        exit $?
fi
echo "$mavenLog" | while read line
do 
        log $line
done
#停旧服务
log 'stop  service'
cd /
javaLog=`docker exec target-java ./kiki-target/bin/kiki-target stop 2>&1`
log $javaLog
log 'delete old deploy data'
#干掉旧包
rm $deployPath/kiki-target -rf
log 'copy service to deploy path'
#部署新包
cp -r  $srcPath/kiki-target $deployPath/
log 'chmod'
cd $deployPath/kiki-target/bin
chmod +x *
log 'start service'
javaLog=`docker exec target-java ./kiki-target/bin/kiki-target start 2>&1`
log $javaLog

今天元宵节哦,祝您元宵节快乐
如果对您有帮助,希望给我一分鼓励~愿你我皆不忘初心!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hayre/article/details/87686845