Exemple #1
0
        public async Task <ExitCode> RunAsync(string deploymentTaskId,
                                              DeploymentTargetId deploymentTargetId,
                                              CancellationToken cancellationToken = default)
        {
            var agent = _agentsData.Agents.SingleOrDefault(current =>
                                                           current.Id.Equals(AgentId));

            if (agent is null)
            {
                _logger.Error("Agents is not found");
                return(ExitCode.Failure);
            }

            if (agent.ConnectionId is null)
            {
                _logger.Error("Agent");
                return(ExitCode.Failure);
            }

            await _agentHub.Clients.Clients(agent.ConnectionId).SendAsync(AgentConstants.SignalRDeployCommand,
                                                                          deploymentTaskId, deploymentTargetId.TargetId, cancellationToken);

            await Task.Delay(TimeSpan.FromSeconds(5), cancellationToken); //TODO

            return(ExitCode.Success);
        }
        public UpdateDeploymentTarget(
            DeploymentTargetId id,
            bool allowExplicitPreRelease,
            string?url,
            string packageId,
            string?iisSiteName          = null,
            string?nugetPackageSource   = null,
            string?nugetConfigFile      = null,
            bool autoDeployEnabled      = false,
            string?publishSettingsXml   = null,
            string?targetDirectory      = null,
            string?webConfigTransform   = null,
            string?excludedFilePatterns = null,
            string?environmentTypeId    = null,
            string?packageListTimeout   = null,
            string?publishType          = null,
            string?ftpPath                  = null,
            string?metadataTimeout          = default,
            bool requireEnvironmentConfig   = default,
            string?environmentConfiguration = null,
            bool packageListPrefixEnabled   = false,
            string?packageListPrefix        = null)
        {
            Id = id;
            AllowExplicitPreRelease = allowExplicitPreRelease;
            Uri.TryCreate(url, UriKind.Absolute, out var uri);
            Url                  = uri;
            PackageId            = packageId?.Trim();
            ExcludedFilePatterns = excludedFilePatterns;
            PublishType.TryParseOrDefault(publishType, out var foundPublishType);
            FtpPath.TryParse(ftpPath, FileSystemType.Directory, out var path);
            PublishType        = foundPublishType ?? PublishType.Default;
            FtpPath            = path;
            IisSiteName        = iisSiteName;
            NugetPackageSource = nugetPackageSource;
            NugetConfigFile    = nugetConfigFile;
            AutoDeployEnabled  = autoDeployEnabled;
            PublishSettingsXml = publishSettingsXml;
            TargetDirectory    = targetDirectory;
            WebConfigTransform = webConfigTransform;
            IsValid            = Id != DeploymentTargetId.Invalid;
            EnvironmentTypeId  = environmentTypeId?.Trim();
            PackageListPrefix  = packageListPrefix;

            if (TimeSpan.TryParse(packageListTimeout, out var timeout) && timeout.TotalSeconds > 0.5D)
            {
                PackageListTimeout = timeout;
            }

            if (TimeSpan.TryParse(metadataTimeout, out var parsedMetadataTimeout) &&
                parsedMetadataTimeout.TotalSeconds > 0.5D)
            {
                MetadataTimeout = parsedMetadataTimeout;
            }

            RequireEnvironmentConfig = requireEnvironmentConfig;
            EnvironmentConfiguration = environmentConfiguration;
            PackageListPrefixEnabled = packageListPrefixEnabled;
        }
 public UpdateDeploymentTargetResult(string targetName,
                                     DeploymentTargetId targetId,
                                     params ValidationError[] validationErrors)
 {
     TargetName       = targetName;
     TargetId         = targetId;
     ValidationErrors = validationErrors.ToImmutableArray();
 }
