예제 #1
0
        public void Execute(DeploymentTaskContext context)
        {
            _context = context;
            var exePath = Folder.Combine(_serviceFolder, _hostFileName);

            var arguments = "config-sample";

            context.BuildLog.WriteLine($"Executing: '{exePath} {arguments}'");

            var result = ProcessStarter.ExecuteWithParams(exePath, arguments, throwOnError: false);

            if (result.ExitCode == 0)
            {
                var sample = result.StdOut;
                context.BuildLog.WriteLine($"Completion result: {sample}");
                var anEvent = new ConfigSampleReceived(_context.GetValue <ObjectId>(DeploymentTaskContext.DeploymentId), sample);
                _context.Publisher.Publish(anEvent);
            }
            else
            {
                context.BuildLog.WriteLine($"Completion error: {result.StdError}");
                context.BuildLog.WriteLine($"Completion output: {result.StdOut}");
                context.BuildLog.WriteLine($"May be service does not support command 'config-sample'?");
            }
        }
예제 #2
0
        private DeploymentTask CreateDeployTask(string name, Deployment deployment, NugetFeed deploymentFeed, object parameters = null, Stream logStream = null)
        {
            var context = new DeploymentTaskContext()
            {
                TaskName        = name,
                Parameters      = parameters ?? new object(),
                DeploymentId    = deployment.Id,
                Folders         = deployment.Folders,
                ServiceFileName = $"{deployment.PackageId}.exe",
                InstanceName    = deployment.InstanceName,
                ServiceName     = string.IsNullOrWhiteSpace(deployment.InstanceName)
                    ? deployment.PackageId
                    : $"{deployment.PackageId}${deployment.InstanceName}",
                PackageDetails = new PackageDetails(deployment.PackageId, deploymentFeed.Uri, deployment.PackageVersion),
                KeepOnUpdate   = deployment.KeepOnUpdate ?? FileList.Empty,
                Mediator       = _mediator,
                Config         = deployment.Config
            };

            var template = _service.GetTemplate(name);
            var task     = new DeploymentTask(context);

            foreach (var operationType in template.Operations)
            {
                var operation = (IOperation)_kernel.Resolve(operationType);
                task.Add(operation);
            }
            return(task);
        }
예제 #3
0
        private DeploymentTask CreateDeployTask(string name, Deployment deployment, Stream logStream = null)
        {
            var actualLogStream = logStream ?? BuildDefaultLogStream(name, deployment);
            var streamWriter    = new StreamWriter(actualLogStream);

            var context = new DeploymentTaskContext(streamWriter);

            context
            .SetValue(DeploymentTaskContext.TaskName, name)
            .SetValue(DeploymentTaskContext.DeploymentId, deployment.Id)
            .SetValue(DeploymentTaskContext.PublisherKey, _publisher)
            .SetValue(DeploymentTaskContext.LogStream, actualLogStream)
            .SetValue(DeploymentTaskContext.Folders, deployment.ServiceFolders.HostFolders.ToArray())
            .SetValue(DeploymentTaskContext.Config, deployment.Config);

            return(new DeploymentTask(context));
        }
예제 #4
0
 public void Execute(DeploymentTaskContext context)
 {
     foreach (var folder in _folders)
     {
         try
         {
             context.BuildLog.Write("Delete folder {0} ", folder);
             Folder.EnsureDeleted(folder);
             context.BuildLog.WriteLine("succed.");
         }
         catch
         {
             context.BuildLog.WriteLine("failed.");
             throw;
         }
     }
 }
예제 #5
0
        public void Execute(DeploymentTaskContext context)
        {
            var exePath = Folder.Combine((string)context.Folders.DeployFolder, context.ServiceFileName);

            var arguments = "config-sample";

            context.BuildLog.WriteLine($"Executing: '{exePath} {arguments}'");

            var result = ProcessStarter.ExecuteWithParams(exePath, arguments, throwOnError: false);

            if (result.ExitCode == 0)
            {
                var sample = result.StdOut;
                context.BuildLog.WriteLine($"Completion result: {sample}");
                var request = new SetConfigSampleRequest(context.DeploymentId, sample);
                context.Mediator.Send(request);
            }
            else
            {
                context.BuildLog.WriteLine($"Completion error: {result.StdError}");
                context.BuildLog.WriteLine($"Completion output: {result.StdOut}");
                context.BuildLog.WriteLine($"May be service does not support command 'config-sample'?");
            }
        }
예제 #6
0
 public void Execute(DeploymentTaskContext context)
 {
     context.Publisher.Publish(new DeploymentDeletedEvent(_id));
 }
예제 #7
0
 public DeploymentTask(DeploymentTaskContext context)
 {
     _operations = new List <IOperation>();
     Context     = context;
 }