0%

Github Actions SSH CD

前言

讓遠端伺服器( ex: GCE)在本機修改 push 上 github 後,可以自動 git pull 更新。
本篇實作皆參考官方文件

步驟

1. 建立 github 專案,產生 action 範本,接著 git clone 至本機端和遠端

  • 專案開 public,clone 用 https 比較省事
  • 若還沒使用過 Action 可以先參考這篇

2. 開啟一個 GCE

3. 從本機端 ssh 連線到 GCE

* 測試用自動產生的 ssh key 連線: `ssh -i ~/.ssh/google_compute_engine xxxxxxx@xx.xx.xxx.xx` 確定 key 可以用

4. 將 key 加密

  1. 用 gpg 加密 gpg --symmetric --cipher-algo AES256 ~/.ssh/google_compute_engine
  2. 輸入 passphrase (test)
  3. 將加密後的 key 複製到專案底下 mv ~/.ssh/google_compute_engine.gpg ~/xxx/xxx/google_compute_engine.gpg
  4. git push 上 Github

5. 修改 Actions 腳本(.github/workflows/main.yml)

主要跑四個項目:

  1. decrypt:取出在 github secrets 設定的 PASSPHRASE 參數來解密,並寫入 $HOME/secrets/key
  2. test printing:印出第一項目寫入的 $HOME/secrets/key
  3. chom:更改權限,以符合私鑰權限
  4. ssh: 連線至遠端並下指令 git pull

ssh參數可參考這裏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
name: CI

on: [push]

jobs:
build:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- name: Run a one-line script
run: echo Hello, world!
- name: decrypt
run: |
mkdir $HOME/secrets
gpg --quiet --batch --yes --decrypt --passphrase="$PASSPHRASE" \
--output $HOME/secrets/key google_compute_engine.gpg
env:
PASSPHRASE: ${{ secrets.PASSPHRASE }}
- name: test key
run: ls $HOME/secrets/key
- name: chmod
run: chmod 600 $HOME/secrets/key
- name: ssh
run: ssh -o StrictHostKeyChecking=no -i $HOME/secrets/key sarahcheng@35.229.180.75 "cd action_ci/;git pull"
# cd action_ci 要改成自己的 guthub 專案名稱

Job: 由 Step 所組成,每個 Job 皆在新的執行個體 (instance) 中執行。Job 可以同時執行,亦可取決於先前的 Job 狀態依序執行。

  1. git push 上 Github

6. 到 github settings 頁面設定 secrets

7. 新增一個 file 並 push,最後到遠端查看

OK

感謝我大 TTN 協助!!