# Gitea Actions: 平台部署流水线 # 触发条件:推送 main 分支 或 手动触发 # 运行环境:self-hosted runner(需要安装 docker + docker-compose) name: deploy on: push: branches: [main] paths: - "services/**" - "web/**" - "services/docker-compose.yml" workflow_dispatch: env: REGISTRY: gitea.craftlabs.cn/craftlabs API_IMAGE: delivery-platform-api WEBHOOK_IMAGE: license-webhook-ingress UI_IMAGE: delivery-platform-ui jobs: build-and-deploy: runs-on: ubuntu-latest # self-hosted runner 需注册该标签 steps: - name: Checkout uses: actions/checkout@v4 # ============ 后端 API ============ - name: Setup Java uses: actions/setup-java@v4 with: distribution: temurin java-version: "17" cache: maven - name: Build delivery-platform-api run: | mvn -f services/pom.xml -pl delivery-platform-api -am -DskipTests clean package -q - name: Build API Docker image run: | docker build -t ${{ env.REGISTRY }}/${{ env.API_IMAGE }}:${{ github.sha }} \ -t ${{ env.REGISTRY }}/${{ env.API_IMAGE }}:latest \ services/delivery-platform-api # ============ Webhook ============ - name: Build license-webhook-ingress run: | mvn -f services/pom.xml -pl license-webhook-ingress -am -DskipTests clean package -q - name: Build Webhook Docker image run: | docker build -t ${{ env.REGISTRY }}/${{ env.WEBHOOK_IMAGE }}:${{ github.sha }} \ -t ${{ env.REGISTRY }}/${{ env.WEBHOOK_IMAGE }}:latest \ services/license-webhook-ingress # ============ 前端 ============ - name: Setup Node uses: actions/setup-node@v4 with: node-version: "20" - name: Build frontend working-directory: web/delivery-platform-ui run: | npm install npm run build - name: Build Frontend Docker image run: | docker build -t ${{ env.REGISTRY }}/${{ env.UI_IMAGE }}:${{ github.sha }} \ -t ${{ env.REGISTRY }}/${{ env.UI_IMAGE }}:latest \ web/delivery-platform-ui # ============ 推送镜像到 Gitea Registry ============ - name: Login to Gitea Container Registry run: echo "${{ secrets.GITEA_REGISTRY_TOKEN }}" | docker login gitea.craftlabs.cn -u "${{ secrets.GITEA_REGISTRY_USER }}" --password-stdin - name: Push images run: | docker push ${{ env.REGISTRY }}/${{ env.API_IMAGE }}:${{ github.sha }} docker push ${{ env.REGISTRY }}/${{ env.API_IMAGE }}:latest docker push ${{ env.REGISTRY }}/${{ env.WEBHOOK_IMAGE }}:${{ github.sha }} docker push ${{ env.REGISTRY }}/${{ env.WEBHOOK_IMAGE }}:latest docker push ${{ env.REGISTRY }}/${{ env.UI_IMAGE }}:${{ github.sha }} docker push ${{ env.REGISTRY }}/${{ env.UI_IMAGE }}:latest # ============ 远程部署 ============ - name: Deploy via docker-compose env: DB_PASSWORD: ${{ secrets.DB_PASSWORD }} PLATFORM_JWT_SECRET: ${{ secrets.PLATFORM_JWT_SECRET }} CRAFTLABS_WEBHOOK_EXPECTED_TOKEN: ${{ secrets.WEBHOOK_TOKEN }} run: | # 将 docker-compose.yml 复制到部署目录并替换镜像版本 mkdir -p /opt/craftlabs/deploy cp services/docker-compose.yml /opt/craftlabs/deploy/ cd /opt/craftlabs/deploy export API_IMAGE_TAG=${{ env.REGISTRY }}/${{ env.API_IMAGE }}:${{ github.sha }} export WEBHOOK_IMAGE_TAG=${{ env.REGISTRY }}/${{ env.WEBHOOK_IMAGE }}:${{ github.sha }} export UI_IMAGE_TAG=${{ env.REGISTRY }}/${{ env.UI_IMAGE }}:${{ github.sha }} docker compose pull docker compose up -d --remove-orphans