|
5 | 5 | branches: [main] |
6 | 6 | workflow_dispatch: |
7 | 7 |
|
8 | | -env: |
9 | | - REGISTRY: ghcr.io |
10 | | - IMAGE_NAME: ghcr.io/involutionhell/involutionhell-backend |
11 | | - |
12 | 8 | jobs: |
13 | | - build-and-push: |
14 | | - name: 编译 Native Image 并推送到 GHCR |
15 | | - runs-on: ubuntu-latest |
16 | | - permissions: |
17 | | - contents: read |
18 | | - packages: write |
19 | | - |
20 | | - steps: |
21 | | - - name: 检出代码 |
22 | | - uses: actions/checkout@v4 |
23 | | - |
24 | | - - name: 登录 GitHub Container Registry |
25 | | - uses: docker/login-action@v3 |
26 | | - with: |
27 | | - registry: ${{ env.REGISTRY }} |
28 | | - username: ${{ github.actor }} |
29 | | - password: ${{ secrets.GITHUB_TOKEN }} |
30 | | - |
31 | | - - name: 设置 Docker Buildx |
32 | | - uses: docker/setup-buildx-action@v3 |
33 | | - |
34 | | - - name: 构建并推送镜像 |
35 | | - uses: docker/build-push-action@v6 |
36 | | - with: |
37 | | - context: . |
38 | | - push: true |
39 | | - platforms: linux/arm64 |
40 | | - tags: | |
41 | | - ${{ env.IMAGE_NAME }}:latest |
42 | | - ${{ env.IMAGE_NAME }}:${{ github.sha }} |
43 | | - cache-from: type=gha |
44 | | - cache-to: type=gha,mode=max |
45 | | - |
46 | 9 | deploy: |
47 | | - name: SSH 部署到服务器 |
| 10 | + name: 在服务器上编译并部署 |
48 | 11 | runs-on: ubuntu-latest |
49 | | - needs: build-and-push |
50 | 12 | environment: production |
51 | 13 |
|
52 | 14 | steps: |
53 | | - - name: 检出代码(仅获取 docker-compose.yml 和 Caddyfile) |
54 | | - uses: actions/checkout@v4 |
55 | | - |
56 | | - - name: 将 compose 文件同步到服务器 |
| 15 | + - name: 将源码同步到服务器 |
57 | 16 | uses: appleboy/scp-action@v0.1.7 |
58 | 17 | with: |
59 | 18 | host: ${{ secrets.SERVER_HOST }} |
60 | 19 | username: ${{ secrets.SERVER_USER }} |
61 | 20 | key: ${{ secrets.SERVER_SSH_KEY }} |
62 | | - source: "docker-compose.yml,Caddyfile,docker/" |
| 21 | + source: "." |
63 | 22 | target: "/home/ubuntu/involution-hell" |
64 | 23 |
|
65 | | - - name: 远程执行部署 |
| 24 | + - name: 在服务器上构建并启动 |
66 | 25 | uses: appleboy/ssh-action@v1 |
67 | 26 | with: |
68 | 27 | host: ${{ secrets.SERVER_HOST }} |
69 | 28 | username: ${{ secrets.SERVER_USER }} |
70 | 29 | key: ${{ secrets.SERVER_SSH_KEY }} |
| 30 | + # 命令超时设长一点,Native Image 编译需要时间 |
| 31 | + command_timeout: 30m |
71 | 32 | script: | |
72 | 33 | cd /home/ubuntu/involution-hell |
73 | 34 |
|
74 | | - # 写入镜像名,确保拉取最新 |
75 | | - export BACKEND_IMAGE_NAME=${{ env.IMAGE_NAME }}:${{ github.sha }} |
| 35 | + # 构建新镜像(失败则整个 workflow 标红) |
| 36 | + docker build -t involutionhell-backend:latest . |
76 | 37 |
|
77 | | - # 登录 GHCR 后拉取镜像并重启服务 |
78 | | - echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin |
79 | | - docker compose pull backend |
| 38 | + # 用新镜像重启服务 |
80 | 39 | docker compose up -d --remove-orphans |
0 commit comments