Exemplo n.º 1
0
        public async Task StartBuildAsync(DisplayBuild build)
        {
            var client = VssClientHelper.GetClient <BuildHttpClient>(
                Settings.GlobalSettings.Current.AccountUrl,
                Settings.GlobalSettings.Current.ApiKey,
                Settings.GlobalSettings.Current.UseSsl);

            await client.QueueBuildAsync(new Microsoft.TeamFoundation.Build.WebApi.Build
            {
                Definition = new DefinitionReference {
                    Id = build.DefinitionId
                }
            }, Settings.GlobalSettings.Current.Project);
        }
Exemplo n.º 2
0
        public static async Task <int> Main(string[] args)
        {
            // Redirect ILogger to Console
            ILogger logger = Program.RedirectLoggerToConsole();

            // Parse command line
            CommandOptions parsedOptions = Program.ParseArguments(args);

            if (parsedOptions == null)
            {
                return(-1);
            }

            // Get Personal Access Token from command line or environment variable
            string personalAccessToken = parsedOptions.PersonalAccessToken;

            if (string.IsNullOrEmpty(personalAccessToken))
            {
                personalAccessToken = Environment.GetEnvironmentVariable("VssPersonalAccessToken");
            }

            // Get Sql Server connection string from command line or environment variable
            string sqlServerConnectionString = string.IsNullOrEmpty(parsedOptions.SqlServerConnectionString) ? Environment.GetEnvironmentVariable("VssSqlServerConnectionString") : parsedOptions.SqlServerConnectionString;

            // Create Azure DevOps HttpClient
            VssClient vssClient;

            if (string.IsNullOrEmpty(personalAccessToken))
            {
                // Connect using current signed in domain user
                string bearerToken = await VssClientHelper.GetAzureDevOpsBearerTokenForCurrentUserAsync();

                vssClient = new VssClient(parsedOptions.Organization, bearerToken, VssTokenType.Bearer, logger);
            }
            else
            {
                // Connect using personal access token
                vssClient = new VssClient(parsedOptions.Organization, personalAccessToken, VssTokenType.Basic, logger);
            }

            // Run collector
            await Program.RunCollectorAsync(parsedOptions, vssClient, sqlServerConnectionString, logger);

            // Returns zero on success
            return(0);
        }
Exemplo n.º 3
0
        public async Task StartDeploymentAsync(DisplayRelease release)
        {
            if (!release.EnvironmentId.HasValue)
            {
                MessageBox.Show($"Release definition '{release.Name}' has no any release. Setup automatic release creation in TFS or create release manually.");
                return;
            }

            var client = VssClientHelper.GetClient <ReleaseHttpClient>(
                Settings.GlobalSettings.Current.AccountUrl,
                Settings.GlobalSettings.Current.ApiKey,
                Settings.GlobalSettings.Current.UseSsl);

            await client.UpdateReleaseEnvironmentAsync(new ReleaseEnvironmentUpdateMetadata
            {
                Status  = EnvironmentStatus.InProgress,
                Comment = "Started from RocketBuild application"
            }, Settings.GlobalSettings.Current.Project, release.Id, release.EnvironmentId.Value);
        }
