如何使用 github actions 快速構建流程


官網地址 : https://docs.github.com/cn/actions

Github Actions是干什么用的?

具體的解釋可以參照官網的說明,我這里舉兩個例子。
場景1: 一般的項目都有迭代不同的版本,但總會有一個master或dev/pro的版本做為最新版,一般的情況下,我們會在github上開不同的分支來管理,然后用版本號來區分,如下面這種:

 

但我們每完成一個固定的版本都需要手動更新到master或dev分支上,甚至我想再開一個倉庫去存放最新版本,那我們也每次都得手動push更新。

不過這時后我們就可以用github actions,選擇我們要觸發的時機(pull還是push?以及在哪個分支操作),然后代碼上傳就可以自動同步。

 

場景2:github page是github提供給我們通過靜態頁構建博客的功能,但我們每次都需要本地打包生成靜態頁然后上傳,不過有了actions就可以把打包以及上傳的動作交給github,我們只需要新增和更新文章然后同步到github即可,甚至都可以直接在github倉庫中直接修改文章都可以。

 

總結:上面兩個例子中,知道通過actions可以上傳,可以編譯打包。不過,我們也可以用actions做自動化測試,只要有相應的腳本就可以實現。

 

 

Github Actions實質是什么?

簡單地說,Actions就相當於Github給你提供了一個linux,你可以在里面上執行腳本。

其實Github只是給你創建了一個鏡像,供你去執行腳本和命令,等你執行完了鏡像會被刪除。

 

Github Actions 腳本怎么寫?

首先先看一下做為actions腳本的yml文件

 1 # This is a basic workflow to help you get started with Actions
 2 
 3 name: CI
 4 
 5 # Controls when the action will run. Triggers the workflow on push or pull request
 6 # events but only for the dev branch
 7 on:
 8   push:
 9     branches: [ dev ]
10   pull_request:
11     branches: [ dev ]
12 
13 # A workflow run is made up of one or more jobs that can run sequentially or in parallel
14 jobs:
15   # This workflow contains a single job called "build"
16   build:
17     # The type of runner that the job will run on
18     runs-on: ubuntu-latest
19 
20     # Steps represent a sequence of tasks that will be executed as part of the job
21     steps:
22       # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
23       - uses: actions/checkout@v2
24 
25       # Runs a single command using the runners shell
26       - name: Run a one-line script
27         run: echo Hello, world!
28 
29       # Runs a set of commands using the runners shell
30       - name: Run a multi-line script
31         run: |
32           echo Add other actions to build,
33           echo test, and deploy your project.
  • name:CI 是指定流程的名稱是“CI”,當actions開始執行的時候,我們點actions選項卡切換到actions頁面就能看到

 

 

 上圖中紅框的就是這個 name

 

  • on: 指定觸發時機,是push還是pull的時候觸發腳本
 7 on:
 8   push:
 9     branches: [ dev ]

  這段例子的含義就是當本地的代碼push到名為dev的分支中觸發,如果我們不管分支只要push就觸發可以這么寫:

 7 on:[push]

同理 pull和push類似。

  • jobs里面的是腳本列表,腳本與腳本直間通過名字來區分,上面的例子中只有一個腳本,就是build,也就是說build就是腳本名,而build里面的就是腳本。

 

  • runs-on:指定宿主環境,我們的腳本要在什么環境下執行,通常是linux,而且例子中默認給的也是這個ubuntu
  runs-on: ubuntu-latest
  # github中也給了window和ios系統做為宿主環境
  • steps:執行的步驟,里面通過 - 來區分它的步驟,name是步驟名,可以沒有,下面的run用來運行命令和腳本。

   一個name下可以寫多個run:

30       - name: Run a multi-line script
31         run: echo Add other actions to build,
32         run: echo test, and deploy your project.

 

   也可以寫一個run: |,下一行開始寫多個命令:

30       - name: Run a multi-line script
31         run: |
32           echo Add other actions to build,
33           echo test, and deploy your project.

 

   steps中的腳本,常用的還有uses,with,env等關鍵字。

 

  • steps中的uses關鍵字和with關鍵字

  uses用來調用第三方依賴,with則是這個依賴方法需要的入參。

  這部分很常用,因為我們在用actions的時候大多都會找一些比較成熟的工具(輪子)直接使用,很少會自己寫輪子。

  在下面的案例中,我會詳細解釋這塊。

  而上面模板例子里的

  - uses: actions/checkout@v2

 

  這行代碼我們幾乎都會用上,它可以獲取到我要操作的分支的代碼,就是把它checkout

 

Github Actions實現Github Page的自動編譯打包上傳

如果上面的解釋你有些迷茫的話,做完下面這個,你也會操作Github Actions了。

