by robert
Sun, May 10 2009 13:30
Nun geht es darum die kopierte Webseite auch im IIS einzurichten. Da der redundante Server auf EC2 noch als Windows 2003 Maschine läuft muss das Script sowohl IIS6 als IIS7 unterstützen. (Ob durch Azure, EC2 niemals von Hause aus Windows 2008 Instanzen unterstützen wird?). Duch die benötigte Rückwertskompatibilität setzen wir daher WMI ein.
function IISCreateWebSite
{
$service = Get-WmiObject -namespace "root\MicrosoftIISv2" -class "IIsWebService"
$bindingClass = [wmiclass]'root\MicrosoftIISv2:ServerBinding'
$bindings = $bindingClass.CreateInstance()
$bindings.IP = ""
$bindings.Port = "80"
$bindings.Hostname = $iis_app_hostheader
$result = $service.CreateNewSite($iis_app_name, $bindings, $path_targetDeployment)
}
Die Umsetzung war verblüffend einfach und in 10 Minuten geschafft (Dank GBP “Google Based Programming”). Die Variablen sind nach bester Programmierermanier global.
e87157ac-5c4c-4c27-9961-8b74c7d8c8a2|0|.0
Tags:
Powershell
by robert
Fri, May 08 2009 21:20
Für eine Reihe von Ordnern benötigt der IIS User Schreibrechte. Hierfür verwenden wir eine Datei “user-rights.template”, die die entsprechenden Rechte erhält.
Folgende Ordner in unserer deployten Webseite sollen diese Rechte erhalten: "ProductImages", "PunchOutImages", "Style", "TempFiles", "CmsImages".
Nun hilft diese Funktion:
1: function SetFolderUserRights
2: {
3: $folderNames = "ProductImages", "PunchOutImages", "Style", "TempFiles", "CmsImages"
4:
5: $templateAcl = Get-Acl ($path_sourceRoot + "/user-rights.template")
6:
7: foreach($folderName in $folderNames){
8: Set-Acl -Path ($path_targetDeployment + "/" + $folderName) -AclObject $templateAcl
9: }
10: }
Im nächsten Schritt gilt es, die IIS Web-Application mit Powershell einzurichten:

2f344a27-782c-40af-a045-d55b6489eadc|0|.0
Tags:
Powershell
by robert
Fri, May 08 2009 21:07
Beim Einrichten einer neuen Webseite geht es immer auch darum ein paar Konfigurationswerte anzupassen. In unserem konkreten Fall benötigen wir lediglich:
- ApplicationPath
- ConnectionString
Hier hilft der klassische Template Processor:
Wobei “Deployment.ps1” die “Template-Engine” ist
1: function CopyAndChangeWebConfig
2: {
3: $webConfigTemplate = Get-Content -Path $path_sourceConfigTemplate -Encoding UTF8;
4: $webConfigTemplate = $webConfigTemplate -replace("#ApplicationPath#", $path_targetDeployment );
5: $webConfigTemplate = $webConfigTemplate -replace("#ConnectionString#", $Server );
6: Set-Content -Path ($path_targetDeployment + "/web.config") -Encoding UTF8 -Value $webConfigTemplate;
7: }
Lesen, ersetzen, zurückschreiben und leicht zu erweitern.
:-)
998d0393-a10c-4847-afa6-a9033a0812c2|0|.0
Tags:
Powershell
by robert
Fri, May 08 2009 20:23
Das Script wächst:
Hier die Funktion “CopyTemplateToTarget”:
1: ##################################################
2: # FILE SYSTEM: DATA SECTION
3: ###################################################
4: function CopyTemplateToTarget
5: {
6: if ((Test-Path $path_targetDeployment) -eq $false ){
7: New-Item $path_targetDeployment -Force -ItemType directory;
8: }
9:
10: copy-item $path_sourceDeploymenPackage* $path_targetDeployment -recurse -force
11:
12: PrintElapsedTime
13: }
Die Variable $path_targetDeployment beinhaltet den Ordner, in den kopiert werden soll. Existiert dieser Ordner nicht, so wird er erstellt.
33d5cb6c-26ef-4d7a-b33a-5bf96ad79fcc|0|.0
Tags:
Powershell
by robert
Fri, May 08 2009 20:06
Für das wiederkehrende Einrichten von Webseiten zu vereinfachen, habe ich die Aufgabe eine Deployment-Script mit Powershell zu entwickeln. Um die Aufgaben zu beschreiben, erstelle ich zunächst eine erste Pseudocode Version:
Unten (Ab Zeile 18) ist im wesentlich der geplante Programmablauf zu finden. Das automatische Ausschecken aus SVN und das Erstellen des Programms ist zunächst nicht geplannt. Auch automatisierte Tests, Rollbacks etc. sind zukünftigen Versionen vorbehalten. Es geht erst mal darum ein vorbereitetes Webprojekt so zu deployen, das der IIS, die Webseite und Datenbank angelegt, eingerichtet und Konfigurationswerte korrekt gesetzt werden.
5166f070-9906-464b-9fea-f76c7954c702|0|.0
Tags:
Powershell