Files
aida_back/.gitea/workflows/prod_build_schedule.yaml
admin 3837546e7d
All checks were successful
定时 AiDA back-java Develop 分支构建部署 / build_and_deploy (push) Successful in 2m33s
更新 .gitea/workflows/prod_build_schedule.yaml
2025-11-28 17:36:36 +08:00

146 lines
4.9 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: 定时 AiDA back-java Develop 分支构建部署
on:
schedule:
# cron为UTC时区构建时间=部署时间-8小时 {*分 (-8)时 *日 *月 *周} ---
# 示例: 1月1日22点22分触发构建 cron写作 - '22 14 1 1 *'
- cron: '59 15 28 11 *'
jobs:
build_and_deploy:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
env:
REMOTE_DEPLOY_PATH: /workspace/workspace_aida/DevelopVersion/develop-version-aida-back
steps:
- name: 1.检出代码
uses: actions/checkout@v4
with:
ref: release/3.1
- name: Set up JDK 8
uses: actions/setup-java@v4
with:
java-version: '8'
distribution: 'temurin'
- name: 2.设置JAVA Maven 环境
run: |
# 适配act的root用户和Gitea Runner普通用户
SUDO=""
[ "$(id -u)" != "0" ] && SUDO="sudo"
# 安装依赖
$SUDO apt update && $SUDO apt install -y wget tar --no-install-recommends
# 下载并安装Maven
MAVEN_VERSION="3.9.11"
MAVEN_TAR="apache-maven-${MAVEN_VERSION}-bin.tar.gz"
MAVEN_URL="https://archive.apache.org/dist/maven/maven-3/${MAVEN_VERSION}/binaries/${MAVEN_TAR}"
wget --no-verbose -O /tmp/${MAVEN_TAR} ${MAVEN_URL}
# 解压+软链接
$SUDO tar -xzf /tmp/${MAVEN_TAR} -C /usr/local/
$SUDO ln -sf /usr/local/apache-maven-${MAVEN_VERSION} /usr/local/maven
# 配置PATH
echo "/usr/local/maven/bin" >> $GITHUB_PATH
export PATH="/usr/local/maven/bin:$PATH"
# 验证
mvn -v
- name: 2.构建jar包
run:
mvn -B clean package -DskipTests --file pom.xml
- name: 3.检查 Runner 本地文件
run: |
echo "当前目录:$(pwd)"
echo "target 目录内容:"
ls -la ./target/
# 容错:处理通配符无匹配的情况
JAR_FILE=$(ls ./target/*.jar 2>/dev/null | head -n1)
if [ -z "$JAR_FILE" ] || [ ! -f "$JAR_FILE" ]; then
echo "❌ Runner 本地无有效 JAR 包!"
exit 1
fi
# 检查Docker配置文件
for FILE in Dockerfile docker-compose.yml; do
if [ ! -f "./$FILE" ]; then
echo "❌ 缺失文件:$FILE"
exit 1
fi
done
echo "✅ 本地文件校验通过!"
- name: 4. 同步文件到远程服务器
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_KEY }}
source: "./target/*.jar,./Dockerfile,./docker-compose.yml"
target: ${{ env.REMOTE_DEPLOY_PATH }}
ssh_options: "-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
strip_components: 0
- name: 5. 验证远程文件
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_KEY }}
script: |
echo "===== 远程部署目录文件列表 ====="
ls -la ${{ env.REMOTE_DEPLOY_PATH }}
# 容错:检查JAR包
REMOTE_JAR=$(ls ${{ env.REMOTE_DEPLOY_PATH }}/target/*.jar 2>/dev/null | head -n1)
if [ -z "$REMOTE_JAR" ] || [ ! -f "$REMOTE_JAR" ]; then
echo "❌ 远程服务器无有效 JAR 包!"
exit 1
fi
# 检查Docker文件
for FILE in Dockerfile docker-compose.yml; do
if [ ! -f "${{ env.REMOTE_DEPLOY_PATH }}/$FILE" ]; then
echo "❌ 远程缺失文件:$FILE"
exit 1
fi
done
echo "✅ 远程文件校验通过!"
- name: 6. 部署和运行服务
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_KEY }}
script: |
echo "===== 开始部署服务 ====="
cd ${{ env.REMOTE_DEPLOY_PATH }}
# 容错:停止旧容器(不存在则跳过)
echo "停止旧容器..."
docker compose down || true
# 清理无效镜像(可选,释放空间)
docker system prune -f
# 构建并启动新容器
echo "构建Docker镜像..."
docker compose build --no-cache
echo "启动服务..."
docker compose up -d
# 验证服务状态
echo "验证容器状态..."
docker compose ps
echo "✅ 部署完成!"