Github Action Workflow 實踐

specialCoder發表於2021-12-11

Action 基礎

常用功能

實踐

一 每天傳送天氣郵件

二 打包構建 & 檔案上傳到伺服器

場景:在github上提交程式碼之後自動打包部署到遠端伺服器(騰訊雲/阿里雲等)
實現:

# workflow名
name: deploy to tencentCloud
on: # 此CI/CD觸發時的事件
  push: # 在程式碼提交時自動觸發
    branches:
      - main
# 一個 CI/CD 的工作流有許多 jobs 組成,比如最典型的 job 是 lint,test,build。
jobs:
  build: # 構建job
    runs-on: ubuntu-latest # 跑workflow的伺服器系統
    steps: # job的一系列動作
      # 切換分支獲取原始碼
      - name: Checkout # step的名稱,將會在 github action 的控制檯中顯示
        # 選擇一個action,可以理解為若干 steps.run,有利於程式碼複用
        uses: actions/checkout@v2

      # 安裝使用 node:14
      - name: use Node.js 14
        uses: actions/setup-node@v1
        with:
          node-version: 14

      # 執行命令,npm install && npm run build
      - name: npm install and build
        run: |
          npm install
          npm run build
        env:
          CI: true

      # 部署到騰訊雲伺服器
      - name: 上傳到騰訊雲
        uses: easingthemes/ssh-deploy@main
        env:
          # 本地.ssh檔案下的私鑰id_rsa,存在secrets的TOKEN中
          SSH_PRIVATE_KEY: ${{ secrets.TOKEN }}
          # 複製操作的引數。"-avzr --delete"意味部署時清空伺服器目標目錄下的檔案
          ARGS: "-avzr --delete"
          # 源目錄,相對於倉庫內容根目錄的路徑
          SOURCE: "dist/"
          # 遠端伺服器地址
          REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
          # 遠端伺服器使用者名稱
          REMOTE_USER: "root"
          # 目標目錄(遠端伺服器路徑)
          TARGET: "/data/www"

說明:

  • 在 main 分支上提交程式碼的時候會觸發 workflow
  • 使用node v14 下打包構建,待完成之後將打包產物上傳到遠端伺服器

三 push 之後自動 release

場景:Release 之後,可以使用jsDelivr 實現免費CDN的功能。 可以參考這裡:免費CDN:jsDelivr+Github 使用方法
image.png

實現:


name: release CI

# Controls when the workflow will run
on:
  # Triggers the workflow on push or pull request events but only for the main branch
  push:
    branches:
      - main

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - name: Checkout
        uses: actions/checkout@v2

      # 讀取 package.json 檔案內容
      - name: read version
        id: version
        uses: ashley-taylor/read-json-property-action@v1.0
        with:
          path: ./package.json
          property: version

      # 執行 Release
      - name: Release
        uses: actions/create-release@master
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: v${{steps.version.outputs.value}}
          release_name: v${{steps.version.outputs.value}}
          body: Release v${{steps.version.outputs.value}}
          draft: false
          prerelease: false

說明:

  • 在 main 分支上提交程式碼的時候會觸發 workflow
  • 每次部署都是正式版本

相關文章