81 lines
2.7 KiB
YAML
81 lines
2.7 KiB
YAML
name: JT808 CI/CD
|
||
|
||
on:
|
||
push:
|
||
branches:
|
||
- main
|
||
|
||
jobs:
|
||
build-and-deploy:
|
||
runs-on: xw-runner
|
||
steps:
|
||
# 1. 手动检出代码 (零外部依赖,解决拉取 Action 慢的问题)
|
||
- name: Checkout (Native)
|
||
run: |
|
||
# 清理工作目录
|
||
ls -A1 | xargs rm -rf
|
||
|
||
# 使用 Gitea 提供的 Token 直接克隆
|
||
# 注意:gitea.repository_clone_url 通常是 http://domain/user/repo.git
|
||
# 我们在 clone 命令中手动注入用户名和 token
|
||
|
||
CLONE_URL=$(echo "${{ gitea.repository_clone_url }}" | sed -e "s|://|://${{ gitea.actor }}:${{ gitea.token }}@|")
|
||
|
||
echo "Cloning from local Gitea..."
|
||
git clone --depth 1 "$CLONE_URL" .
|
||
git log -1 --format='%h - %s'
|
||
|
||
# 2. 登录镜像仓库 (如果有配置)
|
||
- name: Login to Docker Registry
|
||
if: ${{ secrets.REGISTRY_URL != '' }}
|
||
env:
|
||
REGISTRY_URL: ${{ secrets.REGISTRY_URL }}
|
||
REGISTRY_USERNAME: ${{ secrets.REGISTRY_USERNAME }}
|
||
REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
|
||
run: |
|
||
echo "$REGISTRY_PASSWORD" | docker login "$REGISTRY_URL" -u "$REGISTRY_USERNAME" --password-stdin
|
||
|
||
# 3. 构建并推送镜像
|
||
# 利用 Multi-stage Dockerfile,无需在宿主机安装 Maven
|
||
- name: Build and Push
|
||
id: build
|
||
env:
|
||
REGISTRY_URL: ${{ secrets.REGISTRY_URL }}
|
||
# 默认为 jt808-server,如果 secret 未配置
|
||
IMAGE_NAME: ${{ secrets.IMAGE_NAME || 'jt808-server' }}
|
||
run: |
|
||
SHORT_SHA=$(git rev-parse --short HEAD)
|
||
# 组装完整镜像名: registry.example.com/project/jt808-server:a1b2c3d
|
||
FULL_IMAGE_NAME="${REGISTRY_URL}/${IMAGE_NAME}:${SHORT_SHA}"
|
||
|
||
echo "Building $FULL_IMAGE_NAME..."
|
||
docker build -t "$FULL_IMAGE_NAME" .
|
||
|
||
echo "Pushing $FULL_IMAGE_NAME..."
|
||
docker push "$FULL_IMAGE_NAME"
|
||
|
||
# 输出变量供后续步骤使用
|
||
echo "image=$FULL_IMAGE_NAME" >> $GITHUB_OUTPUT
|
||
|
||
# 4. 部署 (同机部署模式)
|
||
# 直接在 Runner 所在机器重启容器
|
||
- name: Deploy
|
||
env:
|
||
CONTAINER_NAME: jt808-server
|
||
run: |
|
||
IMAGE="${{ steps.build.outputs.image }}"
|
||
|
||
echo "Deploying $IMAGE..."
|
||
|
||
# 停止并删除旧容器 (忽略不存在的错误)
|
||
docker stop $CONTAINER_NAME || true
|
||
docker rm $CONTAINER_NAME || true
|
||
|
||
# 启动新容器
|
||
docker run -d \
|
||
--name $CONTAINER_NAME \
|
||
--restart always \
|
||
-p 8080:8080 \
|
||
-p 20048:20048 \
|
||
"$IMAGE"
|