github actions 初次體驗

雙十一的時候,看着騰訊雲有不小的折扣,本着虧死🐴哥的想法,買了一年的服務器😝html

...node

時光荏苒,一直閒置到如今...git

今天看到Gayhub的 actions 的功能,決定嘗試一番,也踩了很多坑,就此記錄下來github

start

什麼是action

你們知道,持續集成由不少操做組成,好比抓取代碼、運行測試、登陸遠程服務器,發佈到第三方服務等等。GitHub 把這些操做就稱爲 actions。 ——《GitHub Actions 入門教程》 阮一峯docker

GitHub Actions 有一些本身的術語。npm

  1. workflow (工做流程):持續集成一次運行的過程,就是一個 workflow。
  2. job (任務):一個 workflow 由一個或多個 jobs 構成,含義是一次持續集成的運行,能夠完成多個任務。
  3. step(步驟):每一個 job 由多個 step 構成,一步步完成。
  4. action (動做):每一個 step 能夠依次執行一個或多個命令(action)。

在github上建立項目

個人項目是基於 midway 框架的一個後端應用。ubuntu

建立 Actions

點擊 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 就會開始執行這個文件定義的任務,固然這個例子不能直接知足咱們的需求,咱們須要對他進行改動。

修改 workflow

# 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 複製代碼

easingthemes/ssh-deploy@v2.0.八、appleboy/ssh-action@master 使用說明

坑 —— ssh如何使用私鑰登陸服務器?

這個坑不屬於 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
複製代碼
設置 SSH,打開密鑰登陸功能

編輯 /etc/ssh/sshd_config 文件,進行以下設置:

RSAAuthentication yes
PubkeyAuthentication yes

PermitRootLogin yes
複製代碼
重啓SSH服務
[root@host .ssh]$ service sshd restart
複製代碼
複製私鑰到github
[root@host .ssh]$ cat id_rsa
複製代碼

複製文件,注意:要複製全,包括上下的 -------- BEGIN .... -----------

點擊進入項目設置:

進入左側的Secrets

添加一個 secret

name隨意設置,須要和上面設置${{ secrets.TOKEN }}對應上,value就能夠將上面複製的私鑰放進去,如今就能夠正確的鏈接服務器了。

結論

真香啊!😬。但願對你們想嘗試的人有幫助。整個workflow也很簡陋,但願大🔥能夠提意見,讓我改進。

最後發個Demo成品地址。

參考文章

相關文章
相關標籤/搜索