当前位置:网站首页>Alibaba Cloud Toolkit —— 项目一键部署工具
Alibaba Cloud Toolkit —— 项目一键部署工具
2022-07-26 16:20:00 【涛歌依旧fly】
Alibaba Cloud Toolkit —— 项目一键部署工具
Alibaba Cloud Toolkit
介绍
简介
- Alibaba Cloud Toolkit(后文简称Cloud Toolkit)可以帮助开发者更高效地部署、测试、开发和诊断应用。
- Cloud Toolkit与主流IDE(IDEA, Eclipse等)及阿里云其他产品无缝集成,帮助您简化应用部署到服务器。
- 您还可以通过其内嵌的Arthas程序诊断、Terminal Shell终端和MySQL执行器等工具,简化应用开发、测试和诊断的过程。
原理
传统部署方式
在传统部署方式中,需要多个步骤才能完成应用的部署,并且需要在本地IDE、云产品控制台、Git/SVN、Maven/Gradle、镜像仓库、ECS、容器等多个界面间来回切换操作。

Cloud Toolkit部署方式
Cloud Toolkit将项目构建、SCP上传部署包、制作Docker Image、登录机器、推送至镜像仓库等多个步骤进行了集成和简化。

整合步骤
整合的思路是: 准备一台服务器, 以及一台含有IDE(IDEA)的设备. 通过整合 Cloud Toolkit, 实现将项目进行自动部署的功能实现
前提
- 云服务器 or Windows设备(me: 腾讯云服务器)
- IDE( me: IDEA)
- Maven项目 or Spring项目 (me: SpringBoot)
下载插件
- 在IntelliJ IDEA顶部菜单栏中选择File > Settings。
- 在Settings对话框的左侧导航栏中单击Plugins。
- 在Plugins区域单击Marketplace。
- 在搜索栏中输入
Alibaba Cloud Toolkit。 - 等待下载、安装完成后,单击Restart IDE。

ps: 基于其他方式安装Cloud Toolkit如下:
参数配置与使用
补充:
1. 如果使用Windows作为部署服务器
如果服务器是Windows, 需要我们安装OpenSSL, 步骤如下
2. 如果是多模块部署
如果当前工程为多模块工程,仅仅只需要发布其中的某一个子模块,应该怎么办呢? 可以添加两个mvn任务: 任务一、在父工程里执行"clean install",(默认会有) 任务二、在需要发布的子模块里执行"
clean package" (需要手动实现)
- 点击上面的号,选择“Run Maven Goal”:

- 在弹出的界面上,可以点击文件夹小图标来选择模块,在"Command line"上填写mvn goal:

- 选择执行模块后, 在Command line填写
clean package即可 详情见: 多模块 Maven 工程部署

3. 文件上传
- 在IntelliJ IDEA顶部菜单栏中选择Tools>Alibaba Cloud>Deploy to host, 选择Upload File, 页面图下图所示. 输入文件上传的相关参数即可完成上传

- 也可以点击idea下面的Alibaba Cloud View进行文件的快捷上传入口

填写相关参数进行文件上传

启动脚本
注意事项(一定要看)
在Windows环境下复制下面的脚本保存成文件, 然后入到linux环境中, 在每一行的最后会有^M 的字符, 会影响脚本的执行. 因此在授权脚本后需要检查脚本中有没有这种字符 或者我们可以直接在linux创建好文件后, 点击编辑在可输入文字的状态下将脚本复制进去
# 检查脚本中有没有^M的特殊字符
vim -b 脚本名称
# 如果有, 执行sed字符替换命令
sed -i 's/\r//g' 脚本名称
复制

