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


    前言

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

    创建待发布项目

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

      image

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

    待发布项目集成 Git

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

    配置待发布项目

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

    image
    image
    image

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

    解决方案模型

    ///  解决方案领域模型 
    [Table("Solution")]
    public class Solution
    {
        [Key]
        public int Id { get; set; }
    
        ///  解决方案名称 
        public string SolutionName { get; set; } = string.Empty;
    
        ///  解决方案Git仓储路径 
        public string GitRepositoryPath { get; set; } = string.Empty;
    }
    

    确定配置解决方案

    ///  确定配置解决方案 
    [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 命令

        ///  执行git命令 
        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 发送到服务器

  • 相关阅读:
    Java 12 及Tomcat 部署配置
    318. 最大单词长度乘积
    .NET 云原生架构师训练营(权限系统 代码重构)--学习笔记
    如何使用数据选择器配置日期筛选框?
    封笔之作,阿里P8手写的Java高手是怎样练成的原理方法与实践笔记
    STM32_SPI总线驱动OLED详细原理讲解
    eventBus实现原理
    简述直线模组的发展前景
    李m圆申论
    生产型企业如何搭建进销存管理系统?低代码平台了解一下
  • 原文地址:https://www.cnblogs.com/broadm/p/17879195.html