最近由于自己的個人應用增加,每次都需要在服務器手動發布,覺得特別麻煩,所以想通過代碼控制自動發布,直接選擇了GitHub Action。
GitHub Action持續集成服務,目前已經免費開放使用,由于大部分人的個人項目都是放在github上,那么使用它來發布、測試、部署,是非常方便的。
Github Action配置
下面的內容默認你已經會創建Github Action,官方提供了很多Github Action 配置模版,可以根據自己的需求隨意選擇,不是太了解的可以先參考阮一峰 GitHub Actions入門教程,了解一下Github Action。
我們來看看Github Action配置文件的基本構成,配置文件格式是.yml,示例如下:
# main.yml
# 一個 workflow,名字為Github Action Example
name: Github Action Example
# 觸發 workflow 的事件
on:
push:
# 分支隨意
branches:
- master
# 一個workflow由執行的一項或多項job
jobs:
# 一個job任務,任務名為build
build:
# runs-on 指定job任務運行所需要的虛擬機環境(必填字段)
runs-on: ubuntu-latest
# steps是每個Job的運行步驟,可以包含一個或多個步驟
steps:
# action命令,切換分支獲取源碼
- name: Checkout
# 使用action庫 actions/checkout獲取源碼
uses: actions/checkout@master
# action命令,安裝Node10
- name: use Node.js 10
# 使用action庫 actions/setup-node安裝node
uses: actions/setup-node@v1
with:
node-version: 10
# action命令,install && test
- name: npm install and test
# 運行的命令或者 action
run: |
npm install
npm run test
# 環境變量
env:
CI: true
- Action是工作流中最小的可移植構建塊。你可以創建自己的動作,使用從GitHub社區共享的action庫,以及自定義公共action庫。
- Step是Job執行的一組任務。Job中的每個步驟都在同一運行程序中執行,從而允許該Job中的操作使用文件系統共享信息,Step可以運行命令或action。
- Job由Step構成。你可以定義工作流文件中Job的運行方式的依賴關系規則。Job可以同時并行運行,也可以依賴于先前Job的狀態依次運行。
- Workflow由一個或多個Job組成,可以通過事件進行計劃或激活。你可以在存儲庫中設置一個可配置的自動化過程,以在GitHub上構建,測試,打包,發布或部署任何項目。
Github: Github Action插件查詢庫,可以查詢你需要的action庫,這些都是共享的,如果滿足不了需求也可以自己定義。
Github Action發布阿里云ECS
下面就是我發布到阿里云ECS的 Github Action配置文件
我的Github Action服務配置
# main.yml
name: deploy to aliyun
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
# 切換分支
- name: Checkout
uses: actions/checkout@master
# 下載 git submodule
- uses: srt32/git-actions@v0.0.3
with:
args: git submodule update --init --recursive
# 使用 node:10
- name: use Node.js 10
uses: actions/setup-node@v1
with:
node-version: 10
# npm install
- name: npm install and build
run: |
npm install
npm run build
env:
CI: true
# Deploy
- name: Deploy
uses: easingthemes/ssh-deploy@v2.0.7
env:
SSH_PRIVATE_KEY: ${{ secrets.ACCESS_TOKEN }}
ARGS: "-avz --delete"
SOURCE: "[Current File Dir]"
REMOTE_HOST: "[Domain]"
REMOTE_USER: "[UserName]"
TARGET: "[Server Dir]"
以上是我的配置文件,action插件請根據自己的需求合理選擇。我是要博客網站,發布到阿里云服務上,所以采用以上配置,而最后的action Deploy中action插件的選擇,也是根據需求,在Github: action插件庫中選擇的。
(補充注意??:如果你是要發布到阿里云服務器,同時也使用以上配置action文件,請記住:ACCESS_TOKEN 是服務器ssh密鑰對的私鑰部分;應將服務器公鑰部分添加到接收部署的服務器上的authorized_keys文件中。正常情況下,ACCESS_TOKEN 是 服務器 ~/.ssh目錄下的id_rsa 文件中 的內容。仔細看一下
https://github.com/marketplac... 文檔中的字段配置描述)
最新更新20220424
由于githubs action 安全升級的原因,我發現有了這個報錯:
Starting the git Action
fatal: unsafe repository ('/github/workspace' is owned by someone else)
To add an exception for this directory, call:
git config --global --add safe.directory /github/workspace
按照提示修改配置,也在網上查找了很多辦法,都不太行,最后決定將 srt32/git-actions@v0.0.3 移除了
- - uses: srt32/git-actions@v0.0.3
- with:
- args: git submodule update --init --recursive
更多
使用GitHub Actions發布Hexo網站到GitHub Pages
GitHub Actions發布博客到阿里云OSS
GitHub Actions自動構建鏡像并推送到阿里云容器鏡像服務
參考
Core concepts for GitHub Actions
阮一峰: GitHub Actions 入門教程