1+ name : Build and Deploy Docker Images
2+
3+ on :
4+ push :
5+ tags :
6+ - ' v*' # 只在推送以 'v' 开头的 tag 时触发
7+
8+ env :
9+ # 使用 GitHub Container Registry
10+ REGISTRY : ghcr.io
11+ BACKEND_IMAGE_NAME : chat-bi-api
12+ FRONTEND_IMAGE_NAME : chat-bi-frontend
13+
14+ jobs :
15+ build-and-push :
16+ runs-on : ubuntu-latest
17+ permissions :
18+ contents : read
19+ packages : write
20+
21+ steps :
22+ - name : Checkout repository
23+ uses : actions/checkout@v4
24+
25+ - name : Set up Docker Buildx
26+ uses : docker/setup-buildx-action@v3
27+
28+ - name : Log in to GitHub Container Registry
29+ uses : docker/login-action@v3
30+ with :
31+ registry : ${{ env.REGISTRY }}
32+ username : ${{ github.actor }}
33+ password : ${{ secrets.GITHUB_TOKEN }}
34+
35+ # 可选:如果你想同时推送到 Docker Hub,取消注释以下步骤
36+ # - name: Log in to Docker Hub
37+ # uses: docker/login-action@v3
38+ # with:
39+ # username: ${{ secrets.DOCKERHUB_USERNAME }}
40+ # password: ${{ secrets.DOCKERHUB_TOKEN }}
41+
42+ - name : Extract tag version
43+ id : version
44+ run : echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
45+
46+ - name : Extract backend metadata
47+ id : backend-meta
48+ uses : docker/metadata-action@v5
49+ with :
50+ images : |
51+ ${{ env.REGISTRY }}/${{ github.repository_owner }}/${{ env.BACKEND_IMAGE_NAME }}
52+ tags : |
53+ type=ref,event=tag
54+ type=raw,value=latest
55+ type=semver,pattern={{version}}
56+ type=semver,pattern={{major}}.{{minor}}
57+
58+ - name : Extract frontend metadata
59+ id : frontend-meta
60+ uses : docker/metadata-action@v5
61+ with :
62+ images : |
63+ ${{ env.REGISTRY }}/${{ github.repository_owner }}/${{ env.FRONTEND_IMAGE_NAME }}
64+ tags : |
65+ type=ref,event=tag
66+ type=raw,value=latest
67+ type=semver,pattern={{version}}
68+ type=semver,pattern={{major}}.{{minor}}
69+
70+ - name : Build and push backend Docker image
71+ uses : docker/build-push-action@v5
72+ with :
73+ context : .
74+ file : ./deploy/Dockerfile
75+ platforms : linux/amd64,linux/arm64
76+ push : true
77+ tags : ${{ steps.backend-meta.outputs.tags }}
78+ labels : ${{ steps.backend-meta.outputs.labels }}
79+ build-args : |
80+ USE_CHINA_MIRROR=false
81+ cache-from : type=gha
82+ cache-to : type=gha,mode=max
83+
84+ - name : Build and push frontend Docker image
85+ uses : docker/build-push-action@v5
86+ with :
87+ context : ./web
88+ file : ./web/deploy/Dockerfile
89+ platforms : linux/amd64,linux/arm64
90+ push : true
91+ tags : ${{ steps.frontend-meta.outputs.tags }}
92+ labels : ${{ steps.frontend-meta.outputs.labels }}
93+ cache-from : type=gha
94+ cache-to : type=gha,mode=max
95+
96+ - name : Generate deployment summary
97+ run : |
98+ echo "## 🚀 部署成功!" >> $GITHUB_STEP_SUMMARY
99+ echo "" >> $GITHUB_STEP_SUMMARY
100+ echo "### 📦 镜像信息" >> $GITHUB_STEP_SUMMARY
101+ echo "" >> $GITHUB_STEP_SUMMARY
102+ echo "**Tag版本:** \`${{ steps.version.outputs.VERSION }}\`" >> $GITHUB_STEP_SUMMARY
103+ echo "" >> $GITHUB_STEP_SUMMARY
104+ echo "**后端镜像:**" >> $GITHUB_STEP_SUMMARY
105+ echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
106+ echo "${{ steps.backend-meta.outputs.tags }}" >> $GITHUB_STEP_SUMMARY
107+ echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
108+ echo "" >> $GITHUB_STEP_SUMMARY
109+ echo "**前端镜像:**" >> $GITHUB_STEP_SUMMARY
110+ echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
111+ echo "${{ steps.frontend-meta.outputs.tags }}" >> $GITHUB_STEP_SUMMARY
112+ echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
113+ echo "" >> $GITHUB_STEP_SUMMARY
114+ echo "### 📋 使用方法" >> $GITHUB_STEP_SUMMARY
115+ echo "" >> $GITHUB_STEP_SUMMARY
116+ echo "拉取镜像:" >> $GITHUB_STEP_SUMMARY
117+ echo "\`\`\`bash" >> $GITHUB_STEP_SUMMARY
118+ echo "# 后端" >> $GITHUB_STEP_SUMMARY
119+ echo "docker pull ${{ env.REGISTRY }}/${{ github.repository_owner }}/${{ env.BACKEND_IMAGE_NAME }}:${{ steps.version.outputs.VERSION }}" >> $GITHUB_STEP_SUMMARY
120+ echo "" >> $GITHUB_STEP_SUMMARY
121+ echo "# 前端" >> $GITHUB_STEP_SUMMARY
122+ echo "docker pull ${{ env.REGISTRY }}/${{ github.repository_owner }}/${{ env.FRONTEND_IMAGE_NAME }}:${{ steps.version.outputs.VERSION }}" >> $GITHUB_STEP_SUMMARY
123+ echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
0 commit comments