|
- #!/bin/bash
-
- # 记录开始时间
- start=$(date +%s)
- # 默认参数
- service="manage-front"
- env="dev"
-
- show_help() {
- echo "Usage: $0 [-s service] [-e environment]"
- echo
- echo "Options:"
- echo " -s Service to deploy (manage-front, manage, front, all, system default: manage-front)"
- echo " -e Environment (e.g., dev, test, default: dev)"
- echo " -h Show this help message"
- }
-
- # 解析命令行参数
- while getopts "s:e:h" opt; do
- case $opt in
- s) service=$OPTARG ;;
- e) env=$OPTARG ;;
- h) show_help; exit 0 ;;
- \?) echo "Invalid option -$OPTARG" >&2; exit 1 ;;
- esac
- done
-
- echo "Deploy service: $service, environment: $env"
-
- valid_services=("manage-front" "manage" "front" "all" "auth" "gateway" "system")
- if [[ ! " ${valid_services[@]} " =~ " $service " ]]; then
- echo "Invalid service name: $service" >&2
- echo "Valid services are: ${valid_services[*]}"
- exit 1
- fi
-
- valid_envs=("dev" "test" "test1")
- if [[ ! " ${valid_envs[@]} " =~ " $env " ]]; then
- echo "Invalid environment: $env" >&2
- echo "Valid environments are: ${valid_envs[*]}"
- exit 1
- fi
-
- # 根据环境设置 IP 地址
- if [ "$env" == "dev" ]; then
- remote_ip="172.20.32.197"
- elif [ "$env" == "test" ]; then
- remote_ip="172.20.32.185"
- elif [ "$env" == "test1" ]; then
- remote_ip="172.20.32.235"
- else
- echo "Invalid environment - $env"
- exit 1
- fi
-
- baseDir=/home/somuns/ci4s
- tag=$(date +'%Y%m%d%H%M')
- remote_deploy_dir=/home/deploy/manage-platform
-
- # 构建镜像函数
- build_image() {
- local dockerfile=$1
- local image=$2
- cd ${baseDir}/k8s/dockerfiles
- docker build -t ${image} -f ${dockerfile} .
- if [ $? -ne 0 ]; then
- echo "Build ${image} image fail"
- exit 1
- fi
- docker push ${image}
- }
-
- # 复制和替换 YAML 文件函数
- prepare_yaml() {
- local yaml_file=$1
- local image=$2
-
- placeholder="\${${yaml_file%.yaml}-image}"
- cd ${baseDir}/k8s/template-yaml
- cp -rf ${yaml_file} deploy/
- cd deploy/
- sed -i "s|${placeholder}|${image}|g" ${yaml_file}
- if [ $? -ne 0 ]; then
- echo "Replace ${image} image fail"
- exit 1
- fi
-
- # 建立远程目录并备份文件
- ssh root@$remote_ip "mkdir -p ${remote_deploy_dir} && if [ -f ${remote_deploy_dir}/${yaml_file} ]; then mv ${remote_deploy_dir}/${yaml_file} ${remote_deploy_dir}/${yaml_file}.bak; fi"
- if [ $? -ne 0 ]; then
- echo "Failed to create remote directory or backup ${yaml_file}"
- exit 1
- else
- echo "Successfully created remote directory and backup ${yaml_file}"
- fi
-
- scp ${baseDir}/k8s/template-yaml/deploy/${yaml_file} root@$remote_ip:${remote_deploy_dir}/${yaml_file}
- if [ $? -ne 0 ]; then
- echo "Failed to copy ${yaml_file}"
- exit 1
- else
- echo "Successfully copied ${yaml_file}"
- fi
- }
-
- # 部署服务函数
- deploy_service() {
- local yaml_file=$1
- ssh root@$remote_ip "kubectl apply -n argo -f ${remote_deploy_dir}/${yaml_file}"
- if [ $? -ne 0 ]; then
- echo "Failed to deploy ${yaml_file}"
- exit 1
- else
- echo "Successfully deployed ${yaml_file}"
- fi
- }
-
- deploy_nacos() {
- local yaml_file=$1
- scp ${baseDir}/k8s/template-yaml/${yaml_file} root@$remote_ip:${remote_deploy_dir}/${yaml_file}
- deploy_service ${yaml_file}
- }
-
- build_and_deploy() {
- local dockerfile=$1
- local image=$2
- local yaml_file=$3
-
- build_image ${dockerfile} ${image}
- prepare_yaml ${yaml_file} ${image}
- deploy_service ${yaml_file}
- }
-
- if [ "$service" == "front" ]; then
- build_and_deploy "nginx-dockerfile" "172.20.32.187/ci4s/ci4s-front:${tag}" "k8s-12front.yaml"
- fi
-
- # 构建和部署 manage 服务
- if [ "$service" == "manage" ]; then
- build_and_deploy "managent-dockerfile" "172.20.32.187/ci4s/ci4s-managent:${tag}" "k8s-7management.yaml"
- fi
-
- if [ "$service" == "auth" ]; then
- #部署认证中心
- build_and_deploy "auth-dockerfile" "172.20.32.187/ci4s/ci4s-auth:${tag}" "k8s-5auth.yaml"
- fi
-
- if [ "$service" == "gateway" ]; then
- #部署网关
- build_and_deploy "gateway-dockerfile" "172.20.32.187/ci4s/ci4s-gateway:${tag}" "k8s-4gateway.yaml"
- fi
-
- if [ "$service" == "system" ]; then
- #部署系统服务
- build_and_deploy "system-dockerfile" "172.20.32.187/ci4s/ci4s-system:${tag}" "k8s-6system.yaml"
- fi
-
- # 构建和部署 front 服务
- if [ "$service" == "manage-front" ]; then
- build_and_deploy "nginx-dockerfile" "172.20.32.187/ci4s/ci4s-front:${tag}" "k8s-12front.yaml"
- build_and_deploy "managent-dockerfile" "172.20.32.187/ci4s/ci4s-managent:${tag}" "k8s-7management.yaml"
- fi
-
-
- if [ "$service" == "all" ]; then
- #部署前端
- build_and_deploy "nginx-dockerfile" "172.20.32.187/ci4s/ci4s-front:${tag}" "k8s-12front.yaml"
- #部署管理平台
- build_and_deploy "managent-dockerfile" "172.20.32.187/ci4s/ci4s-managent:${tag}" "k8s-7management.yaml"
- #部署认证中心
- build_and_deploy "auth-dockerfile" "172.20.32.187/ci4s/ci4s-auth:${tag}" "k8s-5auth.yaml"
- #部署网关
- build_and_deploy "gateway-dockerfile" "172.20.32.187/ci4s/ci4s-gateway:${tag}" "k8s-4gateway.yaml"
- #部署系统服务
- build_and_deploy "system-dockerfile" "172.20.32.187/ci4s/ci4s-system:${tag}" "k8s-6system.yaml"
- #部署配置中心
- deploy_nacos "k8s-3nacos.yaml"
- fi
-
-
- # 记录结束时间
- end=$(date +%s)
- echo "部署成功, 耗时: $((end-start))秒"
|