雙十一的時候,看着騰訊雲有不小的折扣,本着虧死🐴哥的想法,買了一年的服務器😝html
...node
時光荏苒,一直閒置到如今...git
今天看到Gayhub的 actions 的功能,決定嘗試一番,也踩了很多坑,就此記錄下來github
你們知道,持續集成由不少操做組成,好比抓取代碼、運行測試、登陸遠程服務器,發佈到第三方服務等等。GitHub 把這些操做就稱爲 actions。 ——《GitHub Actions 入門教程》 阮一峯docker
GitHub Actions 有一些本身的術語。npm
個人項目是基於 midway 框架的一個後端應用。ubuntu
點擊 Actions ,建立一個新的 workflow後端
選擇nodejs的模板,按照項目自行選擇,安全
這時候會看見一個yml
文件,右邊是 actions 的市場,我以爲相似於 docker 的鏡像,做用是提升複用率,減小重複勞做。bash
# 這是基礎模板
# 這個 workflow 的名字,能夠隨意命名
name: Node.js CI
# 觸發條件
on: [push]
jobs:
# 一個名爲 build 的 job
build:
# 虛擬機環境
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [8.x, 10.x, 12.x]
steps:
# 一個step
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- run: npm install
- run: npm run build --if-present
- run: npm test
env:
CI: true
複製代碼
當你 push 代碼的時候,github 就會開始執行這個文件定義的任務,固然這個例子不能直接知足咱們的需求,咱們須要對他進行改動。
# hah, 如今看起來比以前豐滿了不少
name: xxxx CI
# 觸發條件修改成:當master分支,有push的時候,執行任務
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
# step1: 獲取源碼
- name: chekcout
uses: actions/checkout@v2
# step2: 將源碼複製到服務器 #坑
- name: Deploy to Server
uses: easingthemes/ssh-deploy@v2.0.8
env:
# 這個地方的用法會在下面解釋,簡單的說就是一個變量
# 爲了安全,被寫在一個其餘的地方
SSH_PRIVATE_KEY: ${{ secrets.TOKEN }}
REMOTE_HOST: 'xxx.xx.xxx.xxx'
REMOTE_USER: 'xxx'
SOURCE: ''
TARGET: '/xxxxxxx/xxxxxxx'
ARGS: '-avzr --delete'
# step3: 經過ssh鏈接服務器,執行安裝和啓動服務
# 其實能夠在github提供的虛擬機裏面完成代碼的打包
# 可是node_modules太大了,個人服務及帶寬過小,傳輸速度太慢了
- name: start server
uses: appleboy/ssh-action@master
with:
host: 'xxx.xx.xxx.xxx'
username: 'xxx'
key: ${{ secrets.TOKEN }}
script: | cd /xxxxxxx/xxxxxxx npm install npm run stop npm run build npm run start 複製代碼
這個坑不屬於 actions,折騰了好久是由於easingthemes/ssh-deploy
沒法鏈接服務器。
登陸服務器
[root@host ~]$ ssh-keygen
複製代碼
一路回車,會在root用戶的家目錄中生成一個.ssh的隱藏目錄。內含兩個密鑰文件。id_rsa 爲私鑰,id_rsa.pub 爲公鑰。
[root@host ~]$ cd .ssh
[root@host .ssh]$ cat id_rsa.pub >> authorized_keys
複製代碼
爲了確保鏈接成功,請保證如下文件權限正確:
[root@host .ssh]$ chmod 600 authorized_keys
[root@host .ssh]$ chmod 700 ~/.ssh
複製代碼
編輯 /etc/ssh/sshd_config 文件,進行以下設置:
RSAAuthentication yes
PubkeyAuthentication yes
PermitRootLogin yes
複製代碼
[root@host .ssh]$ service sshd restart
複製代碼
[root@host .ssh]$ cat id_rsa
複製代碼
複製文件,注意:要複製全,包括上下的 -------- BEGIN .... -----------
。
點擊進入項目設置:
進入左側的Secrets
添加一個 secret
name隨意設置,須要和上面設置${{ secrets.TOKEN }}
對應上,value就能夠將上面複製的私鑰放進去,如今就能夠正確的鏈接服務器了。
真香啊!😬。但願對你們想嘗試的人有幫助。整個workflow也很簡陋,但願大🔥能夠提意見,讓我改進。
最後發個Demo成品地址。