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

Alan Syue
5 min readMar 13, 2021

--

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

  1. 莫力全 Kyle Mo 實作開源小工具,與 Github Actions 的第一次相遇!
  2. Max行銷誌 GitHub Action 上傳 GitHub repo 至 GCP Storage

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

一、建立 GitHub Action yml 檔

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

name: project deployon:
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。如果內容有誤,歡迎建議或指正。

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Alan Syue
Alan Syue

Written by Alan Syue

Backend Engineer at UPN | Love to share everything

No responses yet

Write a response