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); }
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); }