Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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
                });
            }
        }
Exemple #3
0
        private BuildConfig GetBuildConfigModel(string id)
        {
            string      path   = GetConfigPath(id);
            BuildConfig config = JsonStorage.ReadFileOrDefault <BuildConfig>(path);

            SaveConfig(id, path, config);
            return(config);
        }
Exemple #4
0
        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));
        }
Exemple #5
0
        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));
        }
Exemple #6
0
        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));
        }
Exemple #7
0
 public ActionResult Settings()
 {
     return(Json(JsonStorage.ReadFileOrDefault <SettingsModel>(SettingsPath), JsonRequestBehavior.AllowGet));
 }
Exemple #8
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());
                    }
                }
            }
        }