Exemple #4
0
 public AgentLogNotification(string deploymentTaskId, DeploymentTargetId deploymentTargetId, string message,
                             LogEventLevel logEventLevel)
 {
     DeploymentTaskId   = deploymentTaskId;
     DeploymentTargetId = deploymentTargetId;
     Message            = message;
     LogEventLevel      = logEventLevel;
 }
        public async Task <ExitCode> RunAsync(string deploymentTaskId,
                                              DeploymentTargetId deploymentTargetId,
                                              CancellationToken cancellationToken = default)
        {
            _logger.Information("Received deployment task {DeploymentTaskId}", deploymentTaskId);

            IHttpClient client = _logHttpClientFactory.CreateClient(deploymentTaskId, deploymentTargetId, AgentId, _logger);

            Logger logger = new LoggerConfiguration()
                            .MinimumLevel.Verbose()
                            .WriteTo.Logger(_logger)
                            .WriteTo.DurableHttpUsingTimeRolledBuffers(AgentConstants.DeploymentTaskLogRoute,
                                                                       period: TimeSpan.FromMilliseconds(100), httpClient: client)
                            .CreateLogger(); //TODO create job logger in agent

            ExitCode exitCode;

            try
            {
                using CancellationTokenSource cancellationTokenSource =
                          _timeoutHelper.CreateCancellationTokenSource(TimeSpan.FromMinutes(30));

                var deploymentTaskPackage =
                    await _deploymentTaskPackageService.GetDeploymentTaskPackageAsync(deploymentTaskId,
                                                                                      cancellationTokenSource.Token);

                if (deploymentTaskPackage is null)
                {
                    _logger.Error("Could not get deployment task package for deployment task id {DeploymentTaskId}",
                                  deploymentTaskId);

                    return(ExitCode.Failure);
                }

                if (string.IsNullOrWhiteSpace(deploymentTaskPackage.DeploymentTaskId))
                {
                    _logger.Error(
                        "Deployment task package for deployment task id {DeploymentTaskId} is missing deployment task id",
                        deploymentTaskId);

                    return(ExitCode.Failure);
                }

                exitCode =
                    await _deploymentPackageHandler.RunAsync(deploymentTaskPackage, logger,
                                                             cancellationTokenSource.Token);

                logger.Dispose();
            }
            catch (Exception ex) when(!ex.IsFatal())
            {
                _logger.Error(ex, "Failed to deploy {DeploymentTaskId}", deploymentTaskId);
                return(ExitCode.Failure);
            }

            return(exitCode);
        }
        public DeploymentLogNotification([NotNull] DeploymentTargetId deploymentTargetId, [NotNull] string message)
        {
            if (string.IsNullOrWhiteSpace(message))
            {
                throw new ArgumentException("Value cannot be null or whitespace.", nameof(message));
            }

            DeploymentTargetId = deploymentTargetId;
            Message            = message;
        }
 public DeploymentTaskItem(string deploymentTaskId,
                           string packageVersion,
                           DeploymentTargetId deploymentTargetId,
                           string?startedBy)
 {
     DeploymentTaskId   = deploymentTaskId;
     PackageVersion     = packageVersion;
     DeploymentTargetId = deploymentTargetId;
     StartedBy          = startedBy;
 }
Exemple #8
0
 public CustomHttpClient(IHttpClientFactory httpClientFactory,
                         string deploymentTaskId,
                         DeploymentTargetId deploymentTargetId,
                         AgentId agentId,
                         ILogger logger)
 {
     _httpClientFactory  = httpClientFactory;
     _deploymentTaskId   = deploymentTaskId;
     _deploymentTargetId = deploymentTargetId;
     _agentId            = agentId;
     _logger             = logger;
 }
Exemple #9
0
        public async Task <DeploymentTarget?> GetDeploymentTargetAsync(
            DeploymentTargetId deploymentTargetId,
            CancellationToken cancellationToken = default)
        {
            var organizations = await GetOrganizationsAsync(cancellationToken);

            DeploymentTarget?foundDeploymentTarget = organizations
                                                     .SelectMany(organizationInfo => organizationInfo.Projects)
                                                     .SelectMany(projectInfo => projectInfo.DeploymentTargets)
                                                     .SingleOrDefault(deploymentTarget => deploymentTarget.Id == deploymentTargetId);

            return(foundDeploymentTarget);
        }
