feat(deploy):support remote deploy service by docker and local build #41
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Deploy mkBlog to server machine | |
| on: | |
| push: | |
| branches: | |
| - main | |
| paths: | |
| - "main.go" | |
| - "go.mod" | |
| - "go.sum" | |
| - "Makefile" | |
| - "config/**" | |
| - "models/**" | |
| - "pkg/**" | |
| - "service/**" | |
| - "utils/**" | |
| - "frontend/**" | |
| - "docker/**" | |
| - "deploy/**" | |
| - ".github/workflows/**" | |
| workflow_run: | |
| workflows: | |
| - Build and Push Docker Images | |
| types: | |
| - completed | |
| branches: | |
| - main | |
| workflow_dispatch: | |
| inputs: | |
| deploy_mode: | |
| description: Deployment method | |
| required: true | |
| type: choice | |
| default: docker | |
| options: | |
| - docker | |
| - makefile | |
| concurrency: | |
| group: deploy-mkblog | |
| cancel-in-progress: false | |
| jobs: | |
| deploy: | |
| if: >- | |
| github.event_name == 'workflow_dispatch' || | |
| (github.event_name == 'push' && vars.DEPLOY_MODE == 'makefile') || | |
| (github.event_name == 'workflow_run' && | |
| github.event.workflow_run.conclusion == 'success' && | |
| vars.DEPLOY_MODE != 'makefile') | |
| runs-on: ubuntu-latest | |
| env: | |
| DEPLOY_MODE: ${{ github.event_name == 'workflow_dispatch' && inputs.deploy_mode || vars.DEPLOY_MODE || 'docker' }} | |
| steps: | |
| - name: Prepare deploy key file | |
| run: | | |
| mkdir -p ~/.ssh | |
| echo "$SSH_PRIVATE_KEY" > ~/.ssh/deploy_key | |
| sed -i 's/\r$//' ~/.ssh/deploy_key || true | |
| chmod 600 ~/.ssh/deploy_key | |
| env: | |
| SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} | |
| - name: Add SSH known host | |
| run: ssh-keyscan -H ${{ secrets.SSH_HOST }} >> ~/.ssh/known_hosts | |
| - name: Deploy with Makefile | |
| if: env.DEPLOY_MODE == 'makefile' | |
| run: | | |
| ssh -o BatchMode=yes -i ~/.ssh/deploy_key ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} \ | |
| "set -e; | |
| docker rm -f mkblog >/dev/null 2>&1 || true; | |
| cd ${{ secrets.REMOTE_REPO_PATH }}; | |
| git fetch origin main; | |
| git checkout main; | |
| git pull --ff-only origin main; | |
| make release" | |
| - name: Deploy with Docker | |
| if: env.DEPLOY_MODE == 'docker' | |
| run: | | |
| ssh -o BatchMode=yes -i ~/.ssh/deploy_key ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} \ | |
| "set -e; | |
| sudo systemctl stop mkblog >/dev/null 2>&1 || true; | |
| docker pull ghcr.io/mkitsdts/mkblog:latest; | |
| docker rm -f mkblog >/dev/null 2>&1 || true; | |
| docker run -d \ | |
| --name mkblog \ | |
| --restart unless-stopped \ | |
| -p 4801:4801 \ | |
| -v /etc/mkblog:/etc/mkblog \ | |
| ghcr.io/mkitsdts/mkblog:latest" |