public override PipelineRunStatus GetPipelineRunStatus(PipelineRunRequest request)
        {
            _logger.LogInformation("Checking ADF pipeline status.");

            //Get pipeline status with provided run id
            PipelineRun pipelineRun;

            pipelineRun = _adfManagementClient.PipelineRuns.Get
                          (
                request.ResourceGroupName,
                request.OrchestratorName,
                request.RunId
                          );

            //Defensive check
            PipelineNameCheck(request.PipelineName, pipelineRun.PipelineName);

            _logger.LogInformation("ADF pipeline status: " + pipelineRun.Status);

            //Defensive check
            PipelineNameCheck(request.PipelineName, pipelineRun.PipelineName);

            //Final return detail
            return(new PipelineRunStatus()
            {
                PipelineName = request.PipelineName,
                RunId = pipelineRun.RunId,
                ActualStatus = pipelineRun.Status.Replace("Canceling", "Cancelling") //microsoft typo
            });
        }
示例#2
0
        public override PipelineRunStatus GetPipelineRunStatus(PipelineRunRequest request)
        {
            _logger.LogInformation("Getting SYN pipeline status.");

            //Get pipeline status with provided run id
            PipelineRun pipelineRun;

            pipelineRun = _pipelineRunClient.GetPipelineRun
                          (
                request.RunId
                          );

            //Defensive check
            PipelineNameCheck(request.PipelineName, pipelineRun.PipelineName);

            _logger.LogInformation("SYN pipeline status: " + pipelineRun.Status);

            //Final return detail
            return(new PipelineRunStatus()
            {
                PipelineName = request.PipelineName,
                RunId = pipelineRun.RunId,
                ActualStatus = pipelineRun.Status.Replace("Canceling", "Cancelling") //microsoft typo
            });
        }
示例#3
0
        public override PipelineRunStatus CancelPipeline(PipelineRunRequest request)
        {
            _logger.LogInformation("Getting SYN pipeline current status.");

            PipelineRun pipelineRun;

            pipelineRun = _pipelineRunClient.GetPipelineRun
                          (
                request.RunId
                          );

            //Defensive check
            PipelineNameCheck(request.PipelineName, pipelineRun.PipelineName);

            if (pipelineRun.Status == "InProgress" || pipelineRun.Status == "Queued")
            {
                _logger.LogInformation("Attempting to cancel SYN pipeline.");
                _pipelineRunClient.CancelPipelineRun
                (
                    request.RunId,
                    isRecursive: request.RecursivePipelineCancel
                );
            }
            else
            {
                _logger.LogInformation("ADF pipeline status: " + pipelineRun.Status);
                throw new InvalidRequestException("Target pipeline is not in a state that can be cancelled.");
            }

            //wait for cancelled state
            _logger.LogInformation("Checking ADF pipeline status after cancel request.");
            while (true)
            {
                pipelineRun = _pipelineRunClient.GetPipelineRun
                              (
                    request.RunId
                              );

                _logger.LogInformation("Waiting for pipeline to cancel, current status: " + pipelineRun.Status);

                if (pipelineRun.Status == "Cancelled")
                {
                    break;
                }
                Thread.Sleep(internalWaitDuration);
            }

            //Final return detail
            return(new PipelineRunStatus()
            {
                PipelineName = request.PipelineName,
                RunId = request.RunId,
                ActualStatus = pipelineRun.Status
            });
        }
示例#4
0
 private async System.Threading.Tasks.Task <PipelineRun> CreatePipelineRunAsync(
     string pipelineRunName,
     PipelineRunRequest request,
     CancellationToken cancellationToken = default(CancellationToken))
 {
     return(await _registryClient.PipelineRuns.CreateAsync(
                _registryConfiguration.ResourceGroupName,
                _registryConfiguration.Name,
                pipelineRunName,
                request,
                forceUpdateTag : null,
                cancellationToken).ConfigureAwait(false));
 }
示例#5
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest httpRequest,
            ILogger logger)
        {
            logger.LogInformation("CancelPipeline Function triggered by HTTP request.");

            logger.LogInformation("Parsing body from request.");
            PipelineRunRequest request = await new BodyReader(httpRequest).GetRunRequestBodyAsync();

            request.Validate(logger);

            using (var service = PipelineService.GetServiceForRequest(request, logger))
            {
                PipelineRunStatus result = service.CancelPipeline(request);
                logger.LogInformation("CancelPipeline Function complete.");
                return(new OkObjectResult(JsonConvert.SerializeObject(result)));
            }
        }
