Files
stock-scanner/.github/workflows/docker-image.yml
2025-03-07 04:08:11 +08:00

94 lines
3.0 KiB
YAML

name: Docker Build and Push
on:
push:
branches: [ main ] # 只在 main 分支推送时触发
workflow_dispatch: # 支持手动触发
env:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
CACHE_FROM_BACKEND: type=registry,ref=${{ secrets.DOCKERHUB_USERNAME }}/stock-scanner-backend:buildcache
CACHE_TO_BACKEND: type=registry,ref=${{ secrets.DOCKERHUB_USERNAME }}/stock-scanner-backend:buildcache,mode=max
CACHE_FROM_FRONTEND: type=registry,ref=${{ secrets.DOCKERHUB_USERNAME }}/stock-scanner-frontend:buildcache
CACHE_TO_FRONTEND: type=registry,ref=${{ secrets.DOCKERHUB_USERNAME }}/stock-scanner-frontend:buildcache,mode=max
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Get current time
id: time
run: echo "TIME=$(date +'%Y%m%d%H%M')" >> $GITHUB_ENV
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
with:
platforms: linux/amd64,linux/arm64
# 构建后端镜像
- name: Build and push backend
uses: docker/build-push-action@v4
with:
context: .
platforms: linux/amd64,linux/arm64
push: true
tags: |
${{ secrets.DOCKERHUB_USERNAME }}/stock-scanner-backend:latest
${{ secrets.DOCKERHUB_USERNAME }}/stock-scanner-backend:${{ env.TIME }}
cache-from: ${{ env.CACHE_FROM_BACKEND }}
cache-to: ${{ env.CACHE_TO_BACKEND }}
# 构建前端镜像
- name: Build and push frontend
uses: docker/build-push-action@v4
with:
context: ./frontend
platforms: linux/amd64,linux/arm64
push: true
tags: |
${{ secrets.DOCKERHUB_USERNAME }}/stock-scanner-frontend:latest
${{ secrets.DOCKERHUB_USERNAME }}/stock-scanner-frontend:${{ env.TIME }}
cache-from: ${{ env.CACHE_FROM_FRONTEND }}
cache-to: ${{ env.CACHE_TO_FRONTEND }}
deploy:
needs: build
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
steps:
- name: Deploy to server
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd ${{ secrets.DEPLOY_PATH }}
# 设置环境变量
export DOCKERHUB_USERNAME=${{ secrets.DOCKERHUB_USERNAME }}
export TAG=${{ env.TIME }}
# 拉取最新代码
git pull
# 拉取最新镜像并重启服务
docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml up -d
# 清理未使用的镜像和容器
docker system prune -f