Action 基礎
常用功能
實踐
一 每天傳送天氣郵件
二 打包構建 & 檔案上傳到伺服器
場景:在github上提交程式碼之後自動打包部署到遠端伺服器(騰訊雲/阿里雲等)
實現:
# workflow名
name: deploy to tencentCloud
on: # 此CI/CD觸發時的事件
push: # 在程式碼提交時自動觸發
branches:
- main
# 一個 CI/CD 的工作流有許多 jobs 組成,比如最典型的 job 是 lint,test,build。
jobs:
build: # 構建job
runs-on: ubuntu-latest # 跑workflow的伺服器系統
steps: # job的一系列動作
# 切換分支獲取原始碼
- name: Checkout # step的名稱,將會在 github action 的控制檯中顯示
# 選擇一個action,可以理解為若干 steps.run,有利於程式碼複用
uses: actions/checkout@v2
# 安裝使用 node:14
- name: use Node.js 14
uses: actions/setup-node@v1
with:
node-version: 14
# 執行命令,npm install && npm run build
- name: npm install and build
run: |
npm install
npm run build
env:
CI: true
# 部署到騰訊雲伺服器
- name: 上傳到騰訊雲
uses: easingthemes/ssh-deploy@main
env:
# 本地.ssh檔案下的私鑰id_rsa,存在secrets的TOKEN中
SSH_PRIVATE_KEY: ${{ secrets.TOKEN }}
# 複製操作的引數。"-avzr --delete"意味部署時清空伺服器目標目錄下的檔案
ARGS: "-avzr --delete"
# 源目錄,相對於倉庫內容根目錄的路徑
SOURCE: "dist/"
# 遠端伺服器地址
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
# 遠端伺服器使用者名稱
REMOTE_USER: "root"
# 目標目錄(遠端伺服器路徑)
TARGET: "/data/www"
說明:
- 在 main 分支上提交程式碼的時候會觸發 workflow
- 使用node v14 下打包構建,待完成之後將打包產物上傳到遠端伺服器
三 push 之後自動 release
場景:Release 之後,可以使用jsDelivr 實現免費CDN的功能。 可以參考這裡:免費CDN:jsDelivr+Github 使用方法
實現:
name: release CI
# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the main branch
push:
branches:
- main
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- name: Checkout
uses: actions/checkout@v2
# 讀取 package.json 檔案內容
- name: read version
id: version
uses: ashley-taylor/read-json-property-action@v1.0
with:
path: ./package.json
property: version
# 執行 Release
- name: Release
uses: actions/create-release@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: v${{steps.version.outputs.value}}
release_name: v${{steps.version.outputs.value}}
body: Release v${{steps.version.outputs.value}}
draft: false
prerelease: false
說明:
- 在 main 分支上提交程式碼的時候會觸發 workflow
- 每次部署都是正式版本