예제 #1
0
        public async Task <ActionResult> Index(string slug)
        {
            IApplication application = _applicationService.GetApplication(slug);

            if (application == null)
            {
                return(HttpNotFound());
            }

            ICredentials            credentials       = _credentialProvider.GetCredentials();
            RemoteDeploymentManager deploymentManager = application.GetDeploymentManager(credentials);

            Task <IEnumerable <DeployResult> > deployResults = deploymentManager.GetResultsAsync();
            Task <RepositoryInfo> repositoryInfo             = application.GetRepositoryInfo(credentials);

            await Task.WhenAll(deployResults, repositoryInfo);

            var appViewModel = new ApplicationViewModel(application, _settingsResolver)
            {
                RepositoryInfo = repositoryInfo.Result,
                Deployments    = deployResults.Result.ToList()
            };

            ViewBag.slug    = slug;
            ViewBag.appName = appViewModel.Name;

            return(View(appViewModel));
        }
예제 #2
0
        internal ApplicationManager(ISiteManager siteManager, Site site, string appName, ISettingsResolver settingsResolver)
        {
            _siteManager      = siteManager;
            _site             = site;
            _appName          = appName;
            _settingsResolver = settingsResolver;

            SiteUrl    = site.SiteUrl;
            ServiceUrl = site.ServiceUrl;

            DeploymentManager = new RemoteDeploymentManager(site.ServiceUrl + "deployments");
            SettingsManager   = new RemoteDeploymentSettingsManager(site.ServiceUrl + "settings");
            LogStreamManager  = new RemoteLogStreamManager(site.ServiceUrl + "logstream");
            SSHKeyManager     = new RemoteSSHKeyManager(site.ServiceUrl + "sshkey");
            VfsManager        = new RemoteVfsManager(site.ServiceUrl + "vfs");
            VfsWebRootManager = new RemoteVfsManager(site.ServiceUrl + "vfs/site/wwwroot");
            LiveScmVfsManager = new RemoteVfsManager(site.ServiceUrl + "scmvfs");
            ZipManager        = new RemoteZipManager(site.ServiceUrl + "zip");
            CommandExecutor   = new RemoteCommandExecutor(site.ServiceUrl + "command");
            ProcessManager    = new RemoteProcessManager(site.ServiceUrl + "diagnostics/processes");
            WebHooksManager   = new RemoteWebHooksManager(site.ServiceUrl + "hooks");
            RepositoryManager = new RemoteRepositoryManager(site.ServiceUrl + "scm");

            var repositoryInfo = RepositoryManager.GetRepositoryInfo().Result;

            GitUrl = repositoryInfo.GitUrl.OriginalString;
        }
예제 #3
0
        internal ApplicationManager(ISiteManager siteManager, Site site, string appName, ISettingsResolver settingsResolver)
        {
            _siteManager      = siteManager;
            _site             = site;
            _appName          = appName;
            _settingsResolver = settingsResolver;

            // Always null in public Kudu, but makes the code more similar to private Kudu
            NetworkCredential credentials = null;

            SiteUrl    = site.SiteUrl.ToString();
            ServiceUrl = site.ServiceUrl.ToString();

            DeploymentManager     = new RemoteDeploymentManager(site.ServiceUrl + "api", credentials);
            SettingsManager       = new RemoteDeploymentSettingsManager(site.ServiceUrl + "api/settings", credentials);
            LegacySettingsManager = new RemoteDeploymentLegacySettingsManager(site.ServiceUrl + "settings", credentials);
            LogStreamManager      = new RemoteLogStreamManager(site.ServiceUrl + "api/logstream", credentials);
            SSHKeyManager         = new RemoteSSHKeyManager(site.ServiceUrl + "api/sshkey", credentials);
            VfsManager            = new RemoteVfsManager(site.ServiceUrl + "api/vfs", credentials);
            VfsWebRootManager     = new RemoteVfsManager(site.ServiceUrl + "api/vfs/site/wwwroot", credentials);
            LiveScmVfsManager     = new RemoteVfsManager(site.ServiceUrl + "api/scmvfs", credentials);
            ZipManager            = new RemoteZipManager(site.ServiceUrl + "api/zip", credentials);
            RuntimeManager        = new RemoteRuntimeManager(site.ServiceUrl + "api/diagnostics/runtime", credentials);
            CommandExecutor       = new RemoteCommandExecutor(site.ServiceUrl + "api/command", credentials);
            ProcessManager        = new RemoteProcessManager(site.ServiceUrl + "api/processes", credentials);
            WebHooksManager       = new RemoteWebHooksManager(site.ServiceUrl + "api/hooks", credentials);
            RepositoryManager     = new RemoteRepositoryManager(site.ServiceUrl + "api/scm", credentials);
            JobsManager           = new RemoteJobsManager(site.ServiceUrl + "api", credentials);
            LogFilesManager       = new RemoteLogFilesManager(site.ServiceUrl + "api/logs", credentials);
            SiteExtensionManager  = new RemoteSiteExtensionManager(site.ServiceUrl + "api", credentials);

            var repositoryInfo = RepositoryManager.GetRepositoryInfo().Result;

            GitUrl = repositoryInfo.GitUrl.OriginalString;
        }
