基于DotNetty實現自動發布 - 項目的配置與發現
前言
上一篇,我們實現了基于 DotNetty 的通信基礎模塊的搭建,本篇,主要實現待發布 Web 項目的集成。
創建待發布項目
-
為了測試, 我創建了一個基于 .NET 4.8 的 Web 項目
OpenDeploy.TestWebProject


-
我本機的代碼倉儲路徑是:
D:\Projects\Back\dotnet\Study\OpenDeploy.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 發送到服務器

浙公網安備 33010602011771號