Beispiel #1
0
        public void Invoke(string url)
        {
            string path = HttpContext.Current.Server.MapPath("/") + "/log.txt";

            ThreadPool.QueueUserWorkItem(a => {
                using (var urlLock = new GlobalLock(url))
                {
                    if (!urlLock.AcquireLock())
                    {
                        return;
                    }
                    try
                    {
                        while (true)
                        {
                            using (WebClient client = new WebClient())
                            {
                                var response = client.DownloadString(url);
                                if (response.Contains(MSBuildRetryMessage))
                                {
                                    Thread.Sleep(1000);
                                    continue;
                                }
                                break;
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        System.IO.File.AppendAllText(path,
                                                     DateTime.Now.ToLongDateString() + "\r\n" + "Failed for " + url + "\r\n" +
                                                     ex.ToString());
                    }
                }
            });
        }
Beispiel #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());
                    }
                }
            }
        }