前言

上一篇,我们实现了基于 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 发送到服务器

基于DotNetty实现自动发布 - 项目的配置与发现的更多相关文章

  1. tomcat8热部署配置--maven自动发布项目到tomcat8(如何支持远程访问部署)

    1.tomcat8实现热部署的配置  我们实现热部署后,自然就可以通过maven操作tomcat了,所以就需要maven取得操作tomcat的权限,现在这一步就是配置tomcat的可操作权限. #进入 ...

  2. ideal环境maven自动下载项目依赖配置

    开篇序言 最近在使用ideal软件对springboot进行开发研究,中间遇到的环境和创建springboot遇到的问题真是玲琅满目,但是遇到问题就要克服这是万年不变的真理. 该文档会后续不断的补充, ...

  3. 基于jenkins的go语言项目自动化发布遇到的坑

    之前我们研究dep,就是为了有一天可以实现go语言项目在我们系统里的CI. 之前联物科技的项目主要是使用java作为后端开发语言,基于jenkins的自动发布,使用了pipeline编写脚本,从拉取代 ...

  4. 配置Jenkins 实现自动发布maven项目至weblogic(svn+maven+weblogic12c)

    Jenkins安装完成之后,需要我们对其配置,然后才可以实现自动部署项目. 前提 防火墙开放weblogic的7001端口 Linux(CentOS):firewall-cmd --zone=publ ...

  5. Windows下配置Jenkins 实现自动发布maven项目至tomcat(svn+maven+tomcat)

    Jenkins安装完成之后,需要我们对其配置,然后才可以实现自动部署项目. 前提 防火墙开放tomcat的8080端口 Linux(CentOS):firewall-cmd --zone=public ...

  6. eclipse项目自动发布到tomcat目录,缺文件。

    eclipse项目自动发布到tomcat目录,缺文件. 解决方案: 项目--Properties-->Deployment Assembly-->Add--> Folder Add- ...

  7. 使用Jenkins自动发布Windows服务项目

    不同于发布Web项目,自动发布Windows服务项目需要解决以下几个问题: 如何远程停止和开启服务?需要在发布前停止服务,在发布完成后开启服务. 如何上传编译文件到目标服务器? 问题1:如何远程停止和 ...

  8. PM2自动发布本地项目到服务器

    (一)开发环境 本地服务器 Ubunt14.04 远程服务器Ubuntu16.04 发布软件PM 2 (二)发布介绍 本地和我们的远程服务器,必须都安装有git,pm2,以及nodejs环境.实际上配 ...

  9. 【转载】JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案

    JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案 本文为转载,原文地址为:https://www.cnblogs.com/adversary/p/103 ...

  10. 后盾网lavarel视频项目---phpstorm 配置ftp, 自动更新同步代码

    后盾网lavarel视频项目---phpstorm 配置ftp, 自动更新同步代码 一.总结 一句话总结: 1.在phpstorm中设置:路径Tools/Deployment/Configuratio ...

随机推荐

  1. Electron-builder打包和自动更新

    Electron-builder打包和自动更新 前言 文本主要讲述如何为 electron 打包出来软件配置安装引导和结合 github 的 release 配置自动更新. electron-buil ...

  2. [FlareOn4]login-buu ctf

    打开压缩包 是个html,我直接???? 这不是web弄的吗 离谱了,不过f12还是会的 不过其中的逻辑还是比较清楚的 先用伪代码确定加密逻辑,再直接写直接进行爆破解码 wo cao,wrong!fl ...

  3. 【题解】Educational Codeforces Round 142(CF1792)

    没有手速,再加上被 E 卡了,废掉了. A.GamingForces 题目描述: Monocarp 正在玩电脑游戏.他打算杀死 \(n\) 个怪兽,第 \(i\) 个的血量为 \(h_i\). Mon ...

  4. RocketMQ 系列(四) 消息存储

    RocketMQ 系列(四) 消息存储 本文是 RocketMQ 系列的第四篇,下面是前面几篇的文章,不清楚的话点击看一下吧. RocketMQ系列(一) 基本介绍 RocketMQ 系列(二) 环境 ...

  5. 探索Lighthouse性能分数计算背后的奥秘

    作为开发我们都知道,页面性能很重要,一个性能良好的页面可以给用户带来非常好的用户体验.那么,怎么能知道自己写的页面性能是好是坏呢? Lighthouse 是Chrome提供给开发者用来测量页面性能的工 ...

  6. C#/.NET/.NET Core优秀项目和框架2023年9月简报

    前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(公众号每周至少推荐两个优秀的项目和框架当然节假日除外),公众号推文有项目和框架的介绍.功能特点以及部分截图等(打不开或 ...

  7. Docker V24 及 Docker Compose V2 的安装及使用

    前言 Docker 是一款流行的开源容器化平台,使用 Docker 可以有效地隔离应用程序和系统环境,使得应用程序在不同的环境中具有相同的行为 Docker Compose 是一个用于定义和管理多个 ...

  8. 【Azure Key Vault】在Azure Databricks上获取Azure Key Vault中所存储的机密(secret)的两种方式

    问题描述 在Azure Databricks上获取Azure Key Vault中所存储的机密(secret)的两种方式? 问题解答 方式一: 在Databricks的Notebook 中,直接编写P ...

  9. python接口自动化之request请求,如何使用 Python调用 API?

    Python实战 | 如何使用 Python 调用 API 一.HTTP 请求HTTP 请求是在 HTTP 协议下的一种数据格式,用于向服务器发送请求,其通常由请求行.请求头和请求体三部分构成,请求头 ...

  10. Unity - UIWidgets 4. 添加图标显示

    Material Icon字体下载(github) 前面的返回按钮, 以及自己试验的一些Icon都不显示, 然后回去翻UIWidgets的README public class UIWidgetsEx ...