
之前看了兩篇關於 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 - 進到 
.sshcd ~/.ssh - 將 public key 加入 authorized keys
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys - 複製 private key,並貼到 
LINODE_SSHKEYcat ~/.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,如果內容有誤,歡迎建議或指正。
如果覺得文章對你有幫助,也可以透過贊助一杯咖啡給予我鼓勵唷

![[評價] innowatt mac book 抗藍光防窺片](https://static.coderbridge.com/images/covers/default-post-cover-2.jpg)
