Teams app LukcyDraw 的升级之路

news2024/11/28 8:35:18

我已经有很长一段时间没有更新我的 Teams App:LuckyDraw 了,有很多用户反馈给我,因为快到圣诞,新年和春节了,很多公司都开始要使用LuckyDraw来搞抽奖活动,希望LuckyDraw能支持大用户量的抽奖,所以,我准备好好更新一波,让LuckyDraw支持 3000 用户的大群抽奖。

重新拾起 LuckyDraw 的第一步是先试一下之前的 CI/CD 是否还能工作,我编程的习惯是先配置 CI/CD,这个搞完后,再确保 tests 都一切顺利通过,然后再开始改代码,这样改代码的时候就放心,因为有大量的 tests 保驾护航,还有 CI/CD 自动到 dev,uat,prod 环境,可以很好的防止人为操作失误。

所以我先 check 了,infra 架构的 CI/CD,果然不出所料,一上来就失败了。

看了一下出错的说明,是因为我在 ARM Template 里使用的 alertrules 太老了,不再被支持了。

    {
      "apiVersion": "2014-04-01",
      "name": "[concat('ServerErrors ', variables('botApiName'))]",
      "type": "Microsoft.Insights/alertrules",
      "location": "[resourceGroup().location]",
      "dependsOn": [
        "[resourceId('Microsoft.Web/sites/', variables('botApiName'))]"
      ],
      "tags": {
        "[concat('hidden-link:', resourceGroup().id, '/providers/Microsoft.Web/sites/', variables('botApiName'))]": "Resource",
        "displayName": "ServerErrorsAlertRule"
      },
      "properties": {
        "name": "[concat('ServerErrors ', variables('botApiName'))]",
        "description": "[concat(variables('botApiName'), ' has some server errors, status code 5xx.')]",
        "isEnabled": false,
        "condition": {
          "odata.type": "Microsoft.Azure.Management.Insights.Models.ThresholdRuleCondition",
          "dataSource": {
            "odata.type": "Microsoft.Azure.Management.Insights.Models.RuleMetricDataSource",
            "resourceUri": "[concat(resourceGroup().id, '/providers/Microsoft.Web/sites/', variables('botApiName'))]",
            "metricName": "Http5xx"
          },
          "operator": "GreaterThan",
          "threshold": 0.0,
          "windowSize": "PT5M"
        },
        "action": {
          "odata.type": "Microsoft.Azure.Management.Insights.Models.RuleEmailAction",
          "sendToServiceOwners": true,
          "customEmails": []
        }
      }
    },

我使用的两个 alertrules 主要是监控 bot api service 有没有出现大量的 5xx 错误和 403 错误,因为之前有一次大量用户同时使用,大规模出现了 500 错误,我没有及时发现,所以耽误的发现的时间。所以加了这两个 alert rules,按照最新的文档,我需要参考这个来改写 ARM template.

https://learn.microsoft.com/en-us/azure/azure-monitor/alerts/alerts-create-new-alert-rule?tabs=metric

我目前采用了一个偷懒的做法,先把这两个 alert rules 删掉了,等以后再加上。

搞定了 infra 的 CI/CD 之后,我就开始搞主服务 luckydraw bot api 的 CI/CD,果然也失败了,报了一个很诡异的错误,如下:

初看下来,是 test coverage 的生成不工作了,我研究了很久,一直没有进展,不经意间我突然发现 AzureDevOps 自带的 build agent 已经使用了最新的 dotnet 7 来编译,我想会不会是 7 的问题,把下面 UseDotNet 这个 task 加到了 pipeline 的第一个 step,再次运行后就一切正常了。

steps:
- task: UseDotNet@2
  inputs:
    version: '6.x'
  
- script: |
    dotnet build --configuration $(buildConfiguration)

- script: |
    dotnet test test/LuckyDrawBot.Tests/LuckyDrawBot.Tests.csproj /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:Exclude=\"........\"
  displayName: dotnet test

我最后再 github 上找到了这个问题,很多人都提了这个问题:无法把参数传递给测试工具。

dotnet test does not forward MSBuild properties to msbuild in .NET 7 RC1 · Issue #4014 · microsoft/vstest · GitHub

17.4.0 Breaks pipeline code coverage · Issue #4140 · microsoft/vstest · GitHub

目前看这个问题已经被 fix 了,但 fix 还没有发布到官方版本,可能下一个 dotnet 7 的 release 里就可以包含这个修正。期待中。。。

搞定了 CI/CD 后,准备开始研究如何支持 3000 人的同时抽奖问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/91842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

当打造一款极速湖分析产品时,我们在想些什么

作者:王有卓,StarRocks Contributor 随着开源数据湖技术的快速发展以及湖仓一体全新架构的提出,传统数据湖在事务处理、流式计算以及数据科学场景的限制逐渐得以优化解决。 为了满足用户对数据湖探索分析的需求,StarRocks 在 2.…

jsp+ssm计算机毕业设计ssm实验教学资源管理系统【附源码】

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JSPSSM mybatis Maven等等组成,B/S模式 Mave…

【linux】linux实操篇之进程管理

目录前言进程介绍和查询进程基本介绍显示系统执行的进程终止进程服务管理监控服务动态监控进程监控网络状态结语前言 本篇博客总结linux中的进程管理相关知识,主要有进程介绍,终止进程,服务管理以及监控服务,一起来看看吧&#x…

模拟电路设计(40)---你真的懂“接地”吗?

概念 接地是指将一个电路、设备乃至分系统与一个基准“地”电位连接的电气要求,目的在于提供一个等电位点或等电位面。接地可以接真正的大地,也可以不接,例如飞机上的电子电气设备接飞机机壳就是接地。 接地必须有接地导体和接地平面才能够…

