脚本更新
parent
c59c28618c
commit
9feccf65c4
|
|
@ -1,5 +1,4 @@
|
|||
#!/bin/bash
|
||||
git log
|
||||
# 定义变量
|
||||
WORKSPACE_DIR="New_College.Api"
|
||||
PROJECT_FILE="New_College.Api.csproj"
|
||||
|
|
@ -65,74 +64,60 @@ else
|
|||
exit 1
|
||||
fi
|
||||
|
||||
# 登录远程服务器并拉取镜像、运行容器
|
||||
echo "开始登录远程服务器 $REMOTE_SERVER ..."
|
||||
ssh -o StrictHostKeyChecking=no -i "$SSH_PRIVATE_KEY_PATH" "$REMOTE_USER@$REMOTE_SERVER" << EOF
|
||||
set -e # 在远程服务器上启用错误中止模式
|
||||
echo "远程服务器登录成功!"
|
||||
# ✅ 远程执行命令,并确保返回正确的 exit 状态码
|
||||
ssh -o StrictHostKeyChecking=no -i "$SSH_PRIVATE_KEY_PATH" "$REMOTE_USER@$REMOTE_SERVER" 'bash -s' << EOF
|
||||
set -e # 遇到错误立即退出
|
||||
echo "✅ 远程服务器登录成功!"
|
||||
|
||||
PRIVATE_REGISTRY="192.168.104.102:5000"
|
||||
REPO_NAME="newgaokaov2"
|
||||
TAG="$TAG"
|
||||
IMAGE_NAME="$PRIVATE_REGISTRY/$REPO_NAME"
|
||||
echo "内外地址"$IMAGE_NAME
|
||||
# 拉取最新的 Docker 镜像
|
||||
echo "拉取 Docker 镜像: $IMAGE_NAME:$TAG"
|
||||
sudo docker pull $IMAGE_NAME:$TAG
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "拉取 Docker 镜像失败,请检查镜像地址和仓库配置。"
|
||||
exit 1
|
||||
fi
|
||||
IMAGE_NAME="\$PRIVATE_REGISTRY/\$REPO_NAME"
|
||||
|
||||
# 停止并移除旧的容器(如果存在)
|
||||
CONTAINER_PREFIX="newgaokaov2"
|
||||
echo "检查是否存在旧容器: 前缀为 $CONTAINER_PREFIX"
|
||||
echo "🚀 拉取最新 Docker 镜像: \$IMAGE_NAME:$TAG 和 latest"
|
||||
sudo docker pull "\$IMAGE_NAME:$TAG"
|
||||
sudo docker pull "\$IMAGE_NAME:latest"
|
||||
|
||||
# 获取所有匹配前缀的容器ID
|
||||
CONTAINER_IDS=\$(sudo docker ps -aq -f name="^/\${CONTAINER_PREFIX}")
|
||||
|
||||
if [ "\$CONTAINER_IDS" ]; then
|
||||
echo "停止并移除旧容器: 前缀为 $CONTAINER_PREFIX"
|
||||
# 停止所有匹配的容器
|
||||
sudo docker stop \$CONTAINER_IDS
|
||||
# 移除所有匹配的容器
|
||||
sudo docker rm \$CONTAINER_IDS
|
||||
# ✅ 停止并删除所有旧容器
|
||||
echo "🛑 停止并删除所有旧容器"
|
||||
OLD_CONTAINERS=\$(sudo docker ps -aq -f name="newgaokaov2_container")
|
||||
if [ "\$OLD_CONTAINERS" ]; then
|
||||
sudo docker stop \$OLD_CONTAINERS
|
||||
sudo docker rm \$OLD_CONTAINERS
|
||||
else
|
||||
echo "没有找到前缀为 $CONTAINER_PREFIX 的容器。"
|
||||
echo "✅ 没有找到旧容器,无需删除"
|
||||
fi
|
||||
CONTAINER_NAME=\$CONTAINER_PREFIX'_build'
|
||||
|
||||
# 删除旧的镜像(保留最新的)
|
||||
echo "清理旧的 Docker 镜像"
|
||||
OLD_IMAGES=\$(sudo docker images "$IMAGE_NAME" --format "{{.ID}}" | tail -n +2)
|
||||
|
||||
# ✅ 删除所有旧的 Docker 镜像(保留 latest 和当前 $TAG)
|
||||
echo "🧹 清理旧的 Docker 镜像"
|
||||
OLD_IMAGES=\$(sudo docker images "\$IMAGE_NAME" --format "{{.ID}}" | tail -n +2)
|
||||
if [ "\$OLD_IMAGES" ]; then
|
||||
echo "删除旧镜像: \$OLD_IMAGES"
|
||||
sudo docker rmi -f \$OLD_IMAGES
|
||||
else
|
||||
echo "没有找到旧的镜像。"
|
||||
echo "✅ 没有找到旧镜像,无需清理"
|
||||
fi
|
||||
|
||||
# 运行新的容器
|
||||
echo "运行新的容器: \$CONTAINER_NAME"
|
||||
sudo docker run --restart=always -d --name \$CONTAINER_NAME -p 8081:8081 $IMAGE_NAME:$TAG
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "容器 \$CONTAINER_NAME 启动成功!"
|
||||
# ✅ 启动新容器
|
||||
NEW_CONTAINER_NAME="newgaokaov2_container_$TAG"
|
||||
echo "🚀 启动新容器: \$NEW_CONTAINER_NAME"
|
||||
sudo docker run --restart=always -d --name "\$NEW_CONTAINER_NAME" -p 8081:8081 "\$IMAGE_NAME:$TAG"
|
||||
|
||||
if [ \$? -eq 0 ]; then
|
||||
echo "✅ 部署成功: \$NEW_CONTAINER_NAME"
|
||||
exit 0
|
||||
else
|
||||
echo "容器 \$CONTAINER_NAME 启动失败,请检查日志。"
|
||||
echo "❌ 部署失败!请检查日志。"
|
||||
exit 1
|
||||
fi
|
||||
EOF
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "远程服务器操作完成,应用已成功部署!"
|
||||
else
|
||||
echo "远程服务器操作失败,请检查 SSH 连接和脚本。"
|
||||
exit 1
|
||||
fi
|
||||
# 发送钉钉通知
|
||||
# ✅ 确保 ssh 的退出状态传递到本地
|
||||
SSH_EXIT_CODE=$?
|
||||
echo "SSH 退出码: $SSH_EXIT_CODE"
|
||||
|
||||
# ✅ 发送钉钉通知
|
||||
send_dingtalk_notification() {
|
||||
local message="$1"
|
||||
local status="$2"
|
||||
local status="$1"
|
||||
local message="$2"
|
||||
|
||||
curl -X POST "$DINGDING_WEBHOOK" \
|
||||
-H "Content-Type: application/json" \
|
||||
|
|
@ -144,13 +129,11 @@ send_dingtalk_notification() {
|
|||
}"
|
||||
}
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
SUCCESS_MESSAGE="远程服务器操作完成,应用已成功部署!\n镜像地址: $IMAGE_NAME:$TAG"
|
||||
echo "$SUCCESS_MESSAGE"
|
||||
send_dingtalk_notification "$SUCCESS_MESSAGE" "✅ 成功"
|
||||
if [ $SSH_EXIT_CODE -eq 0 ]; then
|
||||
SUCCESS_MESSAGE="远程服务器操作完成,newgaokaov2应用已成功部署!\n镜像地址: $IMAGE_NAME:$TAG"
|
||||
send_dingtalk_notification "✅ 成功" "$SUCCESS_MESSAGE"
|
||||
else
|
||||
FAILURE_MESSAGE="【部署状态】远程服务器操作失败,请检查 SSH 连接和脚本。"
|
||||
echo "$FAILURE_MESSAGE"
|
||||
send_dingtalk_notification "$FAILURE_MESSAGE" "❌ 失败"
|
||||
FAILURE_MESSAGE="【部署状态】newgaokaov2远程服务器操作失败,请检查 SSH 连接和脚本。"
|
||||
send_dingtalk_notification "❌ 失败" "$FAILURE_MESSAGE"
|
||||
exit 1
|
||||
fi
|
||||
Loading…
Reference in New Issue