- A+
所属分类:.NET技术
前言
上一篇,我们实现了基于 DotNetty
的通信基础模块的搭建,本篇,主要实现待发布 Web 项目的集成。
创建待发布项目
-
为了测试, 我创建了一个基于 .NET 4.8 的 Web 项目
OpenDeploy.TestWebProject
-
我本机的代码仓储路径是:
D:ProjectsBackdotnetStudyOpenDeploy.TestWebProject
待发布项目集成 Git
Git
是一个开源的分布式版本控制系统。我们使用它实现自动化检测需要发布的文件。
- 我把这个测试的 Web 项目,托管在了
Gitee
, 仓储地址如下: OpenDeply.TestWebProject
配置待发布项目
- 先放一下实现的效果图, 因为我对 WPF 也不是很精通,不足之处请大家见谅
- 客户端基于 WPF 实现
- 数据持久化使用的 SQLite
- 增加了几个常用的
Git
命令 - 简单贴点代码,其他请大家看源码吧,最下面有地址
解决方案模型
/// <summary> 解决方案领域模型 </summary> [Table("Solution")] public class Solution { [Key] public int Id { get; set; } /// <summary> 解决方案名称 </summary> public string SolutionName { get; set; } = string.Empty; /// <summary> 解决方案Git仓储路径 </summary> public string GitRepositoryPath { get; set; } = string.Empty; }
确定配置解决方案
/// <summary> 确定配置解决方案 </summary> [RelayCommand] private void OkConfigSolution() { try { if (string.IsNullOrEmpty(ConfigSolution.SolutionName)) { throw new Exception("请填写解决方案名称"); } if (!GitHelper.IsValidRepository(ConfigSolution.GitRepositoryPath)) { throw new Exception("非法的Git仓储路径"); } } catch (Exception ex) { Growl.ClearGlobal(); Growl.WarningGlobal(ex.Message); return; } //持久化到Sqlite solutionRepository.AddSolution(ConfigSolution.Map2Entity()); Growl.SuccessGlobal("操作成功"); //重新加载解决方案 LoadSolutions(); //关闭弹窗 configSolutionDialog?.Close(); }
执行 Git 命令
/// <summary> 执行git命令 </summary> private async Task RunGitCommand(string cmd) { var loading = Loading.Show(); string output = string.Empty; LogText = string.Empty; await Task.Run(() => { var _process = new Process(); _process.StartInfo.WorkingDirectory = GitRepositoryPath; _process.StartInfo.FileName = "cmd.exe"; _process.StartInfo.Arguments = "/C " + cmd; _process.StartInfo.UseShellExecute = false; _process.StartInfo.CreateNoWindow = true; _process.StartInfo.RedirectStandardInput = true; _process.StartInfo.RedirectStandardOutput = true; _process.StartInfo.RedirectStandardError = true; _process.Start();//启动程序 output = _process.StandardOutput.ReadToEnd(); if (string.IsNullOrEmpty(output)) { output = _process.StandardError.ReadToEnd(); if (string.IsNullOrEmpty(output)) { output = "没有返回值"; } } _process.WaitForExit(); _process.Close(); }); LogText = output; loading.Close(); }
总结
至此,我们实现了待发布项目的配置与发现,简单集成了常用的 Git
命令等
代码仓库
项目暂且就叫
OpenDeploy
吧
欢迎大家拍砖,Star
下一步
计划下一步,实现一键发布,自动检测到自上次发布以来的代码变化,自动识别要发布的文件,一次性打包通过 DotNetty
发送到服务器