public BuildSourceMap Get(string sourceKey) { if (IISStore == null) { IISStore = System.Web.Configuration.WebConfigurationManager.AppSettings["IISCI.Store"]; } lock (Instance) { var existingList = IISStore + "\\source-map.json"; var list = JsonStorage.ReadFileOrDefault <List <BuildSourceMap> >(existingList); List.Clear(); List.AddRange(list); var map = List.FirstOrDefault(x => x.SourceKey == sourceKey); if (map == null) { map = new BuildSourceMap { Id = "Source-" + (List.Count + 1), SourceKey = sourceKey }; List.Add(map); JsonStorage.WriteFile(List, existingList); } return(map); } }
private static LastBuild Execute(BuildConfig config, bool redeploy = false) { try { string buildFolder = config.BuildFolder; var result = DownloadFilesAsync(config, buildFolder).Result; if (!redeploy) { var lb = JsonStorage.ReadFileOrDefault <LastBuild>(config.BuildResult); if (lb != null && lb.LastResult == result.LastVersion && string.IsNullOrWhiteSpace(lb.Error)) { lb.Log = $"{lb.LastResult} = {result.LastVersion} \r\n+++++++++++++++++++++ No changes to deploy +++++++++++++++++++++"; lb.ExitCode = 0; lb.Error = ""; return(lb); } } if (config.UseMSBuild) { var buildCommand = new MSBuildCommand() { Solution = config.SolutionPath, BuildFolder = buildFolder, Parameters = config.MSBuildParameters, BuildConfig = config.MSBuildConfig }; var lastBuild = buildCommand.Build(); if (!lastBuild.Success) { return(lastBuild); } string webConfig = XDTService.Instance.Process(config); IISManager.Instance.DeployFiles(config, webConfig); lastBuild.Log += "\r\n+++++++++++++++++++++ Deployment Successful !!! +++++++++++++++++++++"; lastBuild.LastResult = result.LastVersion; return(lastBuild); } else { throw new NotImplementedException(); } } catch (Exception ex) { return(new LastBuild { Error = ex.ToString(), ExitCode = -1, Time = DateTime.UtcNow }); } }
private BuildConfig GetBuildConfigModel(string id) { string path = GetConfigPath(id); BuildConfig config = JsonStorage.ReadFileOrDefault <BuildConfig>(path); SaveConfig(id, path, config); return(config); }
public ActionResult Sites() { var sites = ServerManager.Sites.Select(x => new { Id = x.Name, IISID = x.Id, Name = x.Name, Bindings = x.Bindings.Select(y => y.Host), LastBuild = JsonStorage.ReadFileOrDefault <LastBuild>(GetBuildConfigModel(x.Name).BuildResult) }).ToList().OrderBy(x => x.Id); return(Json(sites, JsonRequestBehavior.AllowGet)); }
public ActionResult UpdateBuildConfig(string id, BuildConfig model) { string path = GetConfigPath(id); SaveConfig(id, path, model, false); string lastBuildFile = model.BuildResult; var lastBuild = JsonStorage.ReadFileOrDefault <LastBuild>(lastBuildFile); if (lastBuild == null) { lastBuild = new LastBuild(); } lastBuild.Error = "Config changed"; lastBuild.LastResult = null; JsonStorage.WriteFile(lastBuild, lastBuildFile); return(Json(model)); }
public ActionResult Sites() { var sites = ServerManager.Sites.Select(x => new IISSite { Id = x.Name, IISID = x.Id, Name = x.Name, Bindings = x.Bindings.Select(y => y.Host), Children = x.Applications.Where(app => app.Path != "/") .Select(app => new IISSite { Id = x.Name + app.Path, IISID = 0, Path = app.Path, Bindings = x.Bindings.Select(a => a.Host + app.Path) }).ToList() }).ToList(); var copy = sites; sites = new List <IISSite>(); foreach (var site in copy) { sites.Add(site); if (site.Children != null) { sites.AddRange(site.Children); } } Parallel.ForEach(sites, site => { site.LastBuild = JsonStorage.ReadFileOrDefault <LastBuild>(GetBuildConfigModel(site.Id).BuildResult); }); return(Json(sites.OrderBy(x => x.Id), JsonRequestBehavior.AllowGet)); }
public ActionResult Settings() { return(Json(JsonStorage.ReadFileOrDefault <SettingsModel>(SettingsPath), JsonRequestBehavior.AllowGet)); }
protected override void OnExecute(string rootPath, StringWriter logger) { var Response = logger; using (var deployLock = new GlobalLock(config.SiteId)) { if (!deployLock.AcquireLock()) { Response.WriteLine("Deployment already in progress"); Response.Flush(); return; } using (var buildLock = new GlobalLock(config.BuildFolder)) { if (!buildLock.AcquireLock()) { Response.WriteLine(IISWebRequest.MSBuildRetryMessage); Response.Flush(); return; } if (reset) { /*var file = new System.IO.FileInfo(config.BuildFolder + "\\local-repository.json"); * if (file.Exists) * { * file.Delete(); * }*/ var file = new System.IO.FileInfo(config.BuildResult); if (file.Exists) { file.Delete(); } var dir = new System.IO.DirectoryInfo(config.BuildFolder); if (dir.Exists) { dir.Delete(true); } } var executable = rootPath + "\\bin\\IISCI.build.exe"; Response.WriteLine("<html>"); Response.WriteLine("<body><div id='logger'>"); Response.Flush(); IISCIProcess p = new IISCIProcess(executable, parameters); p.Run(); Response.WriteLine(p.Error); Response.Flush(); Response.WriteLine(p.Output); Response.Flush(); if (p.Success) { if (config.StartUrls != null) { foreach (var url in config.StartUrls) { IISWebRequest.Instance.Invoke(config.SiteId, url.Url); } } } if (string.IsNullOrWhiteSpace(config.Notify)) { return; } try { string subject = string.Format("IISCI-Build: {0} for {1}", (p.Success ? "Success" : "Failed"), config.SiteId); string body = "<div><h2>" + config.SiteId + "</h2>" + p.Error + p.Output + "</div><hr size='1'/><div style='text-align:right'><a href='https://github.com/neurospeech/iis-ci' target='_blank'>IISCI by NeuroSpeech®</a></div>"; List <string> recipients = new List <string>(); foreach (var item in config.Notify.Split(',', ';').Where(x => !string.IsNullOrWhiteSpace(x))) { if (!item.Contains('@')) { continue; } recipients.Add(item); } SettingsModel settings = JsonStorage.ReadFileOrDefault <SettingsModel>(settingsPath); SmtpService.Instance.Send(settings, subject, body, recipients); } catch (Exception ex) { Response.WriteLine(ex.ToString()); } } } }