Exemplo n.º 4
0
        public async Task <List <DisplayBuild> > GetBuildsAsync()
        {
            var client = VssClientHelper.GetClient <BuildHttpClient>(
                Settings.GlobalSettings.Current.AccountUrl,
                Settings.GlobalSettings.Current.ApiKey,
                Settings.GlobalSettings.Current.UseSsl);

            var tfsClient = VssClientHelper.GetClient <TfvcHttpClient>(
                Settings.GlobalSettings.Current.AccountUrl,
                Settings.GlobalSettings.Current.ApiKey,
                Settings.GlobalSettings.Current.UseSsl);

            List <BuildDefinitionReference> definitions = await client.GetDefinitionsAsync(Settings.GlobalSettings.Current.Project, name : null);

            var tfsBuilds = await client.GetBuildsAsync(Settings.GlobalSettings.Current.Project, definitions : definitions.Select(d => d.Id), maxBuildsPerDefinition : 1, queryOrder : BuildQueryOrder.FinishTimeDescending);

            var builds = new List <DisplayBuild>();

            TfvcChangesetRef changeset = (await tfsClient.GetChangesetsAsync(Settings.GlobalSettings.Current.Project, top: 1)).FirstOrDefault();

            foreach (BuildDefinitionReference definition in definitions)
            {
                var    lastTfsBuild     = tfsBuilds.FirstOrDefault(b => b.Definition.Id == definition.Id);
                string lastTfsBuildLink = (lastTfsBuild?.Links.Links["web"] as ReferenceLink)?.Href;

                builds.Add(new DisplayBuild
                {
                    DefinitionId    = definition.Id,
                    Path            = definition.Path.TrimStart('\\'),
                    Name            = definition.Name,
                    LastBuild       = lastTfsBuild != null ? Regex.Match(lastTfsBuild.BuildNumber, Settings.GlobalSettings.Current.BuildNameExtractVersionRegex).Value : String.Empty,
                    LastBuildStatus = (DisplayBuildStatus?)lastTfsBuild?.Status,
                    LastBuildResult = (BuildResult?)lastTfsBuild?.Result,
                    LastBuildLink   = lastTfsBuildLink,
                    LastCheckin     = changeset?.ChangesetId.ToString()
                });
            }

            return(builds);
        }
Exemplo n.º 5
0
        public async Task <List <DisplayEnvironment> > GetEnvironmentsAsync()
        {
            var client = VssClientHelper.GetClient <ReleaseHttpClient>(
                Settings.GlobalSettings.Current.AccountUrl,
                Settings.GlobalSettings.Current.ApiKey,
                Settings.GlobalSettings.Current.UseSsl);
            var environments = new List <DisplayEnvironment>();

            List <ReleaseDefinition> definitions = await client.GetReleaseDefinitionsAsync(Settings.GlobalSettings.Current.Project, expand : ReleaseDefinitionExpands.Environments);

            string[] environmentNames = definitions.SelectMany(d => d.Environments).Select(e => e.Name).Distinct().ToArray();

            List <Release> releases = await client.GetReleasesAsync(
                Settings.GlobalSettings.Current.Project,
                expand : ReleaseExpands.Environments,
                // Reduce number of releases to load faster
                minCreatedTime : DateTime.Today.AddMonths(-6));

            foreach (string environmentName in environmentNames)
            {
                var environment = new DisplayEnvironment
                {
                    Name = environmentName
                };

                foreach (ReleaseDefinition definition in definitions)
                {
                    ReleaseDefinitionEnvironment definitionEnvironment = definition.Environments.FirstOrDefault(e => e.Name == environmentName);
                    if (definitionEnvironment == null)
                    {
                        continue;
                    }

                    Release[] definitionReleases = releases
                                                   .Where(r => r.ReleaseDefinitionReference.Id == definition.Id && r.Environments.Any(e => e.Name == environmentName))
                                                   .OrderBy(r => r.CreatedOn)
                                                   .ToArray();

                    Release lastSuccess = definitionReleases.LastOrDefault(r => r.Environments.First(e => e.Name == environmentName).Status == EnvironmentStatus.Succeeded);
                    Release last        = definitionReleases.LastOrDefault();

                    ReleaseEnvironment releaseEnvironment = last?.Environments.First(e => e.Name == environmentName);

                    environment.Releases.Add(new DisplayRelease
                    {
                        Id                      = last?.Id ?? 0,
                        DefinitionId            = definition.Id,
                        EnvironmentId           = releaseEnvironment?.Id,
                        Name                    = definition.Name,
                        AvailableVersion        = last != null ? Regex.Match(last.Name, Settings.GlobalSettings.Current.ReleaseNameExtractVersionRegex).Value : null,
                        AvailableVersionLink    = (last?.Links.Links["web"] as ReferenceLink)?.Href,
                        LastDeployedVersion     = lastSuccess != null ? Regex.Match(lastSuccess.Name, Settings.GlobalSettings.Current.ReleaseNameExtractVersionRegex).Value : String.Empty,
                        LastDeployedVersionLink = (lastSuccess?.Links.Links["web"] as ReferenceLink)?.Href,
                        Status                  = (DisplayReleaseStatus?)releaseEnvironment?.Status
                    });
                }

                environments.Add(environment);
            }

            return(environments);
        }