基於DotNetty實現自動釋出

2023-12-06 12:00:09

前言

上一篇,我們實現了基於 DotNetty 的通訊基礎模組的搭建,本篇,主要實現待發布 Web 專案的整合。

建立待發布專案

  • 為了測試, 我建立了一個基於 .NET 4.8 的 Web 專案 OpenDeploy.TestWebProject

  • 我本機的程式碼倉儲路徑是: D:\Projects\Back\dotnet\Study\OpenDeploy.TestWebProject

待發布專案整合 Git

Git 是一個開源的分散式版本控制系統。我們使用它實現自動化檢測需要釋出的檔案。

設定待發布專案

  • 先放一下實現的效果圖, 因為我對 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 傳送到伺服器