Exemple #10
0
        private DeploymentTargetWorker?GetWorkerByTargetId([NotNull] DeploymentTargetId targetId)
        {
            if (!_configurationInstanceHolder.TryGet(targetId.TargetId,
                                                     out DeploymentTargetWorker? worker))
            {
                int registered = _configurationInstanceHolder.RegisteredTypes
                                 .Count(type => type == typeof(DeploymentTargetWorker));

                _logger.Warning("Could not get worker for target id {TargetId}, {Count} worker types registered",
                                targetId, registered);
            }

            return(worker);
        }
 public DeploymentTaskResult(
     string deploymentTaskId,
     DeploymentTargetId deploymentTargetId,
     ExitCode exitCode,
     DateTime startedAtUtc,
     DateTime finishedAtUtc,
     string metadata)
 {
     DeploymentTaskId   = deploymentTaskId;
     DeploymentTargetId = deploymentTargetId;
     ExitCode           = exitCode;
     StartedAtUtc       = startedAtUtc;
     FinishedAtUtc      = finishedAtUtc;
     Metadata           = metadata;
 }
        public DeploymentTask(
            [NotNull] PackageVersion packageVersion,
            [NotNull] DeploymentTargetId deploymentTargetId,
            Guid deploymentTaskId,
            string?startedBy)
        {
            if (packageVersion is null)
            {
                throw new ArgumentNullException(nameof(packageVersion));
            }

            SemanticVersion    = packageVersion.Version;
            PackageId          = packageVersion.PackageId;
            DeploymentTargetId = deploymentTargetId;
            StartedBy          = startedBy;
            DeploymentTaskId   =
                $"{DateTime.UtcNow.ToString("O", CultureInfo.InvariantCulture).Replace(":", "_", StringComparison.Ordinal)}_{deploymentTaskId.ToString().Substring(0, 8)}";
        }
        public DeploymentTask(
            [NotNull] string packageVersion,
            DeploymentTargetId deploymentTargetId,
            Guid deploymentTaskId,
            string startedBy)
        {
            if (string.IsNullOrWhiteSpace(packageVersion))
            {
                throw new ArgumentException("Value cannot be null or whitespace.", nameof(packageVersion));
            }

            string[] parts     = packageVersion.Split(' ');
            string   packageId = parts[0];

            var version = SemanticVersion.Parse(parts.Last());

            SemanticVersion    = version;
            PackageId          = packageId;
            DeploymentTargetId = deploymentTargetId;
            StartedBy          = startedBy;
            DeploymentTaskId   =
                $"{DateTime.UtcNow.ToString("O", CultureInfo.InvariantCulture).Replace(":", "_", StringComparison.InvariantCulture)}_{deploymentTaskId.ToString().Substring(0, 8)}";
        }
 public Task <DeploymentTarget?> GetDeploymentTargetAsync(DeploymentTargetId deploymentTargetId,
                                                          CancellationToken cancellationToken = default) => Task.FromResult((DeploymentTarget?)null);
Exemple #15
0
 public AgentDeploymentFailed(string deploymentTaskId, DeploymentTargetId deploymentTargetId, string agentId)
 {
     DeploymentTaskId   = deploymentTaskId;
     DeploymentTargetId = deploymentTargetId;
     AgentId            = new AgentId(agentId);
 }
 public TargetCreated(DeploymentTargetId targetId) => TargetId = targetId;
        public void CtorShouldCreateInstanceForValid()
        {
            var deploymentTargetId = new DeploymentTargetId("abc");

            deploymentTargetId.Should().NotBeNull();
        }
Exemple #18
0
 public TargetEnabled(DeploymentTargetId targetId) => TargetId = targetId;
Exemple #19
0
 public CreateTargetResult(DeploymentTargetId targetId, string targetName)
 {
     TargetId         = targetId;
     TargetName       = targetName;
     ValidationErrors = ImmutableArray <ValidationError> .Empty;
 }