Go gin go-zero github actions 部署指南

23 min read
name: CI

on:
  workflow_dispatch:
  push:
    branches:
      - 'main'
    tags:
      - 'v*'
  pull_request:
    branches:
      - 'main'

env:
  REGISTRY: ghcr.io
  IMAGE_NAME: ${{ github.repository }}

jobs:
  build-and-push-image:
    runs-on: ubuntu-latest

    permissions:
      contents: read
      packages: write

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Login to GitHub Package Registry
        uses: docker/login-action@v3
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ github.actor }}
          password: ${{ secrets.GHCR_TOKEN }}

      - name: Build and push
        uses: docker/build-push-action@v5
        with:
          context: .
          push: true
          tags: |
            ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
            ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest


      - name: Deploy to server
        uses: appleboy/ssh-action@v0.1.3
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USERNAME }}
          key: ${{ secrets.SERVER_KEY }}
          script: |
            docker login ghcr.io  --username ${{ secrets.GHCR_USERNAME }} --password ${{ secrets.GHCR_TOKEN }}
            docker stop pm || true  
            docker rm pm || true   
            docker run -d --restart always -e TZ=Asia/Shanghai --name pm -p 8080:8080 --net=host --mount type=bind,source=$HOME/pm/etc/pm.yaml,target=/app/etc/pm.yaml ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
            docker logout ghcr.io
  • workflow_dispatch: 允许手动触发此工作流程。
  • push: 当代码被推送到 main 分支或标签以 'v*' 开头时触发。
  • pull_request: 当有拉取请求到 main 分支时触发。
  1. 环境变量:

    • REGISTRY: 定义 Docker 镜像的注册表地址,这里是 GitHub Container Registry (ghcr.io)。
    • IMAGE_NAME: 定义镜像名称,使用 GitHub 仓库名。
  2. 作业步骤:

    • 检出仓库: 使用 actions/checkout@v4 检出代码。
    • 登录到 GitHub Package Registry: 使用 docker/login-action@v3 和 GitHub 密钥登录到 Docker 注册表。
    • 构建和推送镜像: 使用 docker/build-push-action@v5 构建并推送 Docker 镜像。标签包括当前提交的 SHA 和 'latest'。
    • 部署到服务器: 使用 appleboy/[email protected] 连接到服务器,并执行部署脚本。这个脚本做了以下事情:
      • 登录到 Docker 注册表。
      • 停止并移除旧的 Docker 容器(如果存在)。
      • 使用新的镜像启动 Docker 容器,并设置一些参数(如时区、端口映射、配置文件绑定等)。
      • 登出 Docker 注册表。