예제 #4
0
        public static RemoteDeploymentManager GetDeploymentManager(this IApplication application, ICredentials credentials)
        {
            var deploymentManager = new RemoteDeploymentManager(application.ServiceUrl + "/deployments");

            deploymentManager.Credentials = credentials;
            return(deploymentManager);
        }
예제 #5
0
        public Task <ActionResult> Index(string slug)
        {
            IApplication application = _applicationService.GetApplication(slug);

            if (application == null)
            {
                return(HttpNotFoundAsync());
            }

            ICredentials            credentials       = _credentialProvider.GetCredentials();
            RemoteDeploymentManager deploymentManager = application.GetDeploymentManager(credentials);

            // TODO: Do this in parallel
            return(deploymentManager.GetResultsAsync().Then(results =>
            {
                return application.GetRepositoryInfo(credentials).Then(repositoryInfo =>
                {
                    var appViewModel = new ApplicationViewModel(application);
                    appViewModel.RepositoryInfo = repositoryInfo;
                    appViewModel.Deployments = results.ToList();

                    ViewBag.slug = slug;
                    ViewBag.appName = appViewModel.Name;

                    return (ActionResult)View(appViewModel);
                });
            }));
        }
예제 #6
0
        /// <summary>
        /// Load your modules or register your services here!
        /// </summary>
        /// <param name="kernel">The kernel.</param>
        private static void RegisterServices(IKernel kernel)
        {
            kernel.Bind <IFileSystem>().ToConstant(new RemoteFileSystem(FilesService));
            kernel.Bind <IRepository>().ToConstant(new RemoteRepository(ScmService));
            kernel.Bind <IRepositoryManager>().ToConstant(new RemoteRepositoryManager(ScmService));
            var deploymentManager = new RemoteDeploymentManager(DeploymentService);

            kernel.Bind <IDeploymentManager>().ToConstant(deploymentManager);
        }
예제 #7
0
        public static GitDeploymentResult GitDeploy(RemoteDeploymentManager deploymentManager, string kuduServiceUrl, string localRepoPath, string remoteRepoUrl, string localBranchName, string remoteBranchName)
        {
            HttpUtils.WaitForSite(kuduServiceUrl);
            Stopwatch sw    = Stopwatch.StartNew();
            string    trace = Git.Push(localRepoPath, remoteRepoUrl, localBranchName, remoteBranchName);

            sw.Stop();

            return(new GitDeploymentResult
            {
                GitTrace = trace,
                TotalResponseTime = sw.Elapsed
            });
        }
예제 #8
0
        public async Task <ActionResult> Deploy(string slug, string id, bool?clean)
        {
            IApplication application = _applicationService.GetApplication(slug);

            if (application == null)
            {
                return(HttpNotFound());
            }

            ICredentials            credentials       = _credentialProvider.GetCredentials();
            RemoteDeploymentManager deploymentManager = application.GetDeploymentManager(credentials);

            await deploymentManager.DeployAsync(id, clean : clean ?? false);

            return(RedirectToAction("Index", new { slug }));
        }
예제 #9
0
        public async Task <ActionResult> Log(string slug, string id)
        {
            IApplication application = _applicationService.GetApplication(slug);

            if (application == null)
            {
                return(HttpNotFound());
            }

            ICredentials            credentials       = _credentialProvider.GetCredentials();
            RemoteDeploymentManager deploymentManager = application.GetDeploymentManager(credentials);

            IEnumerable <LogEntry> entries = await deploymentManager.GetLogEntriesAsync(id);

            ViewBag.slug    = slug;
            ViewBag.appName = application.Name;
            ViewBag.id      = id;
            return(View(entries));
        }
예제 #10
0
        public Task <ActionResult> Log(string slug, string id)
        {
            IApplication application = _applicationService.GetApplication(slug);

            if (application == null)
            {
                return(HttpNotFoundAsync());
            }

            ICredentials            credentials       = _credentialProvider.GetCredentials();
            RemoteDeploymentManager deploymentManager = application.GetDeploymentManager(credentials);

            return(deploymentManager.GetLogEntriesAsync(id).Then(entries =>
            {
                ViewBag.slug = slug;
                ViewBag.appName = application.Name;
                ViewBag.id = id;

                return (ActionResult)View(entries);
            }));
        }
