public void ShouldSerialize() { Deployment sut = new Deployment { PackageContent = new PackageContent { Manifest = new Manifest { ConfigurationFile = "settings.xml" } }, BinFolder = @"C:\Temp\Updates", SettingsPath = @"C:\Temp\Updates\conf\settings.xml" }; sut.PackageContent.Bootstrappers.Add(Type.FromType(typeof(TestBootstrapper))); sut.PackageContent.Updaters.Add(Type.FromType(typeof(TestUpdater))); string xml = XmlSerializer.Serialize(sut, new NamespaceMapping { Prefix = "", Namespace = Serialization.NAMESPACE }); Assert.IsFalse(string.IsNullOrEmpty(xml)); }
/// <summary> /// Alternative to deploying a package is to start an application from a know deployed location. /// </summary> public void LoadFrom(string directory) { Logger.Info(this, "Loading from directory " + directory + "..."); string deploymentInfoPath = Path.Combine(directory, "deployment.info"); if(File.Exists(deploymentInfoPath)) { using(FileStream stream = File.Open(deploymentInfoPath, FileMode.Open, FileAccess.Read)) { Deployment deployment = XmlSerializer.Deserialize<Deployment>(stream); this._deployment = deployment; Logger.Info(this, "Loaded deployment info from " + deploymentInfoPath); } } else { this._deployment = new Deployment { PackageContent = this._packageRepository.ExtractPackageInfo(directory) }; this._deployment.BinFolder = Path.Combine(this._context.AppFolder, this.Name, "bin", this._deployment.PackageContent.Bootstrapper.Assembly.Version); this._deployment.SettingsFolder = Path.Combine(this._context.AppFolder, this.Name, "conf"); this._deployment.SettingsPath = Path.Combine(this._deployment.SettingsFolder, this._deployment.PackageContent.Manifest.ConfigurationFile); } this.Load(); }
public override void Deploy(Deployment deployment) { Logger.Debug(this, "Deploying to " + deployment.BinFolder + "..."); ZipArchive archive = new ZipArchive(this.Read()); try { foreach(ZipArchiveEntry entry in archive.Entries) { if(entry.Length == 0) continue; if(deployment.PackageContent.Manifest != null && entry.FullName == deployment.PackageContent.Manifest.ConfigurationFile) { string settingsPath = Path.Combine(deployment.SettingsFolder, entry.Name); this.ExtractEntry(entry, settingsPath); deployment.SettingsPath = settingsPath; } else { this.ExtractEntry(entry, Path.Combine(deployment.BinFolder, entry.FullName), true); } } } finally { archive.Dispose(); } Logger.Debug(this, "Deployed"); }
/// <summary> /// The physical moving of files in a <see cref="Package"/> to a location from where they can be executed. /// </summary> /// <param name="package"></param> /// <returns></returns> public Task Deploy(Package package) { return (this._server.Run(() => { // TODO [SAR] potential dead lock with the server action queue, is this lock required? lock(this._lock) { Logger.Info(this, "Deploying package from " + package.Source + "..."); this._deployment = new Deployment { PackageContent = this._packageRepository.ExtractPackageInfo(package) }; this._deployment.BinFolder = Path.Combine(this._context.AppFolder, this.Name, "bin", this._deployment.PackageContent.Bootstrapper.Assembly.Version); this._deployment.SettingsFolder = Path.Combine(this._context.AppFolder, this.Name, "conf"); package.Deploy(this._deployment); string deploymentInfoPath = Path.Combine(this._deployment.BinFolder, "deployment.info"); using(FileStream stream = File.Create(deploymentInfoPath)) { XmlSerializer.Serialize(this._deployment, stream, new NamespaceMapping { Prefix = "", Namespace = Serialization.NAMESPACE }); Logger.Info(this, "Saved deployment info to " + deploymentInfoPath); } this.RunUpdates(); this.Load(); Logger.Info(this, "Package deployed"); } })); }