public override void ExecuteResult(ControllerContext context) { var HttpContext = context.HttpContext; var Request = HttpContext.Request; var Server = HttpContext.Server; var Response = HttpContext.Response.Output; lock (BuildInProgress) { if (BuildInProgress.Contains(parameters)) { Response.WriteLine("Build already in progress"); Response.Flush(); return; } BuildInProgress.Add(parameters); } try { var executable = Server.MapPath("/") + "\\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 { using (SmtpClient smtp = new SmtpClient()) { MailMessage msg = new MailMessage(); msg.From = new MailAddress("*****@*****.**","IISCI Build"); foreach (var item in config.Notify.Split(',',';').Where(x=> !string.IsNullOrWhiteSpace(x))) { if (!item.Contains('@')) continue; msg.To.Add(new MailAddress(item)); } msg.Subject = string.Format("IISCI-Build: {0} for {1}", (p.Success ? "Success" : "Failed" ) , config.SiteId) ; msg.IsBodyHtml = true; msg.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>"; smtp.Send(msg); } } catch (Exception ex) { Response.WriteLine(ex.ToString()); } } finally { lock (BuildInProgress) { BuildInProgress.Remove(parameters); } } }
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()); } } } }