示例#6
0
        public async Task ExportImagesAsync(ExportPipeline exportPipeline)
        {
            var pipelineId      = exportPipeline.Id;
            var pipelineRunName = options.ExportPipelineRun.PipelineRunName;
            var targetName      = options.ExportPipelineRun.TargetName;
            var artifacts       = options.ExportPipelineRun.Artifacts;

            Console.WriteLine($"Export PipelineRun properties:");
            Console.WriteLine($"  registryName: {options.ExportPipeline.RegistryName}");
            Console.WriteLine($"  pipelineRunName: {options.ExportPipelineRun.PipelineRunName}");
            Console.WriteLine($"  pipelineResourceId: {pipelineId}");
            Console.WriteLine($"  targetName: {options.ExportPipelineRun.TargetName}");
            Console.WriteLine($"  artifacts: {string.Join(Environment.NewLine, artifacts)}");
            Console.WriteLine($"======================================================================");

            var pipelineRunRequest = new PipelineRunRequest
            {
                PipelineResourceId = pipelineId,
                Target             = new PipelineRunTargetProperties
                {
                    Type = "AzureStorageBlob",
                    Name = targetName
                },
                Artifacts = artifacts
            };

            Console.WriteLine($"Running pipelineRun {pipelineRunName}...");

            var pipelineRun = await registryClient.PipelineRuns.CreateAsync(registryName : options.ExportPipeline.RegistryName,
                                                                            resourceGroupName : options.ExportPipeline.ResourceGroupName,
                                                                            pipelineRunName : pipelineRunName,
                                                                            request : pipelineRunRequest).ConfigureAwait(false);

            if (string.Equals(pipelineRun.ProvisioningState, "Failed", StringComparison.OrdinalIgnoreCase))
            {
                Console.WriteLine($"PipelineRun {pipelineRunName} failed with the inner error '{pipelineRun.Response.PipelineRunErrorMessage}'.");
            }
            else
            {
                Console.WriteLine($"PipelineRun {pipelineRunName} completed successfully!");
                Console.WriteLine($"Uploaded blob {targetName} to {options.ExportPipeline.ContainerUri}.");
            }
        }
示例#7
0
 /// <summary>
 /// Creates a pipeline run for a container registry with the specified
 /// parameters
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='resourceGroupName'>
 /// The name of the resource group to which the container registry belongs.
 /// </param>
 /// <param name='registryName'>
 /// The name of the container registry.
 /// </param>
 /// <param name='pipelineRunName'>
 /// The name of the pipeline run.
 /// </param>
 /// <param name='request'>
 /// The request parameters for a pipeline run.
 /// </param>
 /// <param name='forceUpdateTag'>
 /// How the pipeline run should be forced to recreate even if the pipeline run
 /// configuration has not changed.
 /// </param>
 /// <param name='cancellationToken'>
 /// The cancellation token.
 /// </param>
 public static async System.Threading.Tasks.Task <PipelineRun> BeginCreateAsync(this IPipelineRunsOperations operations, string resourceGroupName, string registryName, string pipelineRunName, PipelineRunRequest request = default(PipelineRunRequest), string forceUpdateTag = default(string), CancellationToken cancellationToken = default(CancellationToken))
 {
     using (var _result = await operations.BeginCreateWithHttpMessagesAsync(resourceGroupName, registryName, pipelineRunName, request, forceUpdateTag, null, cancellationToken).ConfigureAwait(false))
     {
         return(_result.Body);
     }
 }
示例#8
0
 /// <summary>
 /// Creates a pipeline run for a container registry with the specified
 /// parameters
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='resourceGroupName'>
 /// The name of the resource group to which the container registry belongs.
 /// </param>
 /// <param name='registryName'>
 /// The name of the container registry.
 /// </param>
 /// <param name='pipelineRunName'>
 /// The name of the pipeline run.
 /// </param>
 /// <param name='request'>
 /// The request parameters for a pipeline run.
 /// </param>
 /// <param name='forceUpdateTag'>
 /// How the pipeline run should be forced to recreate even if the pipeline run
 /// configuration has not changed.
 /// </param>
 public static PipelineRun BeginCreate(this IPipelineRunsOperations operations, string resourceGroupName, string registryName, string pipelineRunName, PipelineRunRequest request = default(PipelineRunRequest), string forceUpdateTag = default(string))
 {
     return(operations.BeginCreateAsync(resourceGroupName, registryName, pipelineRunName, request, forceUpdateTag).GetAwaiter().GetResult());
 }
示例#9
0
 public abstract PipelineErrorDetail GetPipelineRunActivityErrors(PipelineRunRequest request);
示例#10
0
 public abstract PipelineRunStatus GetPipelineRunStatus(PipelineRunRequest request);
