自从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 "http://$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 "http://$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 "http://$SCF_RUNTIME_API:$SCF_RUNTIME_API_PORT/runtime/invocation/response" -d "$RESPONSE"
done

index.sh配置

参考https://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

参考资料

https://github.com/RayWangQvQ/BiliBiliToolPro/tree/main/tencentScf

https://cloud.tencent.com/document/product/583/47610

https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-publish

项目链接

https://github.com/yinghualuowu/GenshinDailyTools
https://github.com/yinghualuowu/GenshinDailyHelper.Docs

利用腾讯云函数部署.Net 5米游社原神每日签到功能的更多相关文章

  1. 利用Github Action和.Net 5 自动执行米游社原神每日签到福利

    GenshinDailyHelper 原神的签到福利是需要单独下载APP进行才可以领取,并且每天需要打卡,虽然奖励并不是很可观,但有一些摩拉,食材和可观的经验书累计起来还是挺有吸引力的.可能本身不怎么 ...

  2. 利用.NET 5和Github Action 自动执行米游社原神每日签到福利

    背景 众所周知,原神的签到福利是需要下载app才可以领取的.但像我这种一般不怎么刷论坛的人,每天点开app签到很麻烦. 很多大佬利用Github的Action自动执行的模式,实现了很多好东西.加上.n ...

  3. 腾讯云函数免费搭建onedrive网盘

    目录 腾讯云函数 介绍 真免费? 搭建教程 准备条件 创建云函数 创建触发器 配置SecretId和SecretKey 添加onedriver盘 自定义域名 访问路径处理 总结 搭建期间遇到的问题 想 ...

  4. 如何利用腾讯云COS为静态博客添加动态相册

    前言 本文首发于个人网站Jianger's Blog,欢迎访问订阅.个人博客小站刚建站不久,想着除了主题里的功能外再添加上相册模块,于是半搜索半摸索把相册模块搞出来了,最后采用了利用腾讯云对象存储作图 ...

  5. 基于【腾讯云函数】/【GitHub Actions】/【Docker】的每日签到脚本(支持多账号使用)

    每日签到集合 基于[腾讯云函数]/[GitHub Actions]/[Docker]的每日签到脚本 支持多账号使用 特别声明: 本仓库发布的脚本及其中涉及的任何解锁和解密分析脚本,仅用于测试和学习研究 ...

  6. 在腾讯云上部署Hexo博客

    推荐理由 ----搭建个人的空间博客目前深受个人开发者的追捧,然而博客的种类和平台有很多,Hexo是一个开源的静态博客生成器.相比于其他博客而言它只要是web容器就能用.除了闷头专研技术之外,程序员还 ...

  7. 从QQ音乐开发,探讨如何利用腾讯云SDK在直播中加入视频动画

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯游戏云发表于云+社区专栏 看着精彩的德甲赛事,突然裁判一声口哨,球赛断掉了,屏幕开始自动播放"吃麦趣鸡盒,看德甲比赛&q ...

  8. Tencent Cloud 腾讯云上部署 EMR Cluster + Kafka + Confluent (Schema-Registry)

    腾讯云上有些操作比起 Amazon AWS 还是很方便的, 尤其部署EMR Cluster,下面详细介绍步骤:

  9. 利用腾讯云COS云对象存储定时远程备份网站

    版权声明:本文由张戈 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/942851001487125915 来源:腾云阁 h ...

随机推荐

  1. phpstorm 快捷生成函数

    在函数上一行键入 /** /** * @param $a * @param $b * @return mixed */ function abc($a, $b) { $c = $a + $b; ret ...

  2. docker安装部署、fastDFS文件服务器搭建与springboot项目接口

    一.docker安装部署 1.更新yum包:sudo yum update 2.安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动 ...

  3. final、finalize 和 finally 的不同之处?

    final 是一个修饰符,可以修饰变量.方法和类.如果 final 修饰变量,意味着该 变量的值在初始化后不能被改变.finalize 方法是在对象被回收之前调用的方法, 给对象自己最后一个复活的机会 ...

  4. ArrayList 与 LinkedList 的不区别?

    最明显的区别是 ArrrayList 底层的数据结构是数组,支持随机访问,而 LinkedList 的底层数据结构书链表,不支持随机访问.使用下标访问一个元素, ArrayList 的时间复杂度是 O ...

  5. java接口返回为空时候如何处理

    java前后端分离以后,后端常常返回给前端以下的内容: 如果遇到某个字段的内容为空的时候会出现这样的情况: 图中红色箭头的情况是一个数组集合,但是该集合为空,所以就返回null,但是我们如果想对于这样 ...

  6. Docker最常用的镜像命令和容器命令

    一.镜像相关命令 官方文档:https://docs.docker.com/referenc 1.1查看镜像 [root@localhost ~]# docker images REPOSITORY ...

  7. 运筹学之"连通图"和"最小枝杈树"和"最短路线问题"

    一.连通图 必须每个点都有关系 图1 不算连通图 图2含有圈v1,v2,v5,可优化 图3就是所需的连通图 注意:图>连通图>树 二.最小枝杈树 获取是所有节点的最小值,只要是连通图就好, ...

  8. css写作建议和性能优化小结

    1.前言 还有几天就到国庆中秋了,快要放假了,先祝大家节日快乐!之前写过js的写作建议和技巧,那么今天就来聊聊css吧!说到css,每一个网页都离不开css,但是对于css,很多开发者的想法就是,cs ...

  9. vue打包后空白页问题全记录 (background路径,css js404,jsonp等);

    总结一下vue打包后问题全记录:大部分开发者webpack基本上都是拿来就用的(并没有系统化的研究). 一 >>> 打包之后的静态文件不能直接访问:(例如dist)打包后搭个服务器才 ...

  10. python正则表达式替换或去除指定字符

    代码: import re regEx = "[\n""|]" # 去除字符串中的换行符.中文冒号.|,需要去除什么字符就在里面写什么字符 str= re.su ...