Viele Organisationen verwenden separate Entwicklungs-, Staging- und Produktionsumgebungen, um die Qualität ihrer Websites aufrechtzuerhalten. Bei Verwendung in Ihrer ArcGIS Enterprise-Organisation werden diese Umgebungen oft folgendermaßen eingerichtet:
- Entwicklung: Dies ist eine Sandbox-Umgebung, in der Sie Ihre Anwendungen und Services ohne Auswirkungen auf die Entwicklungsumgebung testen können. Die Entwicklungsumgebung wird i. d. R. auf einem kleinen Computer ausgeführt, der von der ArcGIS Enterprise-Produktionsumgebung getrennt ist. Nachdem die Änderungen in der Entwicklungsumgebung überprüft wurden, werden sie auf die Staging-Umgebung angewendet.
- Staging: Diese Umgebung ist ein Klon oder eine andere Annäherung der Produktionsumgebung. Eine Staging-Umgebung dient zum Erstellen und Testen von Mehrwertanwendungen und Karten-Caches, Durchführen von Tests zur Benutzerakzeptanz, Performance und Auslastung anderer Drittanbietersoftware, Bereitstellen neuer Aktualisierungen für kommerzielle Daten und Durchführen von Schulungsaktivitäten. Anhand der Tests in dieser Umgebung wird entschieden, ob die Änderungen auf die Produktionsumgebung angewendet werden oder ob sie abgelehnt werden und auf eine neue Iteration aus der Entwicklungsumgebung gewartet wird. Die Staging-Site wird nicht für die Entwicklung verwendet, sondern nur für Performance- und Funktionstests. Esri bietet Staging-Lizenzen für ArcGIS Enterprise zu einem geringeren Preis als Produktionslizenzen.
- Produktion: In dieser Umgebung erfolgen keinerlei Entwicklungs- oder Testaktivitäten, da GIS-Benutzer (und manchmal auch die Öffentlichkeit) auf sie zugreifen. Nur Änderungen, die die Tests auf der Staging-Site bestanden haben, werden auf die Produktions-Site angewendet.
In der Entwicklungs-, Staging- und Produktionsumgebung werden idealerweise unterschiedliche Datenbanken und Infrastrukturen verwendet. Jede Organisation verfügt über eigene Regeln für das Testen und Genehmigen von Änderungen in den verschiedenen Umgebungen.
Das Verschieben von Änderungen zwischen Umgebungen kann logistische Herausforderungen darstellen. Dieses Hilfethema bietet Muster und Skripte, die Sie durch den Prozess führen, egal ob Ihre ArcGIS Server-Site mit einem Portal verbunden oder eine eigenständige Site ist.
Hinweis:
In diesem Thema werden Überlegungen zu ArcGIS Server in der Entwicklungs-, Staging- und Produktionsumgebung erläutert. Andere ArcGIS Enterprise-Komponenten werden nicht behandelt.
Konfigurieren der einzelnen Umgebungen
In jeder Umgebung: Installieren Sie ArcGIS Server, erstellen Sie eine Site, und konfigurieren Sie Sicherheitseinstellungen, Serverobjekterweiterungen (SOEs) und weitere Einstellungen. Die meisten dieser Aufgaben lassen sich schneller manuell ausführen. Sie können jedoch auch mit einem Skript automatisiert werden.
Richten Sie zunächst die Entwicklungs-Site ein, und erstellen Sie anschließend die Staging-Site und dann die Produktions-Site.
Bereitstellen von Services
Für die Bereitstellung von Services in mehreren Umgebungen müssen Sie Ihre Ordner und Datenbanken ordnungsgemäß bei ArcGIS Server registrieren und Service-Definitionen (SDs) für die Veröffentlichung verwenden.
Registrieren von Ordnern und Datenbanken bei ArcGIS Server
Wenn Sie einen Ordner oder eine Datenbank bei ArcGIS Server registrieren, geben Sie den Pfad des Publishers zu den Daten und den Pfad des Servers an.
- Der Pfad des Publishers ist der Datenpfad auf dem Computer, den Sie zum Erstellen der SD-Dateien verwenden. Der Pfad des Publishers ist immer der gleiche, wenn Sie ein Element auf dem Entwicklungs-, Staging- und Produktionsserver registrieren.
- Der Pfad des Servers ist der Datenpfad auf dem Server. Der Pfad kann variieren, wenn Sie ein Element auf dem Entwicklungs-, Staging- und Produktionsserver registrieren.
Wenn viele Datenordner oder Datenbanken registriert werden müssen, sollten Sie möglicherweise Skripte verwenden.
Veröffentlichen von Services
Verwenden Sie SD-Dateien (Service-Definitionsdateien), wenn Sie Services in mehreren Umgebungen bereitstellen. Eine SD-Datei enthält die Informationen, die zum Veröffentlichen eines Service erforderlich sind. Sie können auch die GIS-Daten in die Service-Definition aufnehmen. Wahrscheinlich ist es jedoch einfacher, die Daten in jeder Umgebung vorab zu laden und mithilfe von Replikation synchron zu halten.
Erstellen Sie von der Verbindung unabhängige SD-Dateien (wählen Sie im Assistenten Service-Definitionsdatei speichern die Option Keine verfügbare Verbindung aus), damit sie auf jedem Server veröffentlicht werden können. Wenn Sie eine SD-Datei veröffentlichen, werden die in der SD-Datei angegebenen Pfade automatisch von ArcGIS Server in Ihre Serverpfade geändert. Durch eine sorgfältige Datenregistrierung können Sie dieselbe SD-Datei in mehreren Umgebungen bereitstellen.
Das Veröffentlichen von Services eignet sich gut für die Skripterstellung. Sie können mit der ArcPy-Funktion Service-Definition hochladen ein Skript zum Veröffentlichen jeder Service-Definition erstellen.
Aktivieren Sie die für die Services erforderlichen Erweiterungen, nachdem Sie die Services aus den Service-Definitionen bereitgestellt haben. Sie können dies manuell oder über Skripte durchführen.
Eine weitere Aufgabe, die per Skript erfolgen kann, ist das Anwenden von Berechtigungen auf in einer Textdatei aufgeführte Services.
Aktualisieren von Services
Manchmal möchten Sie möglicherweise einen Service aktualisieren, um neue Eigenschaften zu verwenden oder Änderungen im Quelldokument zu berücksichtigen. Zum Aktualisieren eines Service in mehreren Umgebungen wird empfohlen, eine neue SD-Datei zu speichern, den Service zu löschen und die aktualisierte Service-Definition zu veröffentlichen.
Wenn Sie auf diese Weise vorgehen, kann das oben zum Veröffentlichen verwendete Beispielskript auch Service-Aktualisierungen durchführen. Ändern Sie einfach die Eingabedatei, sodass sie nur die Services enthält, die Sie aktualisieren möchten. Wenn ein vorhandener Service gefunden wird, wird er vom Skript gelöscht, bevor die Service-Definition hochgeladen wird.
Nachdem Sie einen Service auf diese Weise aktualisiert haben, aktivieren Sie die vom Service verwendeten SOEs, sofern vorhanden.
Alternativ können Sie mit der ArcGIS REST API Aktualisierungen von Service-Eigenschaften (jedoch nicht des Karten- oder Quelldokuments) über Skripte durchführen.
Synchronisieren von Daten
Stellen Sie sicher, dass Ihre Daten über mehrere Umgebungen hinweg synchron bleiben. Dabei kann die Geodatabase-Replikation hilfreich sein. Alternativ können Sie das alte Dataset vollständig durch ein neues Dataset ersetzen. Sie können beispielsweise eine File-Geodatabase löschen und durch eine aktualisierte File-Geodatabase ersetzen.
Wenn Sie Tabellen oder File-Geodatabases vollständig ersetzen möchten, beachten Sie, dass ArcGIS Server-Services standardmäßig die Schemas der zugrunde liegenden Datasets sperren. Falls das Schema gesperrt ist, müssen Sie den Service beenden, bevor Sie die Daten ersetzen können. Mit etwas Vorsicht können Sie für Kartenservices die Schemasperre deaktivieren. Sie können sie jedoch nicht für andere Service-Typen deaktivieren.
Aktualisieren von Anwendungen
Um eine Anwendung zwischen der Entwicklungs-, Staging- und Produktionsumgebung zu verschieben, kopieren Sie die Anwendungsdateien von einer Site auf die andere, und aktualisieren Sie alle Service-URLs im Code, sodass sie auf die neue Site verweisen. Verwenden Sie zum Definieren der URLs für die Services Konfigurationsdateien.
Mit dem folgenden Skript können Sie die URLs im Code aktualisieren. Der Code sucht rekursiv nach Dateien in einem von Ihnen bereitgestellten Ordner, sucht nach einer bestimmten Zeichenfolge, z. B. http://myDevServer/arcgis, und ersetzt sie durch die Adresse der Staging- oder Produktions-Site, z. B. http://myProdServer/arcgis.
Erstellen Sie vor dem Starten dieses Skripts eine Sicherungskopie der ursprünglichen Anwendungsdateien. Beachten Sie außerdem, dass Sie im Skript die Erweiterung der zu verarbeitenden Textdateien, z. B. .js und .html für die ArcGIS Maps SDK for JavaScript-Dateien, angeben können.
Nachdem Sie mit dem Skript die URLs ersetzt haben, kopieren Sie die Anwendungsdateien auf den nächsten Server im Workflow (Staging- oder Produktionsserver).
import os
import sys
import shutil
import traceback
def dirEntries(dir_name, subdir, *args):
'''Return a list of file names found in directory 'dir_name'
If 'subdir' is True, recursively access subdirectories under 'dir_name'.
Additional arguments, if any, are file extensions to match filenames. Matched
file names are added to the list.
If there are no additional arguments, all files found in the directory are
added to the list.
Example usage: fileList = dirEntries(r'H:\TEMP', False, 'txt', 'py')
Only files with 'txt' and 'py' extensions will be added to the list.
Example usage: fileList = dirEntries(r'H:\TEMP', True)
All files and all the files in subdirectories under H:\TEMP will be added
to the list.
'''
fileList = []
for file in os.listdir(dir_name):
dirfile = os.path.join(dir_name, file)
if os.path.isfile(dirfile):
if not args:
fileList.append(dirfile)
else:
if os.path.splitext(dirfile)[1][1:] in args:
fileList.append(dirfile)
# recursively access file names in subdirectories
elif os.path.isdir(dirfile) and subdir:
print "Accessing directory:", dirfile
fileList.extend(dirEntries(dirfile, subdir, *args))
return fileList
def updateString(infileName, srchString,rplString):
bakFileName = os.path.splitext(infileName)[0] + ".bak"
if not os.path.exists(bakFileName):
# copy the original file
shutil.copy(infileName, bakFileName)
# Open the backup (= original) file to read
inFileHndl = open(bakFileName,"r")
outFileHndl = open(infileName,"w")
for line in inFileHndl:
if line.find(searchString) > 0:
line = line.replace(searchString, replaceString)
outFileHndl.write(line)
outFileHndl.close()
inFileHndl.close()
# remove the backup (=original content file)
os.remove(bakFileName)
if __name__ == '__main__':
try:
inFolder = r"C:\inetpub\wwwroot\viewer" # path to search
searchString = "http://mydevserver" # string to find
replaceString = "http://mystgserver" # string - replace searchString with replaceString
fList = dirEntries(inFolder, True, 'xml')
for f in fList:
updateString(f, searchString, replaceString)
print '\n\n\n' + 'Process Complete'
except:
# Return any python specific errors as well as any errors from the geoprocessor
#
tb = sys.exc_info()[2]
tbinfo = traceback.format_tb(tb)[0]
pymsg = "PYTHON ERRORS:\nTraceback Info:\n" + tbinfo + "\nError Info:\n " + \
str(sys.exc_type)+ ": " + str(sys.exc_value) + "\n"
print '\n\n\n' + pymsg