# 定义CI/CD流水线的阶段
stages:
  - build       # 第一阶段：构建应用程序
  - build-docker # 第二阶段：构建Docker镜像
  - deploy      # 第三阶段：部署应用程序

# 定义全局变量
variables:
  CONTAINER_NAME: "bunny-auth-server"  # Docker容器名称
  DOCKER_TAG: "4.0.0"                  # Docker镜像标签版本

# 构建任务
build-job:
  stage: build  # 指定此任务属于build阶段
  script:
    # 打印编译开始信息
    - echo "Compiling the code..."
    # 使用Maven编译Java项目，跳过测试
    - mvn clean package -DskipTests
    # 打印编译完成信息
    - echo "Compile complete."
    # 从Docker Hub拉取OpenJDK基础镜像
    - docker pull openjdk:24-ea-17-jdk-oraclelinux9
    # 打印拉取完成信息
    - echo "docker pull complete."
    # 使用Dockerfile构建Docker镜像，并打上标签
    - docker build -f Dockerfile -t $CONTAINER_NAME:$DOCKER_TAG .
    # 打印构建成功信息
    - echo "Application successfully deployed."

# 部署任务
deploy-job:
  stage: deploy  # 指定此任务属于deploy阶段
  environment: production  # 指定部署环境为production
  script:
    # 打印部署开始信息
    - echo "Deploying application..."
    # 停止正在运行的容器（如果存在），|| true确保命令失败不会中断脚本
    - docker stop $CONTAINER_NAME || true
    # 删除容器（如果存在）
    - docker rm $CONTAINER_NAME || true
    # 运行新的Docker容器
    # -d: 后台运行
    # -p: 端口映射（7070和8000）
    # --name: 容器名称
    # --restart always: 总是自动重启
    - docker run -d -p 7070:7070 -p 8000:8000 --name $CONTAINER_NAME --restart always $CONTAINER_NAME:$DOCKER_TAG
    # 打印部署成功信息
    - echo "Application successfully deployed."