AI 大模型与智能应用
实践与技术

专注分享 AI 大模型、Agent 开发、深度学习等技术实战与架构设计;兼具 C#/.NET 后端开发经验

118
技术文章
8
文章分类
537
技术标签
29971
累计字数
jenkins实现dotnet项目持续集成、持续部署(CI/CD)
运维与DevOps
2021-09-21 • 0k

jenkins实现dotnet项目持续集成、持续部署(CI/CD)

添加节点 这个jenkins是用docker安装的,我们要操作宿主机构建项目,不是这个容器,所以要把这个容器本身的节点停止,添加宿主机节点 断开jenkins容器节点 Master 也可以使用标签限制 新建节点 添加宿主机连接信息 添加宿主机认证用户 生成ssh公钥和私钥 执行:ssh-keygen 一路回车 进入.ssh文件夹: cd .ssh/ id_rsa:私钥 id_rsa.pub:公钥 把公钥写到authorized_keys文件: cat id_rsa.pub > authorized_keys 复制私钥到jenkins cat id_rsa 添加触发器 token可以区分项目 把地址复制到代码托管平台,设置触发 添加构建脚本 Jenkins构建完成会自动关闭进程及其子进程,造成nohup 无效,需要在命令内加参数BUILD_ID=DONTKILLME publish.sh: #!/bin/bash #如果8081被占用杀掉进程 kill -9 $(lsof -i:8081 -t) cd /home/web/web-demo/ #拉代码 git pull #发布代码到publish目录 dotnet publish -o publish cd publish/ #后台启用项目,端口8081 nohup dotnet WebDemo.dll --urls http://0.0.0.0:8081 & 构建记录

dotnet CentOS Linux
阅读更多
使用Docker在CentOS系统安装Jenkins
运维与DevOps
2021-09-20 • 0k

使用Docker在CentOS系统安装Jenkins

下载Jenkins镜像 docker pull jenkins/jenkins:lts #最新版 创建映射目录 容器映射此目录以持久化数据 mkdir /data/jenkins_home/ 修改用户组 docker容器中jenkins用户和用户组id为1000,需要修改后目录才能映射成功 chown -R 1000:1000 /data/jenkins_home 启动Jenkins容器 docker run -d --name jenkins -p 80:8080 -v /data/jenkins_home:/var/jenkins_home jenkins/jenkins:lts; #备注: #-d 启动在后台 #--name 容器名字 #-p 端口映射(80:宿主主机端口,8080:容器内部端口) #-v 数据卷挂载映射(/data/jenkins_home:宿主主机目录,另外一个即是容器目录) #enkins/jenkins:lts Jenkins镜像(最新版) 访问Jenkins 地址解析的域名 http://jenkins.raikay.cn/ 根据提示的路径找到初始密码 #进入容器 docker exec -it jenkins bash #查看密码 cat /var/jenkins_home/secrets/initialAdminPassword 安装推荐的插件 创建管理员 安装已完成 扩展 设置时区 方法一:在【系统管理】-【脚本命令行】里运行 System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai') 方法二: 通过docker改容器时区 docker run ... -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai 添加windows节点

CentOS Linux jenkins
阅读更多
dotnet项目执行shell脚本实现简单的自动化部署
运维与DevOps
2021-09-18 • 0k

dotnet项目执行shell脚本实现简单的自动化部署

不要k8s、不要docker、不要Jenkins,只要一个部署脚本,只是一个小项目单台服务器,实现提交代码自动执行脚本,拉代码构建部署项目。 创建一个web api 项目,作为webhook,实现接收web请求后执行shell脚本 项目代码: using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using System; using System.Diagnostics; namespace ShellHandler.Controllers { [ApiController] [Route("[controller]")] public class HandlerController : ControllerBase { private readonly ILogger<HandlerController> _logger; public HandlerController(ILogger<HandlerController> logger) { _logger = logger; } [HttpPost] public string Execute(string fileName) { try { var processStartInfo = new ProcessStartInfo($"./{fileName}") { RedirectStandardOutput = true }; var process = Process.Start(processStartInfo); if (process == null) { Console.WriteLine("Can not run shell ."); } else { using (var sr = process.StandardOutput) { while (!sr.EndOfStream) { var str = sr.ReadLine(); Console.WriteLine(str); } if (!process.HasExited) { process.Kill(); } } } return "ok"; } catch (Exception ex) { _logger.LogInformation(ex.Message); return ex.Message; } } } } 在服务器部署当前项目

