name: 手动 AiDA back-java 开发分支构建部署 on: workflow_dispatch: jobs: build_and_deploy: # 注意:如果你的 Runner 是直接装在宿主机上的二进制文件,这里通常用自建的标签,如 'self-hosted' # 如果是 Docker 形式的 Runner,请确保它挂载了宿主机的目录 runs-on: ubuntu-latest env: # 宿主机存放代码和运行容器的物理路径 LOCAL_DEPLOY_PATH: /mnt/process/A6000_Server/AiDA_Workspace/Java_Server_workspace JAR_NAME: aida-0.0.1-SNAPSHOT.jar steps: - name: 0.记录开始时间 id: build_start_time run: echo "current_time=$(TZ='Asia/Hong_Kong' date '+%Y-%m-%d %H:%M:%S %Z')" >> $GITHUB_OUTPUT - name: 1.检出代码 uses: actions/checkout@v4 with: ref: dev/dev - name: 2.Set up JDK 21 uses: actions/setup-java@v5 with: java-version: '21' distribution: 'temurin' cache: 'maven' - name: 3.构建 jar 包 run: | echo "===== 开始构建 JAR =====" mvn -B clean package -DskipTests -Pdev - name: 4.同步文件到宿主机部署目录 run: | echo "===== 复制文件到目标路径 =====" # 确保部署目录存在 mkdir -p ${{ env.LOCAL_DEPLOY_PATH }} # 复制 JAR 包、Dockerfile 和 Compose 文件 cp target/${{ env.JAR_NAME }} ${{ env.LOCAL_DEPLOY_PATH }}/ # 直接在目标位置生成/更新配置文件 cat > ${{ env.LOCAL_DEPLOY_PATH }}/Dockerfile << 'EOF' FROM openjdk:21-ea-21-jdk-slim VOLUME /tmp RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo 'Asia/Shanghai' > /etc/timezone ADD ./${{ env.JAR_NAME }} /app.jar ENTRYPOINT ["java","-jar","/app.jar"] EOF cat > ${{ env.LOCAL_DEPLOY_PATH }}/docker-compose.yml << 'EOF' version: '3' services: aida_back: container_name: AiDA_Search_Java_Serve build: . volumes: - ./log:/log ports: - '1608:5567' restart: always EOF - name: 5.本地触发 Docker 部署 run: | echo "===== 重启服务 =====" cd ${{ env.LOCAL_DEPLOY_PATH }} docker compose down || true docker compose up -d --build echo "===== 清理冗余镜像 =====" docker image prune -f echo "部署完成!" docker compose ps - name: 6.发送通知邮件 if: always() uses: dawidd6/action-send-mail@v3 with: server_address: smtp.gmail.com server_port: 465 username: ${{ secrets.MAIL_USERNAME }} password: ${{ secrets.MAIL_PASSWORD }} subject: 'Gitea Actions (Local): ${{ job.status }} - AiDA Java' to: 'cgzhou@aidlab.hk,zchengrong@yeah.net' body: | 项目: AiDA back-java search (本地部署) 状态: ${{ job.status }} 路径: ${{ env.LOCAL_DEPLOY_PATH }} 时间: ${{ steps.build_start_time.outputs.current_time }}