基于DotNetty实现自动发布 - 项目的配置与发现

前言

上一篇,我们实现了基于 DotNetty 的通信基础模块的搭建,本篇,主要实现待发布 Web 项目的集成。

创建待发布项目

  • 为了测试, 我创建了一个基于 .NET 4.8 的 Web 项目 OpenDeploy.TestWebProject

  • 我本机的代码仓储路径是: D:\Projects\Back\dotnet\Study\OpenDeploy.TestWebProject

待发布项目集成 Git

Git 是一个开源的分布式版本控制系统。我们使用它实现自动化检测需要发布的文件。

配置待发布项目

  • 先放一下实现的效果图, 因为我对 WPF 也不是很精通,不足之处请大家见谅



  • 客户端基于 WPF 实现
  • 数据持久化使用的 SQLite
  • 增加了几个常用的 Git 命令
  • 简单贴点代码,其他请大家看源码吧,最下面有地址

解决方案模型

C# 复制代码
/// <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;
}

确定配置解决方案

C# 复制代码
/// <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 命令

C# 复制代码
    /// <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 发送到服务器

相关推荐
脚踏实地皮皮晨2 小时前
003006001_WrapPanel控件
开发语言·c#·.net·wpf·visual studio
脚踏实地皮皮晨3 小时前
003005002_WPF StackPanel 基类官方类定义逐行深度解析
开发语言·windows·算法·c#·wpf·visual studio
晨曦中的暮雨7 小时前
Learn Claude Code:CodeAgent 与后端程序大搭配——定时任务、Git Worktree 和MCP 服务
git·ai·llm·agent
减瓦8 小时前
用 Git 为本地文件打造一台时光机
开发语言·git·编辑器
脚踏实地皮皮晨9 小时前
003004002_UniformGrid控件的使用方法
开发语言·c#·.net·wpf·visual studio
Huangjin007_10 小时前
【Linux 系统篇(十一)】基础开发工具(六) —— 版本控制器 Git
linux·运维·git
影视飓风TIM1 天前
Linux下C语言缓冲区原理 + Git版本控制
linux·c语言·git
tianyuanwo1 天前
当提交标题重复阻塞CI:Git分支修复实战
git·ci/cd·分支基线调整
Salt & Light1 天前
Git 分支操作与恢复完整记录
git