예제 #11
0
        public void DeploymentManagerExtensibility()
        {
            // Arrange
            string repositoryName = "Mvc3Application";
            string appName        = KuduUtils.GetRandomWebsiteName("DeploymentApis");

            using (var repo = Git.CreateLocalRepository(repositoryName))
            {
                ApplicationManager.Run(appName, appManager =>
                {
                    var handler = new FakeMessageHandler()
                    {
                        InnerHandler = new HttpClientHandler()
                    };

                    var manager         = new RemoteDeploymentManager(appManager.DeploymentManager.ServiceUrl, handler);
                    manager.Credentials = appManager.DeploymentManager.Credentials;
                    var results         = manager.GetResultsAsync().Result.ToList();

                    Assert.Equal(0, results.Count);
                    Assert.NotNull(handler.Url);
                });
            }
        }
예제 #12
0
        public async Task DeploymentManagerExtensibility()
        {
            // Arrange
            string repositoryName = "Mvc3Application";
            string appName = "DeploymentApis";

            using (var repo = Git.Clone(repositoryName))
            {
                await ApplicationManager.RunAsync(appName, async appManager =>
                {
                    var handler = new FakeMessageHandler()
                    {
                        InnerHandler = HttpClientHelper.CreateClientHandler(appManager.DeploymentManager.ServiceUrl, appManager.DeploymentManager.Credentials)
                    };

                    var manager = new RemoteDeploymentManager(appManager.DeploymentManager.ServiceUrl, appManager.DeploymentManager.Credentials, handler);
                    var results = (await manager.GetResultsAsync()).ToList();

                    Assert.Equal(0, results.Count);
                    Assert.NotNull(handler.Url);
                });
            }
        }
예제 #13
0
        public void DeploymentManagerExtensibility()
        {
            // Arrange
            string repositoryName = "Mvc3Application";
            string appName = KuduUtils.GetRandomWebsiteName("DeploymentApis");

            using (var repo = Git.CreateLocalRepository(repositoryName))
            {
                ApplicationManager.Run(appName, appManager =>
                {
                    var handler = new FakeMessageHandler()
                    {
                        InnerHandler = new HttpClientHandler()
                    };

                    var manager = new RemoteDeploymentManager(appManager.DeploymentManager.ServiceUrl, handler);
                    manager.Credentials = appManager.DeploymentManager.Credentials;
                    var results = manager.GetResultsAsync().Result.ToList();

                    Assert.Equal(0, results.Count);
                    Assert.NotNull(handler.Url);
                });
            }
        }
예제 #14
0
        public static RemoteDeploymentManager GetDeploymentManager(this IApplication application, ICredentials credentials)
        {
            var deploymentManager = new RemoteDeploymentManager(application.PrimaryServiceBinding + "api", credentials);

            return(deploymentManager);
        }
예제 #15
0
        public static GitDeploymentResult GitDeploy(string kuduServiceUrl, string localRepoPath, string remoteRepoUrl, string localBranchName, string remoteBranchName)
        {
            var deploymentManager = new RemoteDeploymentManager(kuduServiceUrl);

            return(GitDeploy(deploymentManager, kuduServiceUrl, localRepoPath, remoteRepoUrl, localBranchName, remoteBranchName));
        }
예제 #16
0
        private void SubscribeToEvents(ICredentialProvider credentialProvider)
        {
            var deploymentManager = new RemoteDeploymentManager(ServiceUrl + "deploy");
            deploymentManager.Credentials = credentialProvider.GetCredentials();
            DeploymentManager = deploymentManager;
            DeploymentManager.StatusChanged += OnDeploymentStatusChanged;

            var commandExecutor = new RemoteCommandExecutor(ServiceUrl + "live/command");
            commandExecutor.Credentials = credentialProvider.GetCredentials();
            CommandExecutor = commandExecutor;
            CommandExecutor.CommandEvent += OnCommandEvent;

            var devCommandExecutor = new RemoteCommandExecutor(ServiceUrl + "dev/command");
            devCommandExecutor.Credentials = credentialProvider.GetCredentials();
            DevCommandExecutor = devCommandExecutor;
            DevCommandExecutor.CommandEvent += OnCommandEvent;

            //try
            //{
            //    // Start the connections
            //    deploymentManager.Start();
            //    commandExecutor.Start();
            //    devCommandExecutor.Start();
            //}
            //catch(Exception ex)
            //{
            //    Debug.WriteLine("Failed to subcribe for updates => " + ex.Message);
            //}
        }