当前位置: 首页 > news >正文

天津城建设计院网站专业开发手机网站建设

天津城建设计院网站,专业开发手机网站建设,如何把官网,相册管理网站模板前两篇博文中提到Development,QA,Staging,Production四个环境#xff0c;也说明了源代码的分支和四个环境的对应关系#xff0c;本篇博文聊一下#xff0c;怎么把源码自动化发布到对应的环境中。市面上主流的DevOpt工具都支持这些功能#xff0c;github,gitlab#xff0c;… 前两篇博文中提到Development,QA,Staging,Production四个环境也说明了源代码的分支和四个环境的对应关系本篇博文聊一下怎么把源码自动化发布到对应的环境中。市面上主流的DevOpt工具都支持这些功能github,gitlab都有CICD功能当然如果源码服务器是自己搭建的也可以利用像Jenkins这类软件来实现CICD关于这些大众工具网上有很多教程序这里就不主要来分享了本例是用.net core实现一个极简的自动发布工具——《MyCICD》。说一下实现思路吧clone 或 pull分支代码publishrun是不是很简单上代码吧using System; using System.Collections.Generic; using System.Configuration; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading;namespace MyCICD {class Program{static void Main(string[] args){var processIDs new int[0];while (true){if (Clone()){if (Publish(processIDs)){processIDs Run();}}Thread.Sleep(30000);}}/// summary/// git 克隆/// /summary/// returns/returnsstatic bool Clone(){var gitLib ConfigurationManager.AppSettings[GitLib];var sourcePath ConfigurationManager.AppSettings[SourcePath];var sourceDir ${sourcePath.TrimEnd(/, \\) }/{ Path.GetFileNameWithoutExtension(gitLib)} ;//存在就拉取代码不存在就克隆if (Directory.Exists(sourceDir)){return Pull(sourceDir);}else{return Clone(gitLib, sourceDir);}}/// summary/// 克隆项目代码/// /summary/// param namegitLibgit库/param/// param namesourceDir本地保存路径/param/// returns/returnsstatic bool Clone(string gitLib, string sourceDir){Console.WriteLine(开始Clone);var processStartInfo new ProcessStartInfo(git, $clone {gitLib} {sourceDir}) { RedirectStandardOutput true };var process Process.Start(processStartInfo);if (process null){Console.WriteLine(请确认是否安装git);return false;}else{using (var output process.StandardOutput){while (!output.EndOfStream){Console.WriteLine(output.ReadLine());}if (!process.HasExited){process.Kill();}}Console.WriteLine($执行时间 :{(process.ExitTime - process.StartTime).TotalMilliseconds} ms);Console.WriteLine(结束Clone);return process.ExitCode  0;}}/// summary/// 拉取项目代码/// /summary/// param namesourceDir源码路径/param/// returns/returnsstatic bool Pull(string sourceDir){Console.WriteLine(开始Fetch);var processStartInfo new ProcessStartInfo(git, $pull origin){RedirectStandardOutput true,WorkingDirectory sourceDir,};var process Process.Start(processStartInfo);using (var output process.StandardOutput){var resultBuilder new StringBuilder();while (!output.EndOfStream){resultBuilder.AppendLine(output.ReadLine());}Console.WriteLine(resultBuilder);if (!process.HasExited){process.Kill();}if (resultBuilder.ToString() ! Already up to date.\r\n){Console.WriteLine(结束Fetch);return true;}else{Console.WriteLine(结束Fetch远程仓库没有更新);return false;}}}#region 发布项目/// summary/// 发布项目/// /summary/// returns/returnsstatic bool Publish(int[] processIDs){Console.WriteLine(开始Publish);var sourcePath ConfigurationManager.AppSettings[SourcePath];var publishProject ConfigurationManager.AppSettings[PublishProject];//找出要发布的项目var projectPathLists publishProject.Split(,);var projects GetProjectsPath(sourcePath, projectPathLists);var publishDir ${sourcePath}/publish;var result  true;//如果有一个项目失败发布就会失败//为了发布关闭之前运行中的进程foreach (var processid in processIDs){Process.GetProcessById(processid).Kill();}//发布项目foreach (var project in projects){var processStartInfo new ProcessStartInfo(dotnet, $publish {project} -o {publishDir}/{Path.GetFileNameWithoutExtension(project)}) { RedirectStandardOutput true };var process  Process.Start(processStartInfo);if (process null){Console.WriteLine(请确认是否安装dotnet sdk);return false;}else{using (var output process.StandardOutput){while (!output.EndOfStream){Console.WriteLine(output.ReadLine());}if (!process.HasExited){process.Kill();}}Console.WriteLine($执行时间 :{(process.ExitTime - process.StartTime).TotalMilliseconds} ms);if (process.ExitCode ! 0){Console.WriteLine(${Path.GetFileNameWithoutExtension(project)}发布失败);}result result || process.ExitCode 0;}}Console.WriteLine(结束Publish);return result;}/// summary/// 查找项目/// /summary/// param namesourcePath源码路径/param/// param nameprojects项目集/param/// returns/returnsstatic string[] GetProjectsPath(string sourcePath, string[] projects){var paths new Liststring();foreach (var file in Directory.GetFiles(sourcePath)){if (projects.Contains(Path.GetFileName(file))){paths.Add(file);}}foreach (var dir in Directory.GetDirectories(sourcePath)){paths.AddRange(GetProjectsPath(dir, projects));}return paths.ToArray();}#endregion#region 运行项目/// summary/// 运行项目/// /summary/// returns/returnsstatic int[] Run(){Console.WriteLine(开始运行);var sourcePath ConfigurationManager.AppSettings[SourcePath];var publishDir ${sourcePath}/publish;var proceddIDs new Listint();foreach (var projectPath in Directory.GetDirectories(publishDir)){var processStartInfo new ProcessStartInfo(dotnet, ${Path.GetFileNameWithoutExtension(projectPath)}.dll){RedirectStandardOutput true,WorkingDirectory projectPath,};var process Process.Start(processStartInfo);proceddIDs.Add(process.Id);}Console.WriteLine(结束运行);return proceddIDs.ToArray();}#endregion} } App.config配置文件?xml version1.0 encodingutf-8 ? configurationappSettings !--git库相关git库路径clone后本地何存路径--add keyGitLib valuehttps://github.com/axzxs2001/Asp.NetCoreExperiment.git/add keySourcePath valuee:/test//!--dotnet发布相关要发布的项目--add keyPublishProject valueAspNetCoreEnvironment.csproj,WebError.csproj/ /appSettings /configuration 这个例子很简单只支持在windows下运行同时run起来的应用和MyCICD是在一个进程中一但进程关闭run的服务也就掉了还有很多需要改进如果有兴趣可以完善比如可以跑大多个平台上linux,docker,mac下也可以把MyCICD和运行的服务分离进程间互不影响。
http://www.zqtcl.cn/news/550546/

