使用 Github Action 自动部署

Kesa...大约 3 分钟CI/CDGithub actions

之前一直都是手动部署至 github pages 和云服务器,虽然有写脚本但是还不够方便,于是想到使用 Github Action 进行自动化部署,只需 Push 即可触发。

1. Github Action

GitHub Actions 是一种持续集成和持续交付 (CI/CD) 平台,可用于自动执行生成、测试和部署管道。 您可以创建工作流程来构建和测试存储库的每个拉取请求,或将合并的拉取请求部署到生产环境。

触发运行器 1(它触发运行器 2 以运行作业 2 )以运行作业 1 的事件的示意图。 每个作业都分为多个步骤。
触发运行器 1(它触发运行器 2 以运行作业 2 )以运行作业 1 的事件的示意图。 每个作业都分为多个步骤。

工作流 Workflow

工作流程是一个可配置的自动化过程,它将运行一个或多个作业。 工作流程由签入到存储库的 YAML 文件定义,并在存储库中的事件触发时运行,也可以手动触发,或按定义的时间表触发。

工作流程在存储库的 .github/workflows 目录中定义,存储库可以有多个工作流程,每个工作流程都可以执行不同的任务集。

事件 Events

事件是存储库中触发工作流程运行的特定活动。

作业 Actions

作业是工作流中在同一运行器上执行的一组步骤。

操作 Runners

操作是用于 GitHub Actions 平台的自定义应用程序,它执行复杂但经常重复的任务。

2. 创建

在仓库界面选择 Actions, 创建自己的工作流。

name: Deploy

on: 
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          fetch-depth: 0
          # 如果你文档需要 Git 子模块,取消注释下一行
          # submodules: true

      - name: install pnpm
        uses: pnpm/action-setup@v2
        with:
          version: 8
          run_install: true

      - name: setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 18
          cache: pnpm
      
      - name: Build gh pages
        env:
          NODE_OPTIONS: --max_old_space_size=8192
          SITE: ${{ vars.GH_SITE }}
          GTAG_ID: ${{ vars.GH_GTAG_ID }}
          G_SITE_VERI: ${{ vars.GH_G_SITE_VERI }}
        run: |
          pnpm run docs:build
          > src/.vuepress/dist/.nojekyll

      - name: Deploy gh pages
        uses: peaceiris/actions-gh-pages@v3
        with:
          personal_token: ${{ secrets.ACTIONS_PERSONAL_TOKEN }}
          external_repository: dreamjz/dreamjz.github.io
          publish_branch: vuepress-v2-theme-hope  # default: gh-pages
          publish_dir: src/.vuepress/dist
          
      - name: Build blog pages
        env:
          NODE_OPTIONS: --max_old_space_size=8192
          SITE: ${{ vars.SITE }}
          GTAG_ID: ${{ vars.GTAG_ID }}
          G_SITE_VERI: ${{ vars.G_SITE_VERI }}
        run: |
          pnpm run docs:build  
          
      - name: Deploy blog pages
        uses: peaceiris/actions-gh-pages@v3
        with:
          personal_token: ${{ secrets.ACTIONS_PERSONAL_TOKEN }}
          external_repository: dreamjz/xxx
          publish_branch: vuepress-v2-theme-hope  # default: gh-pages
          publish_dir: src/.vuepress/dist
          
      - name: install ssh keys
        # check this thread to understand why its needed:
        # https://stackoverflow.com/a/70447517
        run: |
          install -m 600 -D /dev/null ~/.ssh/id_rsa
          echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
          ssh-keyscan -H ${{ secrets.SSH_HOST }} > ~/.ssh/known_hosts
      
      - name: connect and pull
        run: |
          ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} \
          "cd ${{ secrets.WORK_DIR }} && git fetch && git checkout origin/${{ vars.WORK_BRANCH }} && exit"
      
      - name: cleanup
        run: rm -rf ~/.ssh
  • name: 工作流名称
  • on: 触发条件,可以有多个
    • push: push 至仓库时触发, branch:指定触发的分支
    • workflow_dispatch: 手动触发
  • jobs: 作业流程
    • Deploy: 作业id (job_id)
    • runs-on: 运行器(Runner)
    • steps: 步骤
    • env: 环境变量
    • uses: 调用现有的 jobs
      • with: 参数
    • run: 执行指令
  • secrets: 加密变量,以 ${secrets.xxx}形式调用
  • vars: 变量,以 ${vars.xxx} 形式调用, 在 Settings-> Secrets and Variables-> Action 中配置

Reference

  1. Github Actionsopen in new window Github
  2. How To Deploy A Git Repository To A Server Using GitHub Actionsopen in new window
上次编辑于:
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.2