Alibaba Cloud Toolkit一键上云神器

在中小公司中,有一个痛点,项目开发完毕需要部署到服务器上,传统的做法比较麻烦,而且修改完代码后又要重新打包上传,做这些重复性的工作需要消耗大量的时间,而部署自动化的CI工具,则成本具大,需要很高的服务器配置,会让老板多花钱,而且,本来公司就小,人员紧张,再专门抽人手去做CI的部署,那更是不划算了。有没有一种便捷的方式能省钱、省时、省力地区完成上述部署操作呢,今天给大家介绍一款神器,编写完代码后,只需要点一个按钮,就会自动帮你完成后续的应用部署所有动作,这就是-Alibaba Cloud Toolkit一键上云神器。

一、产品功能

Alibaba Cloud Toolkit (后文简称 Cloud Toolkit)可以帮助开发者更高效地部署、测试、开发和诊断应用。Cloud Toolkit 与主流 IDE 及阿里云其他产品无缝集成,帮助您大大简化应用部署到服务器,尤其是阿里云服务器中的操作。您还可以通过其内嵌的 Arthas 程序诊断、 Terminal Shell 终端和 MySQL 执行器等工具,简化应用开发、测试和诊断的过程。

二、传统应用部署方式

在传统部署方式中,需要 7 个以上的步骤才能完成部署,并且在本地 IDE、云产品控制台、Git/SVN、Maven/Gradle、镜像仓库、ECS、容器等多个产品间来回切换。

三、Cloud Toolkit 部署方式

在使用 Cloud Toolkit 的部署方式中,插件自动化了项目构建、SCP 上传部署包、制作 Docker Image、登录机器、推送至镜像仓库等多个步骤。您只需要在第一次使用时在本地 IDE 上安装 Cloud Toolkit,即可快速部署。

四、Alibaba Cloud Toolkit实操

官方网址:https://www.aliyun.com/product/cloudtoolkit

 1.插件安装

Alibaba Cloud Toolkit对eclipse和IDEA的支持都非常好,安装方式可参考上面的官方文档。我以IDEA为例为大家演示。

在IDEA中搜索安装,该插件更新非常快,说明项目是很活跃的:

2.IDEA中的配置

该神器支持部署应用到任意位置,比如你的本地服务器,云服务器,EDAS等,我以部署到ECS为例进行讲解。

在idea中找到Tools-》Alibaba Cloud-》Deploy to ECS


打开配置界面进行配置:

这个配置界面比较复杂,大家注意看我的注释。我分步骤介绍下:

  1. Deployment File:选择maven的方式进行构建
  2. Target Deployment ECS:设置服务器的实例名和ip地址,这两个值需要登录阿里云的管理后台获取
  3. Deploy Location:一个要填写程序在服务器上的部署位置,可以提前登录服务器把目录建好
  4. Command:sh /usr/local/src/ig/restart.sh,这是服务器上要执行的脚本文件,这个脚本特别重要,代表你要在服务器上执行哪个脚本,下面会带大家写这些脚本。
  5. 最下面的就是本地需要运行的安装打包maven命令,通常就是clean install  -DskipTests,会自动帮你填好,你也可以添加、删除或编辑,参数-DskipTests表示忽略测试直接打包,可以避免程序因为测试失败而无法打包

有了上面的配置,我们就可以把jar包上传到服务器对应的目录了,但想让应用成功跑起来,还需要编写脚本。

3.脚本编写

重头戏来了,应用能不能在服务器上成功跑起来,基本上要取决于shell脚本的编写。需要注意的是,脚本中的地址一定要使用绝对路径,否则无法上云成功。这里我写了三个脚本,分别是启动startup.sh、停止stop.sh和重启restart.sh,仿造了tomcat的脚本写法。三个脚本如下:

startup.sh:很简单,就是让SpringBoot应用在后台启动,并输出日志

startup.sh错误脚本如下,我开始被坑了很久都无法成功

#!/bin/bash --login
echo Starting application
nohup java -jar /usr/local/src/ig/XXXX.jar &

startup.sh正确脚本:

#!/bin/bash 
source /etc/profile
echo Starting application
nohup java -jar  /usr/local/src/ig/XXXX.jar  > nohup.log 2>&1 &

stop.sh:停止应用,逻辑就是先找到启动应用对应的pid并kill掉

#!/bin/bash
PID=$(ps -ef | grep XXXX.jar | grep -v grep | awk '{ print $2 }')
if [ -z "$PID" ]
then
    echo Application is already stopped
else
    echo kill $PID
    kill $PID
fi

restart.sh:重启应用,先调用停止脚本,再调用开始脚本

#!/bin/bash
echo Stopping application
source /usr/local/src/ig/stop.sh
echo Starting application
source /usr/local/src/ig/startup.sh

大家可以直接使用我提供的脚本,但需要自己做一些改造,如下:

  1. 修改脚本的路径为你自己的路径
  2. 将XXXX.jar改成你自己的jar包名称
  3. 给三个脚本授予可执行权限,使用命令chmod +x stop.sh进行授权

五、上云中出现的问题及解决方案

上云中要注意几个问题,再次强调,脚本编写用绝对路径;注意JDK的配置要规范,下面我把遇到的问题给大家总结一下。

JDK安装不正规导致unable to find java的问题

上云时,如果提示 unable to find java ,而且 java -version 显示正确的话,可能的原因是 jdk 安装方式不规范,需要建立 java 命令的软链接到 /usr/bin。找不到java,需要将java设置软连接到/sbin/java,代码如下:

[root@izwz9byv7m6dt3q2vnjq03z /]# ln -s /usr/java/jdk1.8.0_191/bin/java /usr/bin/java
[root@izwz9byv7m6dt3q2vnjq03z /]# ln -s /usr/java/jdk1.8.0_191/bin/jar /usr/bin/jar
[root@izwz9byv7m6dt3q2vnjq03z /]# ln -s /usr/java/jdk1.8.0_191/bin/javac /usr/bin/javac

接着报错:cannot access /sbin/java: No such file or directory,此时我将JDK的bin目录中 java这个文件拷贝到/usr/bin目录下。

继续报错:Error: Unable to access jarfile,回头看了下自己的startup.sh脚本,发现jar包没有写绝对路径,改成绝对路径后,restart的脚本直接超时。

看了官方文档的案例:https://yq.aliyun.com/articles/665693

source ~/.bash_profile
killall java
nohup java -jar /root/springbootdemo/springbootdemo-0.0.1-SNAPSHOT.jar > nohup.log 2>&1 &

发现脚本跟自己的区别有两个:一是用source引入了环境变量,二是nohup的启动方式跟我不同,故修改为这种脚本。

#!/bin/bash 
source /etc/profile
echo Starting application
nohup java -jar  /usr/local/src/ig/XXXX.jar  > nohup.log 2>&1 &

关键点:JDK的安装和jar包的路径必须要用绝对路径!!!非常重要!!!

最后,晒一张上云成功图:

可以看到打包花费20秒,上云时间27秒即完成了应有的全部部署,是不是很给力。完全摆脱了改代码-》打包-》上传-》启动应用的魔咒,舒服!

over!

最后,这个是我的微信二维码,加我,我拉你进讨论群,一起探讨技术。让你的编程生涯不再焦虑。

发布了236 篇原创文章 · 获赞 2724 · 访问量 55万+

猜你喜欢

转载自blog.csdn.net/m0_37609579/article/details/103898658