dotnet CentOS Linux
阅读更多
点亮arduino uno r3板载 / 外接led灯
嵌入式
2021-08-25 • 0k

点亮arduino uno r3板载 / 外接led灯

1、准备工作与开发板选择 2、选择端口 3、代码: // the setup function runs once when you press reset or power the board void setup() { // initialize digital pin LED_BUILTIN (13) as an output. pinMode(LED_BUILTIN, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second } 4、代码上传与验证 点击上传按钮,等待编译完成后,Arduino开发板上的板载LED灯将开始按程序设定的1秒间隔闪烁。这是最基础的Arduino入门实验,验证了开发环境配置正确且开发板工作正常。

arduino LED控制 Arduino入门
阅读更多
dotnet core 使用gRPC服务
后端开发
2021-08-24 • 0k

dotnet core 使用gRPC服务

什么是gRPC? 在聊聊什么是gRPC前,我们先来聊聊什么是RPC。 RPC,全称Remote Procedure Call,中文译为远程过程调用。通俗地讲,使用RPC进行通信,调用远程函数就像调用本地函数一样,RPC底层会做好数据的序列化与传输,从而能使我们更轻松地创建分布式应用和服务。 请求信息使用 Protobuf 进行对象序列化压缩(IDL) 而gRPC,则是RPC的一种,它是免费且开源的,由谷歌出品。使用gRPC,我们只需要定义好每个API的Request和Response,剩下的gRPC这个框架会帮我们自动搞定。 使用gRPC 一、gRPC服务端 引用NuGet包 Grpc.AspNetCore Startup.cs 中 ConfigureServices 函数配置gRPC public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); //配置grpc services.AddGrpc(); } Configure 函数映射服务grpc类 public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); //映射grpc服务类 app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); endpoints.MapGrpcService<GreeterService>(); endpoints.MapGrpcService<LuCatService>(); }); } Program.cs 添加证书、设置监听端口 public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { var certificate = new X509Certificate2("https/6069857_game.raikay.cn.pfx", "aE14DALS"); webBuilder.UseKestrel(options => { options.AddServerHeader = false; options.Listen(IPAddress.Any, 443, listenOptions => { listenOptions.UseHttps(certificate); }); }).UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup<Startup>() .UseUrls("https://*:443"); }); appsettings.json配置http2

dotnet grpc .NET Core
阅读更多
Microsoft Edge浏览器怎么导入密码
工具与效率
2021-06-22 • 0k

Microsoft Edge浏览器怎么导入密码

Edge浏览器在清理缓存时,如果勾选密码一项,清除的不只是本地密码,同时会删除已同步的云端密码,而且其他登录设备也会同步删除。不过其他设备会有延迟,可以及时导出密码,文件格式是csv表格文件,Edge浏览器不支持直接导入密码,只能从其他浏览器同步数据。好在Google浏览器有导入密码功能,可以先导入到Google浏览器,然后从Google浏览器导入Edge。 一、Google浏览器导入密码 谷歌浏览器导入密码也不是直接就可以看到,应该是隐藏功能,需要下面这样操作。 1、找到谷歌浏览器 快捷图标 【右键】–>【属性】 2、 在【目标】 后面输入 --enable-features=PasswordImport (前面有一个空格不要忽略) 3、已管理员权限打开浏览器,【设置】–> 【密码】,点击三个点即可导入,如果没有,重新已管理员权限打开浏览器 二、从Google浏览器导入Edge浏览器

浏览器 Microsoft Edge 密码管理
阅读更多
jQuery UI 自动完成组件(Autocomplete)使用
前端开发
2021-06-08 • 0k

jQuery UI 自动完成组件(Autocomplete)使用