ChatGPT和InstructGPT 对比,ChatGPT将改变世界,影响力不亚于2007年新一代iPhone智能手机的发布

ChatGPT ChatGPT 的模型,它以对话方式进行交互。对话格式使 ChatGPT 可以回答后续问题、承认错误、挑战不正确的前提并拒绝不适当的请求。ChatGPT 是InstructGPT的兄弟模型,它经过训练可以按照提示中的说明进行操作并提供详细的响应。 ChatGPT 网址&am…

vue打包优化一

webpack.dll.config.js配置 相关文章 https://www.cnblogs.com/echoyya/p/16413591.html 步骤一:创建webpack.dll.config.js(不一定要是这个名字,只要执行指令的时候路径正确就行) // webpack.dll.config.js const path requi…

FIX:FusionCharts Suite XT 3.19.x

FusionCharts Suite XT:探索 100 多张图表和 2000 多张地图 FusionCharts 提供了 100 多张图表和 2000 多张地图。凭借广泛的文档、一致的 API 和一系列自定义选项 - FusionCharts 是最全面的 JavaScript 图表库,受到全球 750,000 名开发人员的喜爱。Fus…

JAVA实训第四天

目录 异常 什么是异常? 为什么要进行异常处理? 方法的调用堆栈 方法调用堆栈中异常对象的传递 Java中的异常类 常见的异常类 常见的异常类及出现此异常的原因 •1、java.lang.NullpointerException(空指针异常) •2、 java.lang.ClassNotFoundExcept…

rocketmq源码-broker接收消息

前言 这篇笔记,主要记录producer在通过netty发送了请求之后,在broker这边是如何处理的消息的 org.apache.rocketmq.remoting.netty.NettyRemotingServer.NettyServerHandler#channelRead0 这里是broker的nettyServer端接收客户端发送消息的入口&#x…

Android中GRPC的使用-4种通信模式

GRPC的通信模式 GRPC四种基础通信模式:一元RPC、服务器端流RPC、客户端流RPC以及双向流RPC。下面分别四种模式进行介绍,并在Android环境中来实现服务和客户端。 一元RPC 一元RPC模式也被称为简单RPC模式。在该模式中,当客户端调用服务端的远程…

破记录!国产数据库KunDB 单节点TPC-C事务性能超180万tpmC

近日,星环科技KunDB在TPC-C事务性能测试中,采用常规国产服务器,实现了单节点tpmC超180万,体现其世界级领先的事务处理能力。 TPC-C是全球 OLTP 数据库最权威的性能测试基准,由TPC组织(国际事务性能委员会&…

【数字IC基础】TestBench功能

文章目录 一、TestBench的目的?二、TestBench的功能?三、TestBench(验证)的四要素?一、TestBench的目的? 对使用硬件描述语言(HDL)设计的电路(DUT)进行仿真验证,测试设计电路的功能、部分性能是否符合预期二、TestBench的功能? TestBench和DUT的关系是一个马蹄形结…

React - 项目初始化设置

React - 项目初始化设置一. 页面零边距二. 路径别名配置三. 安装使用 scss四. 安装 router一. 页面零边距 可以手写 css 重置页面样式,也可使用 reset-css 自动配置 手写样式不多说,这里使用 reset-css 安装依赖 yarn add reset-css src/App.js 文件中引…

阿里技术人分享的三本书豆瓣评分8.5分,让你的架构思维略窥门径

又逢“金九银十”,年轻的毕业生们满怀希望与忐忑,去寻找、竞争一个工作机会。已经在职的开发同学,也想通过社会招聘或者内推的时机争取到更好的待遇、更大的平台。 然而,面试人群众多,技术市场却相对冷淡,…

ssm+Vue计算机毕业设计校园疫情管理系统(程序+LW文档)

ssmVue计算机毕业设计校园疫情管理系统(程序LW文档) 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技…

我用了几行代码就实现了界面变灰效果

前言 前段时间,各个大厂的 App 首页都变成了灰色,网上还有不少人问界面变灰怎么做到的。有人说是后台换了图片,这个回答显然是不懂技术了,对于个性化推荐系统来说,使用的图片那么多张,怎么可能一一替换。还有一种说法是说后台将图片处理后再返回给前端的,这个显然也不太…

$ORACLE_BASE和$ORACLE_HOME下xml文件误删

问题描述: 某项目安装环境grid管理的oracle,环境已经搭建好许久,执行上线检查PSU版本时发现opatch lsinventory报错 但实例的sqlpatch显示已经应用成功且oracle client版本也显示为19.13 怀疑是Central Inventory(/oracle/oraInv…

【知识图谱】(task4)知识图谱的抽取和构建

note CRF条件随机场是全局最优(判别式模型),HMM是局部最优(生成式模型)实体关系抽取方法概览: 事件抽取主要分为事件的发现和分类和事件要素抽取两部分,又可以细分为触发词识别与事件分类和要素…

第13部分 VLAN,Trunk 和VTP

目录 13.1 VLAN,Trunk 和VTP 简介 13.1.1 VLAN 13.1.2 Trunk 13.1.3 VTP 13.1.4 EtherChannel 13.2 实验1:划分VLAN 1.实验目的 2.实验拓扑 3.实验步骤 4.实验调试 13.3 实验2:Trunk 配置 1.实验目的 2.实验拓扑 3.实验步骤 1…

SpringBoot整合Graylog做日志收集

日志收集折腾过程 ELK 之前整合过ELK做日志采集,就是Elasticsearch Logstash Kibana: Elasticsearch:存储引擎,存放日志内容,利于全文检索Logstash:数据传输管道,将日志内容传输到Elastics…