コード例 #1
0
		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));
		}
コード例 #2
0
		/// <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();
		}
コード例 #3
0
		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");
		}
コード例 #4
0
		/// <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");
				}
			}));
		}