利用騰訊雲函數部署.Net 5米游社原神每日簽到功能
自從GitHub批量禁止濫用Action功能後,項目不得不考慮另外方案執行應用。其中騰訊雲函數被大家作為不錯的選擇(雖然馬上也要收費了)。
但對於.Net的部署目前資源很少,而且我也沒學過bash。在去年請教了大佬後,終於誤打誤撞的配置成功了。本篇部落格只是記錄過程,有什麼遺漏還需要各位大佬指出。
腳本步驟
首先在新建,選擇 運行環境 Custom Runtime。
boostrap配置
雖然在文檔有給出包需要包含 boostrap,但我並不知道boostrap具體實現方式,以下是我從文檔和大佬的指引下寫的執行程式碼,下圖是執行輸出日誌,說明下一步是調用index.sh。其他地方不變。
- 函數引導載入 SCF 首先檢索部署包中的可執行引導文件 boostrap,根據檢索結果並進行如下操作: 檢索到 bootstrap 文件且可執行,載入執行 boostrap 程式,進入函數初始化階段。 未檢索到 bootstrap 文件或文件不可執行,返回 bootstrap 文件不存在,啟動失敗。
#! /bin/bash set -euo pipefail FuncFile="$(echo $_HANDLER | cut -d. -f1).sh" echo "[step 1]初始化,開始載入函數文件 $FuncFile" source ./$FuncFile echo "=>完成" echo "[step 2]初始化完成,開始發送ready訊號" curl -d " " -X POST -s "//$SCF_RUNTIME_API:$SCF_RUNTIME_API_PORT/runtime/init/ready" echo "=>完成" echo "[step 3]開始循環監聽處理事件調用" while true do HEADERS="$(mktemp)" echo "=>長輪詢獲取事件" EVENT_DATA=$(curl -sS -LD "$HEADERS" -X GET -s "//$SCF_RUNTIME_API:$SCF_RUNTIME_API_PORT/runtime/invocation/next") echo "=>監聽到事件:$EVENT_DATA" echo "=>調用函數,開始處理事件" $(echo "$_HANDLER" | cut -d. -f2) "$EVENT_DATA" RESPONSE=$EVENT_DATA echo "=>返回 $RESPONSE" echo "=>推送函數處理結果" curl -X POST -s "//$SCF_RUNTIME_API:$SCF_RUNTIME_API_PORT/runtime/invocation/response" -d "$RESPONSE" done
index.sh配置
參考 //github.com/RayWangQvQ/BiliBiliToolPro/blob/main/tencentScf/index.sh
只需要在合適位置把執行程式放進去即可。因為我沒有額外的參數配置,所以只需要執行 GenshinDailyHelper
echo "成功載入index.sh函數文件" function main_handler () { echo "進入main_handler" EVENT_DATA=$1 echo "$EVENT_DATA" 1>&2; echo "開始運行GenshinDailyHelper......" ./GenshinDailyHelper echo "函數結束" }
項目步驟
以上已經把雲函數需要的兩個文件配置好後,接下來該在項目配置怎麼再外部獲取參數了。
可以使用 Environment.GetEnvironmentVariables() 獲取變數。這裡就簡單粗暴一點。
var environmentVariables = Environment.GetEnvironmentVariables(); if (environmentVariables.Contains("scf_cookie")) { cookies = environmentVariables["scf_cookie"]?.ToString()?.Split("#"); }
然後打開虛擬機,將項目編譯好(dotnet-publish),打包成zip格式文件。
文件目錄如下
├ bootstrap └ index.sh
參考資料
//github.com/RayWangQvQ/BiliBiliToolPro/tree/main/tencentScf
//cloud.tencent.com/document/product/583/47610
//docs.microsoft.com/en-us/dotnet/core/tools/dotnet-publish
項目鏈接
//github.com/yinghualuowu/GenshinDailyTools
//github.com/yinghualuowu/GenshinDailyHelper.Docs