From a663b06abf40cbb45544951dd90f968ce05a9f2b Mon Sep 17 00:00:00 2001 From: xuwei-fit2cloud Date: Mon, 22 Jan 2024 17:44:22 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96dectl=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=EF=BC=8C=E8=8E=B7=E5=8F=96=E5=BD=93=E5=89=8D=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=9A=84=E5=90=8C=E6=97=B6=E5=8F=AF=E4=BB=A5=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=9C=80=E6=96=B0=E7=89=88=E6=9C=AC=20#7492?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- installer/dataease/dectl | 120 +++++++++++++++++++++------------------ 1 file changed, 66 insertions(+), 54 deletions(-) diff --git a/installer/dataease/dectl b/installer/dataease/dectl index 532d579a8c..3dd7cdeddf 100755 --- a/installer/dataease/dectl +++ b/installer/dataease/dectl @@ -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"