*** 說一下yml文件,yml並不是純腳本,這有點類似於json文件,是一種保存鍵值對數據的文件類型。

  • 在git工程下先創建一個 .github 文件夾,如下圖:

    

 

  .github文件夾和你的 .git文件夾是在同一個路徑下,不過一般.git文件夾默認是被隱藏的。

  

  • 然后.github文件夾下在創建一個workflows文件夾

  注意:是 workflows 而不是 workflow , 也不是 .workflows,起初我在構建的時候就因為名字多一個點和少個s 始終無法看到到actions的頁面。

  • 再在workflows文件夾下創建一個yml文件,名字隨便起,github只要能找到workflows文件夾,並且下面有yml文件就會執行它的腳本,如果有多個,會順次執行。

  在這我附上我本地的目錄解構,方便參考:

  

  

  • 以下是yml文件的寫法,我每行都附上注釋,方便理解

  

name: "github actions build and deploy gh-pages" #流程名稱
on: [push] #當對當前倉庫push代碼的時候觸發
jobs: 
  build-and-deploy: #腳本名稱
    runs-on: ubuntu-latest #運行在烏班圖linux上
    steps:
      - name: Checkout  #步驟1:checkout
        uses: actions/checkout@v2.3.1 #checkout需要引用的依賴
        with:
          persist-credentials: false #checkout依賴參數:不保存證書
      - name: install and build #步驟2:安裝依賴和打包
        run: | #運行下面兩行命令
          npm install #安裝依賴,當前分支的根目錄做為默認目錄
          npm run build #打包代碼

      - name: Install SSH Client #步驟3:關聯ssh私鑰
        uses: webfactory/ssh-agent@v0.2.0 #這里調用這個第三方的庫,可以直接關聯ssh私鑰
        with: #下面是參數
#這里需要通過github的環境參數中獲取私鑰,並傳給這個庫,(這是最安全的,git當然不能讓用戶直接輸入私鑰內容) ssh
-private-key: ${{ secrets.DEPLOY_KEY }} - name: Deploy #步驟4:把編譯好的靜態目錄上傳到gh-pages分支上 uses: JamesIves/github-pages-deploy-action@3.5.9 #這里調用第三方依賴,用於上傳代碼到指定分支上 with: SSH: true #是否通過ssh方式 BRANCH: gh-pages #github pages 默認的分支 FOLDER: dist #上傳文件的目錄,我這個目錄在根目錄下,如果是子目錄可以這么寫 docs/.vuepress/dist

   

  • 上面的腳本中涉及到一個環境變量 
  ${{ secrets.DEPLOY_KEY }} 

 

   在github上一切與用戶隱私相關的,都只有登錄賬號的本人才能看到,比如說ssh公鑰私鑰,

  但actions想要操作github就必須要獲取這些認證,所以github給actions暴露了一些環境變量,而actions腳本可以通過${{xxxx}}的方式來獲取環境變量的內容。

  這里我舉個例子:

  

 

 

 

   在上面的這個倉庫中,先選擇settings選項卡,切換到倉庫的設置頁面,

  然后左側菜單的選擇secrets進入隱私頁面,右側點New secret按鈕來創建一個私鑰變量,

  在上圖中我已經把私鑰創建完了,並且名稱是DEPLOY_KEY,而DEPLOY_KEY就是獲取私鑰的環境變量名稱,

  也就是腳本中的 ${{ secrets.DEPLOY_KEY }}

 

  • 上傳默認分支

  Actions只識別默認分支的 .github/workflows/xxx.yml 腳本,如果腳本不在默認分支下,Actions則因為無法找到顯示初始頁面。

  (這里算是一個坑)

      

  如上圖,我這里的工作流程在dev分支中

    

  而dev並不是默認分支,默認分支gh-pages中並沒有.github文件夾,這時我點擊Actions

      

 

    它會顯示這個頁面,這是初始頁面,因為找不到workflows所以github在引導你創建一個,

    而一直處在上面這個頁面的原因主要是找不到工作流程文件,

    git會從默認分支下找.github/workflows/*.yml文件,並且*.yml是個合法的yml腳本,你不能用json語法冒充,

    所以,如果不滿足上面這個條件,就會一直顯示上圖頁面。

     

    反觀如果找到工作流程呢

    

 

  就會進入這個畫面,而results是每次執行的記錄。

   當上面的頁面出現,但results並沒有新增記錄,原因就是on事件沒有觸發,on包括push和pull,那就有可能你的語法寫錯了。

  

on: [push]  #這里一定要有[]中括號,否則就不會觸發。

 

  on: 

    push:

           barnchs: [dev] #這里也要有[]中括號,否則不會觸發

 

  還有一點注意了,yml文件不支持 // 這種注釋,習慣這么寫的小伙伴如果在on或者之前添加了 //這種注釋,因為語法不允許,所以也不會觸發腳本。

  

  • 通過push代碼觸發流程執行

    

 

   如果觸發了工作流程,腳本就會被執行,如上圖就會多出一條記錄。其中update是你在commit后面的注釋。點擊update進入下圖

      

 

  這里能看到每個job和每個step,因為只有一個job所以左側菜單只顯示一個,右側則是按順序執行每個step。step可以展開看到詳細的信息,如下圖:  

    

 

  這些信息方便我們查看錯誤。

 

   最后附上一個執行成功的圖片,以供參考:

  

 

 

 

 

 

   

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM