Some checks failed
CI/CD Pipeline / build-and-deploy (push) Failing after 1h0m4s
- 将 LUKE_SERVER_DOCKER_REGISTRY_PASSWORD 改为 SERVER_PASSWORD
129 lines
4.8 KiB
YAML
129 lines
4.8 KiB
YAML
name: CI/CD Pipeline
|
||
|
||
on:
|
||
push:
|
||
branches:
|
||
- test # 触发构建的分支
|
||
|
||
env:
|
||
# ========== 环境变量配置 ==========
|
||
DOCKER_REGISTRY_URL: ${{vars.DOCKER_REGISTRY_URL}} # 私有Docker镜像仓库地址
|
||
PROJECT_NAME: llmx # 项目名称
|
||
COMPOSE_FILE: docker-compose.test.yml # Docker compose文件路径
|
||
SERVER_PASSWORD: ${{ secrets.SERVER_PASSWORD }} # 仓库密码
|
||
JCNC_GITEA_URL: ${{vars.SERVER_GITEA_URL}} # Gitea地址
|
||
RUNNER_TOOL_CACHE: /opt/tools-cache # 工具缓存目录
|
||
GRADLE_CACHE_KEY: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
|
||
SPRING_PROFILES_ACTIVE: test
|
||
|
||
jobs:
|
||
build-and-deploy:
|
||
runs-on: ubuntu-latest
|
||
container:
|
||
image: jcnc/act-runner:latest # 使用自定义Runner镜像
|
||
options: --user root # 以root用户运行(需要docker权限)
|
||
|
||
steps:
|
||
# ========== 1. 代码检出 ==========
|
||
- name: 🛒 Checkout source code
|
||
uses: ${{env.JCNC_GITEA_URL}}/actions/checkout@v4
|
||
with:
|
||
fetch-depth: 0 # 获取完整git历史(某些插件需要)
|
||
|
||
# ========== 2. Docker环境准备 ==========
|
||
- name: 🐳 Install Docker Environment
|
||
run: |
|
||
echo "=== 检查Docker安装状态 ==="
|
||
if ! command -v docker >/dev/null; then
|
||
echo "❌ Docker未安装,开始安装..."
|
||
curl -fsSL https://get.docker.com | sh | tee docker-install.log
|
||
echo "✅ Docker安装完成"
|
||
echo "✅ Docker Compose安装完成"
|
||
else
|
||
echo "ℹ️ Docker已安装,版本: $(docker -v)"
|
||
echo "ℹ️ Docker Compose已安装,版本: $(docker compose version)"
|
||
fi
|
||
|
||
# ========== 3. Gradle环境准备 ==========
|
||
- name: 🔧 Prepare Gradle Environment
|
||
run: |
|
||
echo "赋予gradlew执行权限..."
|
||
chmod +x gradlew
|
||
echo "当前目录结构:"
|
||
ls -al
|
||
# ========== 4. 恢复缓存 ==========
|
||
- name: 📦 Use Cache
|
||
id: cache
|
||
uses: ${{env.JCNC_GITEA_URL}}/actions/cache/restore@v4
|
||
with:
|
||
path: |
|
||
~/.gradle/caches
|
||
~/.gradle/wrapper
|
||
~/.cache
|
||
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
|
||
restore-keys: |
|
||
${{ runner.os }}-gradle-
|
||
${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
|
||
env:
|
||
ACTIONS_RUNNER_DEBUG: true # 启用缓存调试输出
|
||
|
||
- name: ⚙️ Setup Gradle
|
||
uses: ${{env.JCNC_GITEA_URL}}/gradle/actions/setup-gradle@v4
|
||
with:
|
||
gradle-version: wrapper # 使用项目自带的gradle-wrapper
|
||
|
||
# ========== 5. 构建阶段 ==========
|
||
- name: 🏗️ Build with Jib
|
||
run: |
|
||
echo "开始构建Docker镜像..."
|
||
./gradlew jib --stacktrace --build-cache --info -Dorg.gradle.caching=true -Dorg.gradle.jvmargs="-Xmx2g -Xms2g -XX:MaxMetaspaceSize=1g" | tee build.log
|
||
|
||
echo "=== 镜像构建结果 ==="
|
||
docker images | grep ${{env.PROJECT_NAME}}
|
||
- name: 🛑 Stop Gradle Daemon
|
||
run: |
|
||
echo "停止Gradle守护进程..."
|
||
./gradlew --stop
|
||
echo "剩余Java进程:"
|
||
ps aux | grep java || true
|
||
# ========== 6. 保存缓存 ==========
|
||
- name: 📦 Save Cache
|
||
id: cache
|
||
uses: ${{env.JCNC_GITEA_URL}}/actions/cache/save@v4
|
||
with:
|
||
path: |
|
||
~/.gradle/caches
|
||
~/.gradle/wrapper
|
||
~/.cache
|
||
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
|
||
restore-keys: |
|
||
${{ runner.os }}-gradle-
|
||
${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
|
||
env:
|
||
ACTIONS_RUNNER_DEBUG: true # 启用缓存调试输出
|
||
# ========== 7. 部署阶段 ==========
|
||
- name: 🔧 Prepare Deployment
|
||
run: |
|
||
cd docker
|
||
echo "准备部署环境..."
|
||
chmod +x ${COMPOSE_FILE}
|
||
echo "当前Docker状态:"
|
||
docker ps -a
|
||
|
||
- name: 🧹 Clean Old Containers
|
||
run: |
|
||
echo "清理旧容器..."
|
||
docker compose -f ${COMPOSE_FILE} down --remove-orphans
|
||
echo "清理后Docker状态:"
|
||
docker ps -a
|
||
|
||
- name: 🚀 Deploy New Version
|
||
run: |
|
||
echo "拉取最新镜像..."
|
||
docker compose -f ${COMPOSE_FILE} pull
|
||
|
||
echo "启动新服务..."
|
||
docker compose -f ${COMPOSE_FILE} up -d
|
||
|
||
echo "=== 服务状态检查 ==="
|
||
docker compose -f ${COMPOSE_FILE} ps |