这俩天应公司需求,查看了下云效这款工具,可以说真的很方便。简单配置后,能够自动部署项目到关联的服务器上。并且,在说创建的一个应用内,能够进行任务、需求、缺陷、迭代等等方面的任务分配。这些功能在此不作详细介绍,因为这些具备功能的网址很多,且操作类似简单。在这提到,是说明云效集成了这一系列的功能,可以简便的推动一个项目敏捷开发的进度。接下来,我们一起来看下他的“流水线”功能,能够自动帮我们将spring项目的打包好的jar或war部署到我们说关联的服务器上,是一个非常方便的功能。
首先,若要将项目+流水线结合,并自动部署,这里我们需要将项目上传到阿里自家的一个git仓储(在这里,上传git时用帐号密码好像并不成功,最后笔者通过ssh上传成功),https://code.aliyun.com/,上传成功后,我们回到云效,在导航栏中找到“项目”,并新建一个“项目”(免费的“项目”是有配额的),并且进入我们说创的“项目”,大致如图(当然,这其中省略了一步选择进入那个项目):
这里我们首先是没有应用才对,所以我们先“注册应用”:
这里的git库地址,当然就是我之前所上传的项目git地址啦,大家回到git仓储中找到填入即可。然后直接下一步:
这里选择“程序类型”后就会跳出来一些基本配置,笔者这里就不作改动,因为在后面的配置项里还会改动,并且这里也就不勾选docker,直接下一步:
在此输入一个应用名即可下一步,云效就会帮助我们生成一个应用。这时我们在回到应用列表,就能看到我们刚才注册的应用啦。
好了,在这里我们要回到我们个git项目,这时在项目中,会多出一个<应用名>.release的文件。我们更新本地项目,git pull一下后进行配置。我们打开.release文件,会发现里面有一些默认项,我们添加如下配置:
code.language=oracle-jdk1.9
build.tools.maven=maven3.2.5
build.output=target/elk-0.0.1-SNAPSHOT.jar
deploy.appctl.path=appctl.sh
在这里,我们配置声明jdk、maven版本,以及我们部署上服务器时运行的脚本(本次不作说明),其中build.output配置,是说明了在我们的spring项目中,将项目打包(mvn package后的包)后上传到服务器的路径,打包、上传过程在“流水线”过程中自动完成。但这里我们还需要在pom文件里配置打包
org.springframework.boot
spring-boot-maven-plugin
配置完成重新上传git。我们再回过头来看“流水线”,它会自动开始运行(期间,会要求配置“关联机器”,这时要求有一台服务器,虽然云效会配置1小时的服务器)。这里我们来提一下配置关联服务器:
区域可填可不填,直接点“生成命令”。将命令复制过来,在我们的服务器上,以root权限运行。过后就能在列表中看到我们的主机实例了。若“流水线”过程中要求关联机器,到时只要简单勾选即可。
还有一个需要注意的点,在我们“流水线”运行过程中,会出现报错找不到脚本而导致运行失败。这里就需要我们在项目中创建一个脚本:appctl.sh。并编辑它的内容:
#!/bin/bash
PID=`ps -ef | grep /home/admin/package-exploded/elk-0.0.1-SNAPSHOT.jar | grep -v grep | awk '{ print $2 }'`
echo 'aa' > /home/admin/package-exploded/a.txt
if [ -z "${PID}" ];
then
echo Application is already stopped
echo starting
java -jar /home/admin/package-exploded/elk-0.0.1-SNAPSHOT.jar > /home/admin/package-exploded/log.file 2>&1 &
else
echo kill ${PID}
kill ${PID}
java -jar /home/admin/package-exploded/elk-0.0.1-SNAPSHOT.jar > /home/admin/package-exploded/log.file 2>&1 &
fi
注意,/home/admin/package-exploded/elk-0.0.1-SNAPSHOT.jar是我们在服务器上jar包的绝对路径
之后,在我们云效的应用->环境->部署配置 如下配置:
图中配置如下:
/home/admin/package.tgz
/home/admin/package-exploded
if [ -f "/home/admin/package-exploded/appctl.sh" ]; then /home/admin/package-exploded/appctl.sh stop; fi
/home/admin/package-exploded/appctl.sh start
admin
到这里,我们就能看到整个流水线自动完成部署了,每一次项目更新,将代码push到master分支,流水线就会自动运行部署哦。是不是非常方便呢!
那么项目在哪里呢,通常在我们服务器的/home/admin/目录下。
那么,到这里为止。项目上传阿里的git,流水线自动的运行及部署,以及通过脚本重启jar包一条线在云效上自动完成啦。
想对于传统的做法,我们是先上传github中,再上到服务器上pull,通过命令重启,非常的麻烦。而通过流水线,则云效自动帮我们完成了这一系列的工作,是不是非常的方便呢~