80 lines
2.6 KiB
YAML
80 lines
2.6 KiB
YAML
name: Rssky Auto Deploy
|
|
|
|
on:
|
|
push:
|
|
branches: [ main ]
|
|
|
|
jobs:
|
|
deploy:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: SSH and Execute Script
|
|
uses: appleboy/ssh-action@master
|
|
with:
|
|
host: ${{ secrets.REMOTE_HOST }}
|
|
port: ${{ secrets.SSH_PORT }}
|
|
username: ${{ secrets.REMOTE_USER }}
|
|
password: ${{ secrets.SSH_PASSWORD }}
|
|
script: |
|
|
#!/bin/bash
|
|
|
|
# 发送推送通知的函数
|
|
send_msg() {
|
|
local title="Rssky Actions"
|
|
local message="$1"
|
|
|
|
curl -H "Authorization: Bearer ${{ secrets.MSG_NTFY_TOKEN }}" \
|
|
-H "Title: $title" \
|
|
-d "$message" \
|
|
"${{ vars.MSG_NTFY_URL }}"
|
|
}
|
|
|
|
# 设置变量
|
|
REPO_URL="${{ vars.REPO_URL }}"
|
|
GIT_TOKEN="${{ secrets.GIT_PUSH_PULL_TOKEN }}"
|
|
IMAGE_NAME_BASE="proxyapi"
|
|
CONTAINER_NAME="proxyapi"
|
|
REPO_DIR="/opt/proxyapi"
|
|
DATE=$(date +%Y%m%d%H%M%S)
|
|
IMAGE_TAG="${IMAGE_NAME_BASE}:${DATE}"
|
|
|
|
# 删除旧仓库目录(如果存在)
|
|
if [ -d "$REPO_DIR" ]; then
|
|
rm -rf "$REPO_DIR" || { send_msg "ProxyAPI 删除旧仓库目录失败"; exit 1; }
|
|
fi
|
|
|
|
# 克隆代码
|
|
if ! git clone https://${GIT_TOKEN}@${REPO_URL#https://} $REPO_DIR; then
|
|
send_msg "ProxyAPI 克隆失败"
|
|
exit 1
|
|
fi
|
|
cd $REPO_DIR
|
|
|
|
|
|
# 编译 Dockerfile
|
|
if ! docker build -t $IMAGE_TAG .; then
|
|
send_msg "ProxyAPI 容器构建失败"
|
|
exit 1
|
|
fi
|
|
|
|
# 更新容器
|
|
if docker ps -a | grep -q $CONTAINER_NAME; then
|
|
docker stop $CONTAINER_NAME
|
|
docker rm $CONTAINER_NAME
|
|
fi
|
|
|
|
# 创建并启动新容器
|
|
if ! docker run -d --name $CONTAINER_NAME \
|
|
--network 1panel-network \
|
|
-p 50666:5000 \
|
|
$IMAGE_TAG; then
|
|
send_msg "ProxyAPI 容器启动失败"
|
|
exit 1
|
|
fi
|
|
|
|
# 部署成功通知
|
|
send_msg "ProxyAPI 容器 ${CONTAINER_NAME} 已部署,使用镜像标签 ${IMAGE_TAG}"
|
|
|
|
# 清理旧镜像
|
|
docker images | grep $IMAGE_NAME_BASE | grep -v $DATE | awk '{print $3}' | xargs -r docker rmi
|