JS: var shopVal=""; var shopText = ""; $(function () { $("#tags").autocomplete({ source: function ( request, response ) { $.ajax({ url: "shop/list", //请求数据网址 data: { AppName: request.term, appId: window.parent.appId //dataType: "jsonp", //也可以是jsonp形式 //text: $("#tags").val() // 等同于 request.term }, success: function (data) { //console.log(data); response(data); } }); }, minLength: 1,//输入多少字的时候触发请求事件 select: function (e, ui) { //选后后事件 shopVal = ui.item.id; shopText = ui.item.value; //alert("value:" + ui.item.value + "lable:" + ui.item.label + " id:" + ui.item.id); } }); }); HTML: <div class="ui-widget"> <label for="tags">店铺名称:</label> <input id="tags" /> </div> 返回数据格式: [ { "id": "10da4de5-3661-4718-81bf-be8dfdd85bcd", "lable": "小豆包丁一般生产企业业态测试门店(北京)集团", "value": "小豆包丁一般生产企业业态测试门店(北京)集团" }, { "id": "303b62d9-3488-47f2-ada7-e5b2db88d095", "lable": "小白龙", "value": "小白龙" }, { "id": "bb3af0f0-aa3f-4320-9001-1d921a977836", "lable": "智慧餐饮小店", "value": "智慧餐饮小店" }, { "id": "dde4a0e9-a5c8-48b7-be36-2be726279910", "lable": "小菜门店(电商)", "value": "小菜门店(电商)" }, { "id": "da83acfc-dcd5-4f79-b380-1184e0721b14", "lable": "千寻小店(中央厨房)", "value": "千寻小店(中央厨房)" } ] 图例:

jQuery jQuery UI Autocomplete
阅读更多
DotNet平台中 IL / CTS / CLS / CLR 都是什么?
后端开发
2021-03-12 • 0k

DotNet平台中 IL / CTS / CLS / CLR 都是什么?

IL(MSIL): 可以执行的二进制代码(托管代码) CTS: .Net平台通用数据类型(Common Type System) CLS: .Net平台通用语言规范(语法)(Common Language Specification ) CLR: 公共语言运行时( Common Language Runtime ) JIT: 即时编译器(Just in time) 关系 各个语言(VB.Net、F#)使用自己的JIT按照CTS、CLS编译成可以在CLR上运行的IL

dotnet .NET CLR
阅读更多
SOA架构和微服务架构的区别
架构与设计
2021-03-12 • 0k

SOA架构和微服务架构的区别

SOA: SOA(Service Oriented Architecture)“面向服务的架构”,他是一种设计方法,其中包含多个服务, 服务之间通过相互依赖最终提供一系列的功能。一个服务 通常以独立的形式存在与操作系统进程中。各个服务之间 通过网络调用。 微服务架构: 其实和 SOA 架构类似,微服务是在 SOA 上做的升华,微服务架构强调的一个重点是 “业务需要彻底的组件化和服务化”,原有的单个业务系统会 拆分为多个可以独立开发、设计、运行的小应用。这些小应用之间通过服务完成交互和集成。(去中心化) 微服务架构 = 80%的SOA服务架构思想 + 100%的组件化架构思想 + 80%的领域建模思想 主要区别: 功能 SOA 微服务 组件大小 大块业务逻辑 单独任务或小块业务逻辑 耦合 通常松耦合 总是松耦合 公司架构 任何类型 小型、专注于功能交叉团队 管理 着重中央管理 着重分散管理 目标 确保应用能够交互操作 执行新功能、快速拓展开发团队 摘自: https://blog.csdn.net/zpoison/article/details/80729052

微服务 SOA 架构设计
阅读更多
控制反转(IoC)与依赖注入(DI)- 很容易明白的那种
架构与设计
2021-03-12 • 0k

控制反转(IoC)与依赖注入(DI)- 很容易明白的那种

一、控制反转 正常控制权是由调用方掌握,控制反转将控制权交给了容器,在运行时由容器决定具体的实现。 二、依赖注入 依赖注入是控制反转的一种实现,调用某个类是对这个类(被调用类)的依赖,正常是直接实例化(被调用类),而依赖注入,是通过构造函数等方式由容器注入到调用方 三、控制反转和依赖注入的关系 控制反转是一种思想 依赖注入是一种设计模式 IoC框架使用依赖注入作为实现控制反转的方式,但是控制反转还有其他的实现方式,例如说依赖查找,所以不能将控制反转和依赖注入等同。

架构设计 IoC DI
阅读更多