之前看了兩篇關於 GitHub Action 的文章:
也想來玩玩看 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 檔案主要分成幾個部分
- 此段是指當 push 到 master 這個 branch 時會觸發
on: push: branches: [ master ]
- jobs 底下是指觸發後會做的任務,此段是指 run 一個 ubuntu 的環境
jobs: build: runs-on: ubuntu-latest
- 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
則可以進到虛擬機,然後
- 產生金鑰
ssh-keygen
- 進到
.ssh
cd ~/.ssh
- 將 public key 加入 authorized keys
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
- 複製 private key,並貼到
LINODE_SSHKEY
cat ~/.ssh/id_rsa
三、GitHub 設定 SSH keys
如果 repo 是公開的話,就不需要進行此步驟。但如果是私有專案,沒設定就會無法成功 pull 程式碼。
首先一樣到虛擬機,複製 public key
cat ~/.ssh/id_rsa.pub
之後到 GitHub
- 點選個人
profile > Settings
- 點選左方
SSH and GPG keys
- 點選
New SSH key
- title 設定可辨識的文字,key 則貼上 public key
- 接下來到 clone 程式碼的地方,選擇 SSH,並將 url 複製起來
接下來到虛擬機:
- 如果還未 clone 程式碼,可以直接 clone
- 如果已經有 clone 程式碼,則可以用以下指令調整
git remote set-url origin {SSH url}
最終步驟
都設定完成後,接下來只要 push 程式碼到 master,就可以到上方的 Actions
,查看 GitHub Action 是否有成功執行囉。
小結
之前在做一些小專案,比較常部署到 Heroku,裡面就處理好自動部署,這次玩 GitHub Action 覺得很有趣,嘗試自動部署上去也覺得很興奮。之後有機會也想動手玩玩看 Drone、Jenkins,如果內容有誤,歡迎建議或指正。
如果覺得文章對你有幫助,也可以透過贊助一杯咖啡給予我鼓勵唷