C#与.NET技术
实践与教程

专注分享C#、ASP.NET Core、Azure、Blazor等微软技术栈的开发教程、架构设计和最佳实践

85
技术文章
42
教程系列
2.8k
月访问量
328
活跃读者
使用Docker在CentOS系统安装Jenkins
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节点 保存后,返回节点,下载agent.jar到目标主机,并在目标主机执行这条命令 jenkins容器的50000 端口需要映射到宿主机

CentOS Linux jenkins
阅读更多
dotnet项目执行shell脚本实现简单的自动化部署
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.

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.

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.

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
阅读更多
使用NTP协议获取时间(连接wifi) - Arduino开发ESP8266(NodeMcu)学习记录
嵌入式
2021-02-01 0k

使用NTP协议获取时间(连接wifi) - Arduino开发ESP8266(NodeMcu)学习记录

所需硬件 ESP8266 开发板(NodeMcu) x1 第三方库 ESP8266WiFi NTP介绍 网络时间协议,英文名称:Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。NTP的目的是在无序的Internet环境中提供精确和健壮的时间服务。 ——【百度百科】 代码: /** 作者: Raikay (raikay.cn) 时间: 2021/01/30 说明: 通过NTP服务器获取网络时间(连接wifi) **/ #include <ESP8266WiFi.h> //wifi库#include <time.h> //时间库 const char* ssid = "Ziroom211"; //wifi账号 const char* password = "40010022222"; //wifi密码 const char* NTP_SERVER = "ntp.aliyun.com"; //NTP服务器 #define TZ_INFO "UTC-8" //时区 void setup() { Serial.begin(115200); Serial.setDebugOutput(true); //将串口设为调试输出模式 WiFi.disconnect();//断开之前的连接 WiFi.mode(WIFI_STA); //设为STA模式 WiFi.begin(ssid, password);//连接wifi Serial.println("\nConnecting to WiFi"); //连接失败 while (WiFi.

esp8266 Arduino NodeMcu
阅读更多