相关文章:

  • 国外网站搭建平台移动互联网公司
  • 做网络私活的网站网站开发的人
  • 数据分析网站开发四川手机网站设计方案
  • 什么是网络营销的方法莱州网站建设关键字排名优化网络托管微信代运营
  • 雅虎网站收录提交入口怎么看网站谁做的
  • 青浦专业做网站免费网站软件大全
  • joomla 网站图标六安市城市建设档案馆网站
  • 郑州 公司网站制作win10 wordpress安装
  • html5网站有哪些网站建设部分费用会计科目
  • 网站域名备案 更改吗深圳新站优化
  • 房产网站门户系统免费网站免费无遮挡
  • 用国外网站 图片做自媒体seo诊断a5
  • 广州市南沙建设局网站优改网logo设计
  • 网站建设亿玛酷知名公司网站首页如何做
  • 教育网站 php网络服务公司
  • net域名做网站怎么样建站公司 转型经验
  • 赣州网站建设哪家公司好上海市建设安全协会网站
  • 网站排名优化软件有哪些西宁网站建设官网
  • 支付宝手机网站签约迪庆公司网站开发方法
  • 唐山网站关键词优化网站开发公司推荐
  • 福建响应式网站制作市工商局网站建设情况
  • 深圳网站运营托管罗伯特清崎说的网络营销是什么
  • 太仓市质监站网址百度关键字推广费用
  • 为您打造高端品牌网站pageadmin wordpress
  • 中小型网站建设的基本流程简约网站欣赏
  • 设备上哪个网站做外贸推广网络服务类型及其所采用的网络协议
  • 学习前端开发的网站动漫设计属于什么大类
  • 十堰秦楚网 十堰新闻门户网站报修网站模板
  • 家居小程序源码下载自动seo系统
  • 动态效果的网站建设技术老闵行是指哪里