自定義?Github?Action?庫實(shí)戰(zhàn)詳解
auto-push-oss Action
雖然在 Github 市場有推送 OSS 相關(guān)的 Action,但是我還是選擇改造我運(yùn)行了好多年的腳本來自定義符合自己要求的 Action 庫。
編寫步驟:
- 添加依賴、編譯腳本、action.yml配置
- 編寫自述文檔
- 編寫indnex.js腳本
添加依賴、編譯腳本、action.yml配置:
添加必要依賴:
"@actions/core": "^1.9.1" // 讀取 yml 參數(shù) "@vercel/ncc": "^0.34.0" // 打包腳本 "ali-oss": "^6.17.1" // ali-oss依賴
添加編譯腳本:
"build": "ncc build index.js --license licenses.txt"
編寫 action.yml 配置文件:
name: "auto-push-oss" description: "自動(dòng)推動(dòng)目錄到 OSS" # 定義輸入?yún)?shù) inputs: root: description: "待推送路徑" required: true bucket: description: "oss bucket" required: true region: description: "oss region" required: true accessKeyId: description: "oss accessKeyId" required: true accessKeySecret: description: "oss accessKeySecret" required: true runs: # 腳本運(yùn)行環(huán)境(按官方文檔給的12版本來使用) using: "node12" # 腳本執(zhí)行入口(這里我們要用@vercel/ncc編譯) main: "dist/index.js"
編寫自述文檔:
自述文檔需要說明這個(gè) Action 的主要作用、需要配置的參數(shù)和最小使用的例子~
auto-push-oss
方便將常見的 Vue 項(xiàng)目,VuePress 項(xiàng)目構(gòu)建到根目錄的 dist 文件夾推送到指定從 oss 桶的根目錄,特別適合在 oss 托管 VuePress 博客~
Inputs
參數(shù) | 描述 |
---|---|
root | 待推送文件夾 |
bucket | oss bucket |
region | oss region |
accessKeyId | oss accessKeyId |
accessKeySecret | oss accessKeySecret |
Example usage
uses: OSpoon/auto-push-oss@main with: root: public bucket: it200 region: oss-cn-beijing accessKeyId: ${{secrets.accessKeyId}} accessKeySecret: ${{secrets.accessKeySecret}}
編寫indnex.js腳本:
提供path、fs、ali-oss 和獲取 yml 參數(shù)的@actions/core依賴~
const path = require("path"); const fs = require("fs"); const core = require("@actions/core"); const OSS = require("ali-oss");
通過@actions/core提供的getInput來獲取 yml 配置的參數(shù)變量~
const root = core.getInput("root"); const bucket = core.getInput("bucket"); const region = core.getInput("region"); const accessKeyId = core.getInput("accessKeyId"); const accessKeySecret = core.getInput("accessKeySecret");
OSS 推送文件主腳本
// TODO 必要依賴 // TODO 接收輸入?yún)?shù) const client = new OSS({ bucket, region, accessKeyId, accessKeySecret, }); const rootPath = root || "dist"; const isHave = fs.existsSync(rootPath); if (!isHave) { throw new Error("路勁不存在"); } let filepaths = []; let putCount = 0; function readFileSync(filepath) { let files = fs.readdirSync(filepath); files.forEach((filename) => { let p = path.join(filepath, filename); let stats = fs.statSync(p); if (stats.isFile()) { filepaths.push(p); } else if (stats.isDirectory()) { readFileSync(p); } }); } function put(filepath) { const p = filepath.replace(rootPath, "").substr(1); return client.put(p.replace("\", "/"), filepath); } async function update() { try { // 遞歸獲取所有待上傳文件路徑 readFileSync(rootPath); let retAll = await filepaths.map((filepath) => { putCount++; console.log(`任務(wù)添加: ${path.basename(filepath)}`); return put(filepath); }); Promise.all(retAll).then((res) => { const resAll = res.map((r) => { return r.res.statusCode === 200; }); if (Object.keys(resAll).length === putCount) { console.log("發(fā)布成功"); } }); } catch (e) { console.log(e); } } // 上傳發(fā)布 update();
use auto-push-oss
下面這份配置就是將網(wǎng)站打包并推送 OSS 的工作流程,當(dāng)監(jiān)測到新代碼 PUSH 到 Github 后就開始執(zhí)行auto-push-2-oss工作流,分別是:
- 第一步使用actions/checkout@v2拉取代碼;
- 第二步執(zhí)行npm install && npm run build安裝依賴并輸出網(wǎng)站資源;
- 第三步使用OSpoon/auto-push-oss@main推送網(wǎng)站資源到 OSS;
auto-push-oss@main需要配置我們在自述文檔中提到的幾個(gè)必要參數(shù)需要通過 with 配置,其中accessKeyId和accessKeySecret由于涉及到 OSS 的相關(guān)秘鑰,不建議也不應(yīng)該明文展示到 Github,所以需要使用到項(xiàng)目級(jí)別的環(huán)境變量。
name: push-2-oss on: [push] jobs: auto-push-2-oss: runs-on: ubuntu-latest steps: - name: checkout uses: actions/checkout@v2 - name: install & build run: npm install && npm run build - name: push public oss uses: OSpoon/auto-push-oss@main with: root: public bucket: it200 region: oss-cn-beijing accessKeyId: ${{secrets.accessKeyId}} accessKeySecret: ${{secrets.accessKeySecret}}
總結(jié)
編寫完 Action 后成功也接入了 workflows ,往后就不再重復(fù)的執(zhí)行構(gòu)建命令和發(fā)布腳本了,只需要將修改的代碼 PUSH 到 Github 后面的工作將自動(dòng)完成~
本文項(xiàng)目已推送至GitHub,歡迎克隆演示:git clone git@github.com:OSpoon/auto-push-oss.git
以上就是自定義 Github Action 庫實(shí)戰(zhàn)詳解的詳細(xì)內(nèi)容,更多關(guān)于Github Action 庫自定義的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
VS2019無法啟動(dòng)程序(系統(tǒng)找不到指定文件)解決辦法
這篇文章主要介紹了VS2019無法啟動(dòng)程序(系統(tǒng)找不到指定文件)解決辦法,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08即時(shí)通訊軟件在網(wǎng)頁上啟動(dòng)臨時(shí)對(duì)話的鏈接代碼
旺旺臨時(shí)對(duì)話的鏈接,MSN臨時(shí)對(duì)話的鏈接,Skype臨時(shí)對(duì)話的鏈接2008-11-11windows 中 \r\n 區(qū)別于 類unix中的\n 疑問理解(crlf回車換行)
windows 中 \r\n 區(qū)別于 類unix中的\n 疑問 迎刃而解,需要的朋友可以參考下。2011-08-08詳解使用Postman模擬瀏覽器的HTTP請求并獲取返回?cái)?shù)據(jù)
這篇文章主要為大家介紹了在瀏覽器中,獲取網(wǎng)頁中的某一個(gè)請求信息,并將其導(dǎo)入到Postman軟件,并進(jìn)行API請求測試的方法,需要的可以參考下2024-03-03知識(shí)蒸餾聯(lián)邦學(xué)習(xí)的個(gè)性化技術(shù)綜述
這篇文章主要為大家介紹了知識(shí)蒸餾聯(lián)邦學(xué)習(xí)的個(gè)性化技術(shù)綜述,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05git-github 子模塊倉庫更新(git submodule)及git中submodule子模塊
這篇文章主要介紹了git-github 子模塊倉庫更新(git submodule)/git中submodule子模塊的添加、使用和刪除,使用子模塊后,不必負(fù)責(zé)子模塊的維護(hù),只需要在必要的時(shí)候同步更新子模塊即可,需要的朋友可以參考下2023-03-03