1. 程式人生 > 其它 >一文搞懂GitHub Actions基本概念與配置

一文搞懂GitHub Actions基本概念與配置

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.XXX 這個 XXX 表示本倉庫的環境變數,配置在倉庫設定裡面的 secrets 選單攔,都是加密的。

一個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: [email protected]:somenzz/somenzz.github.io.git
          # 注意替換為你的 Gitee 目標倉庫地址
          destination-repo: [email protected]:somenzz/somenzz.git

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

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