示例#1
0
        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&reg;</a></div>";

                        smtp.Send(msg);
                    }

                }
                catch (Exception ex) {
                    Response.WriteLine(ex.ToString());
                }

            }
            finally {
                lock (BuildInProgress)
                {
                    BuildInProgress.Remove(parameters);
                }
            }
        }
示例#2
0
        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&reg;</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());
                    }
                }
            }
        }