一文掌握GitHub Actions基本概念與配置

IslandZzzz發表於2022-06-25

CI/CD包含很多流程,如拉取程式碼、測試、構建打包、登入遠端伺服器、部署釋出等等。
而Github Actions是GitHub推出的一個CI/CD工具,類似工具還有TravisCI、Jenkins等

在GitHub Actions中,每個獨立的指令碼就是一個action,這些action可以複用,參考官方action市場

Github Actions 基本概念

  • workflow 工作流
  • on 觸發條件
  • job 任務
  • step 步驟
  • action 動作
  • 環境變數

workflow 工作流
一個工作流代表一次持續整合的過程
對於GitHub Actions,指令碼以yml檔案的方式編寫,並約定儲存在專案的.github/workflows資料夾下
一個專案可以有多個workflow

on 觸發條件
比如依賴github push 觸發指令碼執行,push指定某個/某些分支觸發,還可以指定push tag時觸發等等

job 任務
一個workflow可以包含多個任務
一個 workflow 由一個或多個 job 構成,含義是一次持續整合的執行,可以完成多個任務。
job之間可以使用need形成依賴關係

jobs:
  job1:
  job2:
    needs: job1
  job3:
    needs: [job1, job2]

如 job2必須等待job1完成,job3需要在job1,job2都完成之後才執行

step 步驟
一個job可以包含多個步驟,一步步完成
step 表示要做的步驟,前一步失敗,後面不會繼續執行。

action 動作
一個步驟可以一次執行一個或者多個命令
一個 action有name、uses、with 等配置項
name 表示 action 的名稱,uses 表示使用哪個外掛,with 表示傳給外掛的引數。

環境變數
使用者可以自定義環境變數
配置在倉庫設定裡面的 secrets 選單欄中,使用secrets.XXX 讀取XXX 本倉庫的環境變數

一個GitHub Actions demo

結合上面的概念以及註釋理解

name: Deploy GitHub Pages

# 觸發條件:在 push 到 master 分支後
on:
  push:
    branches:
      - master

# 任務
jobs:
  build-and-deploy:
    # 伺服器環境:最新版 Ubuntu
    runs-on: ubuntu-latest
    steps:
      # 拉取程式碼
      - name: Checkout
        uses: actions/checkout@v2
        with:
          persist-credentials: false

      # 1、生成靜態檔案
      - name: Build
        run: npm install && npm run build

      # 2、部署到 GitHub Pages
      - name: Deploy
        uses: JamesIves/github-pages-deploy-action@releases/v3
        with:
          ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
          REPOSITORY_NAME: somenzz/somenzz.github.io
          BRANCH: master
          FOLDER: public
          #注意這裡的 public 是倉庫根目錄下的 public,也就是 npm run build 生成靜態資源的路徑,比如有的人是 `docs/.vuepress/dist`

      # 3、同步到 gitee 的倉庫
      - name: Sync to Gitee
        uses: wearerequired/git-mirror-action@master
        env:
          # 注意在 Settings->Secrets 配置 GITEE_RSA_PRIVATE_KEY
          SSH_PRIVATE_KEY: ${{ secrets.GITEE_RSA_PRIVATE_KEY }}
        with:
          # 注意替換為你的 GitHub 源倉庫地址
          source-repo: git@github.com:somenzz/somenzz.github.io.git
          # 注意替換為你的 Gitee 目標倉庫地址
          destination-repo: git@gitee.com:somenzz/somenzz.git

      # 4、部署到 Gitee Pages
      - name: Build Gitee Pages
        uses: yanglbme/gitee-pages-action@main
        with:
          # 注意替換為你的 Gitee 使用者名稱
          gitee-username: island
          # 注意在 Settings->Secrets 配置 GITEE_PASSWORD
          gitee-password: ${{ secrets.GITEE_PASSWORD }}
          # 注意替換為你的 Gitee 倉庫,倉庫名嚴格區分大小寫,請準確填寫,否則會出錯
          gitee-repo: somenzz/somenzz
          # 要部署的分支,預設是 master,若是其他分支,則需要指定(指定的分支必須存在)
          branch: master

      # 5、部署到 xxxx.cn伺服器
      - name: rsync deployments
        uses: burnett01/rsync-deployments@4.1
        with:
          # 這裡是 rsync 的引數 switches: -avzh --delete --exclude="" --include="" --filter=""
          switches: -avzh
          path: public/
          remote_path: /home/ubuntu/public/
          remote_host: xxxx.cn
          remote_port: 22
          remote_user: ubuntu
          remote_key: ${{ secrets.MY_UBUNTU_RSA_PRIVATE_KEY }}

相關文章