refactor: 优化dectl脚本,获取当前版本的同时可以查询最新版本 #7492

This commit is contained in:
xuwei-fit2cloud 2024-01-22 17:44:22 +08:00
parent ac86ae39f8
commit a663b06abf

View File

@ -10,8 +10,12 @@ source ${DE_BASE}/dataease/.env
export COMPOSE_HTTP_TIMEOUT=180
compose_files="-f docker-compose.yml"
compose_cmd="docker-compose"
server_url=""
current_version=""
latest_version=""
owner=""
repo=""
docker-compose version >/dev/null 2>&1
if [ $? -ne 0 ]; then
@ -21,7 +25,6 @@ if [ $? -ne 0 ]; then
fi
fi
if [ "${DE_ENGINE_MODE}" = "local" ]; then
if [[ ! ${DE_EXTERNAL_KETTLE} ]] || [ ${DE_EXTERNAL_KETTLE} = "false" ]; then
compose_files="${compose_files} -f docker-compose-kettle.yml"
@ -84,6 +87,55 @@ function _healthcheck() {
echo "【警告】服务在等待时间内未完全启动!请稍后使用 dectl status 检查服务运行状况。"
echo
}
function _get_current_version() {
de_current_version=$(grep "^ image:.*/dataease:" ${DE_BASE}/dataease/docker-compose.yml | awk -F'dataease:' '{print $2}')
if test -z $de_current_version; then
echo "获取当前版本失败,请检查当前版本是否正确"
exit 1
fi
current_version=$de_current_version
}
function _get_available_server() {
git_urls=('gitee.com' 'github.com')
for git_url in ${git_urls[*]}
do
echo -ne "检测 ${git_url} ... "
curl -m 5 -kIs https://${git_url} >/dev/null
if [ $? != 0 ];then
echo "failed"
else
echo "ok"
server_url=${git_url}
break
fi
done
}
function _get_latest_version() {
if [[ -x "$(command -v python)" ]];then
py_cmd='python'
elif [[ -x "$(command -v python3)" ]]; then
py_cmd='python3'
fi
_get_available_server
if [[ "x${server_url}" == "x" ]];then
echo "无法连接版本服务器,请稍候重试"
exit 1
fi
if [[ "${server_url}" == "gitee.com" ]];then
owner='fit2cloud-feizhiyun'
repo='DataEase'
gitee_release_content=$(curl -s https://gitee.com/api/v5/repos/${owner}/${repo}/releases/latest)
# export LC_ALL="en_US.utf8"
latest_version=$($py_cmd -c "import json; obj=json.loads('$gitee_release_content', strict=False); print(obj['tag_name']);")
else
owner='dataease'
repo='dataease'
latest_version=$(curl -s https://api.github.com/repos/${owner}/${repo}/releases/latest | grep -e "\"tag_name\"" | sed -r 's/.*: "(.*)",/\1/')
fi
}
function status() {
echo
echo "DataEase 容器运行状态"
@ -143,8 +195,10 @@ function uninstall() {
}
function version() {
echo
de_version=$(grep "^ image:.*/dataease:" ${DE_BASE}/dataease/docker-compose.yml | awk -F'dataease:' '{print $2}')
echo $de_version
_get_current_version
_get_latest_version
echo "current version is $current_version"
echo "latest version is $latest_version"
}
function _clear_component_docker_images() {
component=$1
@ -193,55 +247,7 @@ function clear_logs() {
echo "清理完毕"
}
function upgrade() {
echo
git_urls=('gitee.com' 'github.com')
if [[ -x "$(command -v python)" ]];then
py_cmd='python'
elif [[ -x "$(command -v python3)" ]]; then
py_cmd='python3'
else
git_urls=('github.com')
fi
for git_url in ${git_urls[*]}
do
success="true"
for i in {1..3}
do
echo -ne "检测 ${git_url} ... ${i} "
curl -m 5 -kIs https://${git_url} >/dev/null
if [ $? != 0 ];then
echo "failed"
success="false"
break
else
echo "ok"
fi
done
if [[ ${success} == "true" ]];then
server_url=${git_url}
break
fi
done
if [[ "x${server_url}" == "x" ]];then
echo "没有找到稳定的下载服务器,请稍候重试"
exit 1
fi
if [[ "${server_url}" == "gitee.com" ]];then
owner='fit2cloud-feizhiyun'
repo='DataEase'
gitee_release_content=$(curl -s https://gitee.com/api/v5/repos/${owner}/${repo}/releases/latest)
# export LC_ALL="en_US.utf8"
latest_version=$($py_cmd -c "import json; obj=json.loads('$gitee_release_content', strict=False); print(obj['tag_name']);")
else
owner='dataease'
repo='dataease'
latest_version=$(curl -s https://api.github.com/repos/${owner}/${repo}/releases/latest | grep -e "\"tag_name\"" | sed -r 's/.*: "(.*)",/\1/')
fi
current_version=$(grep "^ image:.*/dataease:" ${DE_BASE}/dataease/docker-compose.yml | awk -F'dataease:' '{print $2}')
version
if [ "${latest_version}" = "" ];then
echo "未获取到最新版本"
@ -250,13 +256,19 @@ function upgrade() {
echo "最新版本与当前版本一致,退出升级过程"
exit 0
else
echo -e "\e[32m 检测到最新版本为\e[1;33m${latest_version}\e[0;32m 即将执行在线升级...\e[0m"
if [[ "$latest_version" =~ ^v2.* ]];then
echo "获取到的最新版本与当前版本不匹配,请访问 https://community.fit2cloud.com/#/products/dataease/downloads 下载离线安装包"
exit 1
else
echo -e "\e[32m 检测到最新版本为\e[1;33m${latest_version}\e[0;32m 即将执行在线升级...\e[0m"
fi
fi
sleep 2s
echo "使用下载服务器 ${server_url}"
cd /tmp
download_url="https://${server_url}/${owner}/${repo}/releases/download/${latest_version}/dataease-${latest_version}-online.tar.gz"
curl -LOk -m 60 -o dataease-${latest_version}-online.tar.gz $download_url
if [ $? -ne 0 ]; then
echo -e "\e[31m升级失败:连接下载服务器超时!\n可手动下载升级包然后执行\e[1;33m /bin/bash install.sh \e[0;31m离线升级也可以重新执行一次 dectl upgrade 命令。\e[0m"