用 GitHub Action 自動部署程式碼到 Linode


Posted by AlanSyue on 2021-03-13

之前看了兩篇關於 GitHub Action 的文章:

  1. 實作開源小工具,與 Github Actions 的第一次相遇!
  2. GitHub Action 上傳 GitHub repo 至 GCP Storage

也想來玩玩看 GitHub Action,這時想到最近在幫忙資訊種子官網開發,開發完新功能,發 PR 並 merge 後,需要自行到 Linode 虛擬機上 pull 程式碼。於是決定用 GitHub Action 來自動化此流程。以下分享操作的流程:

一、建立 GitHub Action yml 檔

首先在專案底下新建 .github/workflows/deploy.yml

name: project deploy

on:
  push:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: deploy to vm
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.LINODE_HOST }}
          username: ${{ secrets.LINODE_USERNAME }}
          key: ${{ secrets.LINODE_SSHKEY }}
          script: |
            cd {PATH}
            git pull

這個 yml 檔案主要分成幾個部分

  1. 此段是指當 push 到 master 這個 branch 時會觸發
    on:
    push:
     branches: [ master ]
    
  2. jobs 底下是指觸發後會做的任務,此段是指 run 一個 ubuntu 的環境
    jobs:
    build:
     runs-on: ubuntu-latest
    
  3. step 為 jobs 底下執行步驟,此段使用 ssh-action 連線到虛擬機,並執行 script 去 pull 程式碼
     steps:
       - uses: actions/checkout@v2
       - name: deploy to vm
         uses: appleboy/ssh-action@master
         with:
           host: ${{ secrets.LINODE_HOST }}
           username: ${{ secrets.LINODE_USERNAME }}
           key: ${{ secrets.LINODE_SSHKEY }}
           script: |
             cd {PATH}
             git pull
    

二、在 GitHub repo 設定 secret

步驟一的 yml 檔上,在 host, username, key,是拿 GitHub repo 的 secret。所以我們要到 GitHub 上設定,步驟是:
上方的 Settings > 左方的 Secrets > New repository secret

然後加上
LINODE_HOST => Lindoe 虛擬機的 host 位置
LINODE_USERNAME => 登入虛擬機的 username

LINODE_SSHKEY 則可以進到虛擬機,然後

  1. 產生金鑰
    ssh-keygen
    
  2. 進到 .ssh
    cd ~/.ssh
    
  3. 將 public key 加入 authorized keys
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    
  4. 複製 private key,並貼到 LINODE_SSHKEY
    cat ~/.ssh/id_rsa
    

三、GitHub 設定 SSH keys

如果 repo 是公開的話,就不需要進行此步驟。但如果是私有專案,沒設定就會無法成功 pull 程式碼。

首先一樣到虛擬機,複製 public key

cat ~/.ssh/id_rsa.pub

之後到 GitHub

  1. 點選個人 profile > Settings
  2. 點選左方 SSH and GPG keys
  3. 點選 New SSH key
  4. title 設定可辨識的文字,key 則貼上 public key
  5. 接下來到 clone 程式碼的地方,選擇 SSH,並將 url 複製起來

接下來到虛擬機:

  1. 如果還未 clone 程式碼,可以直接 clone
  2. 如果已經有 clone 程式碼,則可以用以下指令調整
    git remote set-url origin {SSH url}
    

最終步驟

都設定完成後,接下來只要 push 程式碼到 master,就可以到上方的 Actions,查看 GitHub Action 是否有成功執行囉。

小結

之前在做一些小專案,比較常部署到 Heroku,裡面就處理好自動部署,這次玩 GitHub Action 覺得很有趣,嘗試自動部署上去也覺得很興奮。之後有機會也想動手玩玩看 Drone、Jenkins,如果內容有誤,歡迎建議或指正。

如果覺得文章對你有幫助,也可以透過贊助一杯咖啡給予我鼓勵唷


#github action #CICD #devops #linode







Related Posts

Redux 介紹、如何串接 React 與 Redux

Redux 介紹、如何串接 React 與 Redux

 [Leetcode in Java] 104. Maximum Depth of Binary Tree

[Leetcode in Java] 104. Maximum Depth of Binary Tree

[ Day 05 ] 用 Puppeteer 來做自動化機器人吧 (四) : Dockerize 篇

[ Day 05 ] 用 Puppeteer 來做自動化機器人吧 (四) : Dockerize 篇


Comments