脚本1
#!/bin/bash
#======这里可替换为jar包名字=======
APP_NAME=xxx-1.0.jar
#======根据实际情况修改参数=========
JVM="-server -Xms2g -Xmx2g -Xmn512m -XX:PermSize=128M -XX:MaxNewSize=128m -XX:MaxPermSize=25zh6m -Xss256k -Djava.awt.headless=true -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -Xloggc:/logs/xxx-server/GC/xxx-gc.log"
#APPFILE_PATH="-Dspring.config.location=/usr/local/config/application.properties"
#使用说明,用来提示输入参数
usage() {
echo "Usage: sh 执行脚本.sh [start|stop|restart|status|log|backup]"
exit 1
}
#检查程序是否在运行
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#启动方法
start(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running. pid=${pid} ."
else
#nohup java $JVM -jar $APPFILE_PATH $APP_NAME > /dev/null 2>&1
#后台启动jar包,且控制环境变量,根据实际情况修改吧。
#=======如果想使用上面的JVM参数, 则在nohup java添加 $JVM 即可============
nohup java -jar $APP_NAME --spring.profiles.active=prod > /dev/null 2>&1 &
fi
}
#停止方法
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
}
#输出运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
}
#重启
restart(){
stop
start
}
#日志
log(){
# 输出实时日志
tail -n 100 -f /logs/fdc-server/fdc-server.log
}
#备份
backup(){
#根据需求自定义备份文件路径。
BACKUP_PATH=/usr/local/webapps/backup/xxx-server/
#获取当前时间作为备份文件名
BACKUP_DATE=`date +"%Y%m%d(%H:%M:%S)"`
echo 'backup file ->'$BACKUP_PATH$BACKUP_DATE'.jar'
#备份当前jar包
cp -r /usr/local/webapps/$APP_NAME $BACKUP_PATH$BACKUP_DATE'.jar'
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
"log")
log
;;
"backup")
backup
;;
*)
usage
;;
esac
脚本2
#!/bin/sh
# JAVA应用程序的名称
APP_NAME=uid-consumer
# JAVA应用程序端口号
SERVER_PORT=9999
# jar包存放路径
JAR_PATH='/app/uid-consumer'
# jar包名称
JAR_NAME=uid-consumer-1.1.0-SNAPSHOT.jar
# PID 代表是PID文件
JAR_PID=$JAR_NAME\.pid
# 日志输出文件
LOG_FILE=logs
# java虚拟机启动参数
JAVA_OPTS="-Xms512m -Xmx512m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:ParallelGCThreads=4 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=utf-8"
# 根据实际情况来修改以上配置信息 ##################################
# 检查程序是否处于运行状态
is_exist() {
# 查询出应用服务的进程id,grep -v 是反向查询的意思,查找除了grep操作的run.jar的进程之外的所有进程
pid=`ps -ef|grep $JAR_NAME|grep -v grep|awk '{print $2}' `
# [ ]表示条件测试。注意这里的空格很重要。要注意在'['后面和']'前面都必须要有空格
# [ -z STRING ] 如果STRING的长度为零则返回为真,即空是真
# 如果不存在返回0,存在返回1
if [ -z "${pid}" ]; then
return 0
else
return 1
fi
}
# ######### Shell脚本中$0、$?、$!、$$、$*、$#、[email protected]等的说明 #########
# $$ Shell本身的PID(ProcessID,即脚本运行的当前 进程ID号)
# $! Shell最后运行的后台Process的PID(后台运行的最后一个进程的 进程ID号)
# $? 最后运行的命令的结束代码(返回值)即执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
# $- 显示shell使用的当前选项,与set命令功能相同
# $* 所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数,此选项参数可超过9个。
# [email protected] 所有参数列表。如"[email protected]"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
# $# 添加到Shell的参数个数
# $0 Shell本身的文件名
# $1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…。
# 服务启动方法
start() {
is_exist
if [ $? -eq "1" ]; then
echo "$APP_NAME is already running pid is ${pid}"
else
# jar服务启动脚本
nohup java $JAVA_OPTS -Xloggc:$LOG_FILE/gc/gclog.log -XX:HeapDumpPath=$LOG_FILE/gc/HeapDump.hprof -jar $JAR_PATH/$JAR_NAME >./$LOG_FILE/run.log 2>&1 &
echo $! > $JAR_PID
echo "start $APP_NAME successed pid is $! "
tail -1000f $LOG_FILE/run.log
fi
}
# 服务停止方法
stop() {
# is_exist
pidf=$(cat $JAR_PID)
# echo "$pidf"
echo "pid = $pidf begin kill $pidf"
kill $pidf
rm -rf $JAR_PID
sleep 2
# 判断服务进程是否存在
is_exist
if [ $? -eq "1" ]; then
echo "pid = $pid begin kill -9 $pid"
kill -9 $pid
sleep 2
echo "$APP_NAME process stopped!"
else
echo "$APP_NAME is not running!"
fi
}
# 服务运行状态查看方法
status() {
is_exist
if [ $? -eq "1" ]; then
echo "$APP_NAME is running,pid is ${pid}"
else
echo "$APP_NAME is not running!"
fi
}
# 重启服务方法
restart() {
# 调用服务停止命令
stop
# 调用服务启动命令
start
}
# 帮助说明,用于提示输入参数信息
usage() {
echo "Usage: sh run-service.sh [ start | stop | restart | status ]"
exit 1
}
###################################
# 读取脚本的第一个参数($1),进行判断
# 参数取值范围:{
start | stop | restart | status }
# 如参数不在指定范围之内,则打印帮助信息
###################################
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
'start')
start
;;
'stop')
stop
;;
'restart')
restart
;;
'status')
status
;;
*)
usage
;;
esac
exit 0
边栏推荐
- mysql锁机制(举例说明)
- TDengine 落地协鑫能科,数百亿数据压缩至 600GB
- Digital currency of quantitative transactions - merge transaction by transaction data through timestamp and direction (large order consolidation)
- PAT甲级 1050 String Subtraction
- Pat grade a 1050 string subtraction
- A firefox/chrome plug-in that visualizes browser history
- 【物理模拟】最简单的shape matching的原理与实践
- The difference and efficiency comparison of three methods of C # conversion integer
- Sql语句——单行注释与多行注释
- Pat grade a 1044 shopping in Mars
猜你喜欢

2022年最新北京建筑安全员模拟题库及答案

Vlang's way of beating drums

Technology vane | interpretation of cloud native technology architecture maturity model

docker安装redis?如何配置持久化策略?

The difference and efficiency comparison of three methods of C # conversion integer

Pat grade a 1049 counting ones

PAT甲级 1046 Shortest Distance

Re9:读论文 DEAL Inductive Link Prediction for Nodes Having Only Attribute Information

Pat grade a 1044 shopping in Mars

Guetzli simple to use
随机推荐
[fluent -- advanced] packaging
[arm learning (9) ARM compiler understanding learning (armcc/armclang)]
[RCTF2015]EasySQL
Wechat applet - network data request
JS API summary of Array Operations
2022 test questions and answers for the latest national fire facility operator (senior fire facility operator)
Alibaba cloud DMS MySQL cloud database report error, solve!!
微信小程序---网络数据请求
The difference between oncreate and onrestoreinstancestate recovery data of activity
Guetzli simple to use
srec_cat 常用参数的使用
Activity之onCreate、onRestoreInstanceState恢复数据的区别
综合设计一个OPPE主页--顶部,头部的设计
Vlang's way of beating drums
MVC和ECS两种设计架构的初浅理解
First knowledge of OpenGL (2) compilation shaders
Comprehensively design an oppe homepage -- the design of the top and head
DTS is equipped with a new self-developed kernel, which breaks through the key technology of the three center architecture of the two places Tencent cloud database
我的sql没问题为什么还是这么慢|MySQL加锁规则
Sword finger offer special assault edition day 11