name: 本地构建并运行容器 on: push: branches: [ main ] paths-ignore: - "README.md" - "*.md" - ".git" - ".gitea" - ".dockerignore" - ".gitignore" jobs: build: runs-on: [deploy-server] steps: - name: 拉取最新代码 uses: actions/checkout@v4 - name: 构建镜像 uses: docker/build-push-action@v5 with: context: . push: false tags: | ${{ vars.IMAGE_NAME }}:latest - name: 停止并删除旧容器 run: | CONTAINER_NAME="${{ vars.IMAGE_NAME }}" docker stop ${CONTAINER_NAME} 2>/dev/null || true docker rm ${CONTAINER_NAME} 2>/dev/null || true echo "✅ 停止并删除旧容器 ${CONTAINER_NAME} 成功..." - name: 运行新容器 run: | # 容器名称 CONTAINER_NAME="${{ vars.IMAGE_NAME }}" # 启动容器 docker run -d \ --name ${CONTAINER_NAME} \ --restart always \ ${{ vars.IMAGE_NAME }}:latest - name: 验证容器状态 run: | CONTAINER_NAME="${{ vars.IMAGE_NAME }}" if docker ps --filter "name=${CONTAINER_NAME}" --filter "status=running" | grep -q ${CONTAINER_NAME}; then echo "✅ 容器 ${CONTAINER_NAME} 启动成功" # 显示容器日志 docker logs ${CONTAINER_NAME} --tail 50 else echo "❌ 容器 ${CONTAINER_NAME} 启动失败" docker logs ${CONTAINER_NAME} exit 1 fi - name: 清理旧镜像 run: | CONTAINER_NAME="${{ vars.IMAGE_NAME }}" OLD_IMAGES=$(docker images --filter "reference=${CONTAINER_NAME}:*" --format "{{.ID}}" | tail -n +6) if [ -n "${OLD_IMAGES}" ]; then echo "🗑️ 清理旧镜像:${OLD_IMAGES}" echo "${OLD_IMAGES}" | xargs -r docker rmi -f 2>/dev/null echo "✅ 旧镜像清理成功" else echo "✅ 无旧镜像需要清理" fi