示例#11
0
 public abstract PipelineRunStatus CancelPipeline(PipelineRunRequest request);
        public override PipelineErrorDetail GetPipelineRunActivityErrors(PipelineRunRequest request)
        {
            PipelineRun pipelineRun = _adfManagementClient.PipelineRuns.Get
                                      (
                request.ResourceGroupName,
                request.OrchestratorName,
                request.RunId
                                      );

            //Defensive check
            PipelineNameCheck(request.PipelineName, pipelineRun.PipelineName);

            _logger.LogInformation("Create pipeline Activity Runs query filters.");
            RunFilterParameters filterParams = new RunFilterParameters
                                               (
                request.ActivityQueryStart,
                request.ActivityQueryEnd
                                               );

            _logger.LogInformation("Querying ADF pipeline for Activity Runs.");
            ActivityRunsQueryResponse queryResponse = _adfManagementClient.ActivityRuns.QueryByPipelineRun
                                                      (
                request.ResourceGroupName,
                request.OrchestratorName,
                request.RunId,
                filterParams
                                                      );

            //Create initial output content
            PipelineErrorDetail output = new PipelineErrorDetail()
            {
                PipelineName  = request.PipelineName,
                ActualStatus  = pipelineRun.Status,
                RunId         = request.RunId,
                ResponseCount = queryResponse.Value.Count
            };

            _logger.LogInformation("Pipeline status: " + pipelineRun.Status);
            _logger.LogInformation("Activities found in pipeline response: " + queryResponse.Value.Count.ToString());

            //Loop over activities in pipeline run
            foreach (ActivityRun activity in queryResponse.Value)
            {
                if (activity.Error == null)
                {
                    continue; //only want errors
                }

                //Parse error output to customise output
                dynamic outputBlockInner = JsonConvert.DeserializeObject(activity.Error.ToString());
                string  errorCode        = outputBlockInner?.errorCode;
                string  errorType        = outputBlockInner?.failureType;
                string  errorMessage     = outputBlockInner?.message;

                _logger.LogInformation("Activity run id: " + activity.ActivityRunId);
                _logger.LogInformation("Activity name: " + activity.ActivityName);
                _logger.LogInformation("Activity type: " + activity.ActivityType);
                _logger.LogInformation("Error message: " + errorMessage);

                output.Errors.Add(new FailedActivity()
                {
                    ActivityRunId = activity.ActivityRunId,
                    ActivityName  = activity.ActivityName,
                    ActivityType  = activity.ActivityType,
                    ErrorCode     = errorCode,
                    ErrorType     = errorType,
                    ErrorMessage  = errorMessage
                });
            }
            return(output);
        }
示例#13
0
        public override PipelineErrorDetail GetPipelineRunActivityErrors(PipelineRunRequest request)
        {
            PipelineRun pipelineRun = _pipelineRunClient.GetPipelineRun
                                      (
                request.RunId
                                      );

            //Defensive check
            PipelineNameCheck(request.PipelineName, pipelineRun.PipelineName);

            _logger.LogInformation("Create pipeline Activity Runs query filters.");
            RunFilterParameters filterParams = new RunFilterParameters
                                               (
                request.ActivityQueryStart,
                request.ActivityQueryEnd
                                               );

            _logger.LogInformation("Querying SYN pipeline for Activity Runs.");
            ActivityRunsQueryResponse queryResponse = _pipelineRunClient.QueryActivityRuns
                                                      (
                request.PipelineName,
                request.RunId,
                filterParams
                                                      );

            //Create initial output content
            PipelineErrorDetail output = new PipelineErrorDetail()
            {
                PipelineName  = request.PipelineName,
                ActualStatus  = pipelineRun.Status,
                RunId         = request.RunId,
                ResponseCount = queryResponse.Value.Count
            };

            _logger.LogInformation("Pipeline status: " + pipelineRun.Status);
            _logger.LogInformation("Activities found in pipeline response: " + queryResponse.Value.Count.ToString());

            //Loop over activities in pipeline run
            foreach (ActivityRun activity in queryResponse.Value)
            {
                if (activity.Error == null)
                {
                    continue; //only want errors
                }

                //Parse error output to customise output
                var json = JsonConvert.SerializeObject(activity.Error);
                Dictionary <string, object> errorContent = JsonConvert.DeserializeObject <Dictionary <string, object> >(json);

                _logger.LogInformation("Activity run id: " + activity.ActivityRunId);
                _logger.LogInformation("Activity name: " + activity.ActivityName);
                _logger.LogInformation("Activity type: " + activity.ActivityType);
                _logger.LogInformation("Error message: " + errorContent["message"].ToString());

                output.Errors.Add(new FailedActivity()
                {
                    ActivityRunId = activity.ActivityRunId,
                    ActivityName  = activity.ActivityName,
                    ActivityType  = activity.ActivityType,
                    ErrorCode     = errorContent["errorCode"].ToString(),
                    ErrorType     = errorContent["failureType"].ToString(),
                    ErrorMessage  = errorContent["message"].ToString()
                });
            }
            return(output);
        }