コード例 #1
0
        public void Build(List <ProjectVersion> projectVersions)
        {
            ProjectVersion activeProjectVersion = null;

            try
            {
                foreach (ProjectVersion projectVersion in projectVersions.Distinct())
                {
                    activeProjectVersion = projectVersion;

                    projectVersion.SetStringProperty("LastBuildResult", "Not started");
                    entities.SaveChanges();

                    BuildJob job = new BuildJob();
                    job.Start(
                        projectVersion.Id,
                        projectId => TaskRunnerContext.SetProjectVersionState(projectId, ProjectState.Building),
                        (projectId, isSuccess) =>
                    {
                        TaskRunnerContext.SetProjectVersionState(projectId, isSuccess ? ProjectState.Idle : ProjectState.Error);
                    });
                }
            }
            catch (Exception e)
            {
                AspNetDeployException aspNetDeployException = new AspNetDeployException("Build project failed", e);
                aspNetDeployException.Data.Add("SourceControl version Id", activeProjectVersion.SourceControlVersion.Id);
                aspNetDeployException.Data.Add("Solution file", activeProjectVersion.SolutionFile);

                Factory.GetInstance <ILoggingService>().Log(aspNetDeployException, null);

                if (e.IsCritical())
                {
                    throw;
                }
            }
        }
コード例 #2
0
        private static void BuildProjects(AspNetDeployEntities entities)
        {
            List <BundleVersion> bundleVersions = entities.BundleVersion
                                                  .Include("Properties")
                                                  .Include("ProjectVersions.SourceControlVersion.Properties")
                                                  .ToList();

            foreach (BundleVersion bundleVersion in bundleVersions)
            {
                List <ProjectVersion> projectVersions = bundleVersion.ProjectVersions.Where(pv =>
                                                                                            (
                                                                                                pv.ProjectType.HasFlag(ProjectType.Database) ||
                                                                                                pv.ProjectType.HasFlag(ProjectType.WindowsApplication) ||
                                                                                                pv.ProjectType.HasFlag(ProjectType.Service) ||
                                                                                                pv.ProjectType.HasFlag(ProjectType.Console) ||
                                                                                                pv.ProjectType.HasFlag(ProjectType.Web) ||
                                                                                                pv.ProjectType.HasFlag(ProjectType.GulpFile) ||
                                                                                                pv.ProjectType.HasFlag(ProjectType.Test)
                                                                                            ))
                                                        .ToList();

                IList <ProjectVersion> errorProjects = projectVersions.Where(pv => pv.GetStringProperty("LastBuildResult") == "Error").ToList();

                foreach (ProjectVersion projectVersion in errorProjects)
                {
                    TaskRunnerContext.SetProjectVersionState(projectVersion.Id, ProjectState.Error);
                }

                List <ProjectVersion> projectVersionsToRebuild = projectVersions.Where(pv => pv.SourceControlVersion.GetStringProperty("Revision") != pv.GetStringProperty("LastBuildRevision")).ToList();

                if (projectVersionsToRebuild.Count == 0)
                {
                    if (errorProjects.Count > 0)
                    {
                        TaskRunnerContext.SetBundleVersionState(bundleVersion.Id, BundleState.Error);
                    }

                    continue;
                }

                List <BundleVersion> affectedBundleVersions = projectVersionsToRebuild
                                                              .SelectMany(pv => pv.BundleVersions)
                                                              .Where(bv => !bv.IsDeleted)
                                                              .ToList();

                DateTime buildStartDate = DateTime.UtcNow;

                foreach (BundleVersion affectedBundleVersion in affectedBundleVersions)
                {
                    TaskRunnerContext.SetBundleVersionState(affectedBundleVersion.Id, BundleState.Building);
                }

                bundleVersion.SetStringProperty("LastBuildStartDate", DateTime.UtcNow.ToString(CultureInfo.InvariantCulture));
                entities.SaveChanges();

                ProjectsBuildStrategy buildStrategy = new ProjectsBuildStrategy(entities);
                buildStrategy.Build(projectVersionsToRebuild);

                bool buildFailed = projectVersionsToRebuild.Any(pv => pv.GetStringProperty("LastBuildResult") == "Error");

                foreach (BundleVersion affectedBundleVersion in affectedBundleVersions)
                {
                    if (buildFailed)
                    {
                        TaskRunnerContext.SetBundleVersionState(affectedBundleVersion.Id, BundleState.Error);
                        continue;
                    }

                    TaskRunnerContext.SetBundleVersionState(affectedBundleVersion.Id, BundleState.Idle);
                }

                if (bundleVersion.ProjectVersions.All(pv => TaskRunnerContext.GetProjectVersionState(pv.Id) == ProjectState.Idle))
                {
                    bundleVersion.SetStringProperty("LastBuildDuration", (DateTime.UtcNow - buildStartDate).TotalSeconds.ToString(CultureInfo.InvariantCulture));
                }

                entities.SaveChanges();
            }
        }