Ejemplo n.º 1
0
        private async Task HandleCompletedBuild(ReleasePipelineRunnerItem item, AzureDevOpsBuild azdoBuild, CancellationToken cancellationToken)
        {
            if (azdoBuild.Result.Equals("succeeded", StringComparison.OrdinalIgnoreCase) ||
                azdoBuild.Result.Equals("partiallySucceeded", StringComparison.OrdinalIgnoreCase))
            {
                using (Logger.BeginScope(
                           $"Triggering release pipelines associated with channel {item.ChannelId} for build {item.BuildId}.",
                           item.BuildId,
                           item.ChannelId))
                {
                    await RunAssociatedReleasePipelinesAsync(item.BuildId, item.ChannelId, cancellationToken);
                }
            }
            else
            {
                int currentAttempts = item.NumberOfRetriesMade + 1;

                Logger.LogError($"Tried to trigger release pipeline for a non-succeeded build: {item.BuildId}. " +
                                $"This was attempt number {currentAttempts} of a maximum of {ReleasePipelineRunner.MaxRetriesChecksForFailedBuilds}.");

                if (currentAttempts >= ReleasePipelineRunner.MaxRetriesChecksForFailedBuilds)
                {
                    Logger.LogError($"Cancelling the checks for this build {item.BuildId}. After now retries for it won't be published.");
                }
                else
                {
                    // Build finished unsucessfully but it can still be retried and finished sucessfully.
                    EnqueueBuildStatusCheck(item, currentAttempts);
                }
            }
        }
        public static AzureDevOpsBuild AzureDevOpsBuild(
            this ICakeContext context,
            AzureDevOpsBuildSettings settings)
        {
            context.NotNull(nameof(context));
            settings.NotNull(nameof(settings));

            var build = new AzureDevOpsBuild(context.Log, settings, new BuildClientFactory(), new TestManagementClientFactory());

            if (build.HasBuildLoaded)
            {
                return(build);
            }

            return(null);
        }
Ejemplo n.º 3
0
        public async Task <int> UpdateAzureDevOpsBuilds(string patToken, TableStorageAuth tableStorageAuth,
                                                        string organization, string project, string branch, string buildName, string buildId,
                                                        int numberOfDays, int maxNumberOfItems)
        {
            AzureDevOpsAPIAccess api = new AzureDevOpsAPIAccess();
            JArray items             = await api.GetAzureDevOpsBuildsJArray(patToken, organization, project);

            int itemsAdded = 0;
            TableStorageCommonDA tableBuildsDA            = new TableStorageCommonDA(tableStorageAuth, tableStorageAuth.TableAzureDevOpsBuilds);
            TableStorageCommonDA tableChangeFailureRateDA = new TableStorageCommonDA(tableStorageAuth, tableStorageAuth.TableChangeFailureRate);

            //Check each build to see if it's in storage, adding the items not in storage
            foreach (JToken item in items)
            {
                AzureDevOpsBuild build = JsonConvert.DeserializeObject <AzureDevOpsBuild>(item.ToString());

                //Save the build information for builds
                if (build.status == "completed")
                {
                    string partitionKey            = CreateBuildWorkflowPartitionKey(organization, project, buildName);
                    string rowKey                  = build.buildNumber;
                    AzureStorageTableModel newItem = new AzureStorageTableModel(partitionKey, rowKey, item.ToString());
                    if (await tableBuildsDA.AddItem(newItem) == true)
                    {
                        itemsAdded++;
                    }

                    //Save the build information for change failure rate
                    ChangeFailureRateBuild newBuild = new ChangeFailureRateBuild
                    {
                        Id                   = build.id,
                        Branch               = build.sourceBranch,
                        BuildNumber          = build.buildNumber,
                        StartTime            = build.queueTime,
                        EndTime              = build.finishTime,
                        BuildDurationPercent = build.buildDurationPercent,
                        Status               = build.status,
                        Url                  = build.url
                    };
                    itemsAdded += await UpdateChangeFailureRate(tableChangeFailureRateDA, newBuild, CreateBuildWorkflowPartitionKey(organization, project, buildName));
                }
            }

            return(itemsAdded);
        }