There is no rollback mechanism built into the installer (unless there is an issue in the middle of the installation in which case it will back out the installation).  If you are using a VM the best practice is to snapshot your VM prior to upgrade and roll back to the snapshot if something goes wrong.  This should be done with care because any data changed post upgrade will be lost when you restore the snapshot.  

@Scott Roth - best practice in cases like this is to set the /exportversion qualifier in the DEV environment (or whatever is exporting the source) until all of your pipeline is on the newer version.

E.g.

w $system.OBJ.SetQualifiers("/exportversion=iris2022.1")

This should prevent any newer attributes from being included in the exported XML which would prevent import on an earlier version.  

ref: https://docs.intersystems.com/iris20242/csp/docbook/Doc.View.cls?KEY=RCOS_vsystem_flags_qualifiers 

@Colin Brough - values for Cache Server manager are stored in the registry.  If these servers are using CCR, you can actually download registry keys directly from you CCR System page (above Environments select Export > Studio) and load it onto a developers desktop in order to have the Environments automatically show up in the Caché Server Manager.  If these are not CCR-controlled, then you can create a .reg file similar to the following in order to pull them in (this was generated by CCR for an internal System and I have modified a few fields; the last two entries change Studio to have a red background on LIVE to make it easier to see where you are located):

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\InterSystems\Cache\Servers\ISCU-Demo-BASE]
"Address"="base.demo.iscdemo.com"
"AuthenticationMethod"="0"
"Comment"="This has been created by the CCR system export."
"ConnectionSecurityLevel"=""
"LastNamespace"=""
"Port"="51773"
"ServerType"=""
"ServerPrincipalName"=""
"Telnet"="22"
"WebServerAddress"=""
"WebServerInstanceName"=""
"WebServerPort"="443"
"HTTPS"="1"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\InterSystems\Cache\Servers\ISCU-Demo-BASE]
"Address"="base.demo.iscdemo.com"
"AuthenticationMethod"="0"
"Comment"="This has been created by the CCR system export."
"ConnectionSecurityLevel"=""
"LastNamespace"=""
"Port"="51773"
"ServerType"=""
"ServerPrincipalName"=""
"Telnet"="22"
"WebServerAddress"=""
"WebServerInstanceName"=""
"WebServerPort"="443"
"HTTPS"="1"

[HKEY_LOCAL_MACHINE\SOFTWARE\InterSystems\Cache\Servers\LIVE-ISCU-Demo]
"Address"="monitor.iscdemo.com"
"AuthenticationMethod"="0"
"Comment"="This has been created by the CCR system export."
"ConnectionSecurityLevel"=""
"LastNamespace"=""
"Port"="51773"
"ServerType"=""
"ServerPrincipalName"=""
"Telnet"="22"
"WebServerAddress"=""
"WebServerInstanceName"=""
"WebServerPort"="443"
"HTTPS"="1"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\InterSystems\Cache\Servers\LIVE-ISCU-Demo]
"Address"="monitor.iscdemo.com"
"AuthenticationMethod"="0"
"Comment"="This has been created by the CCR system export."
"ConnectionSecurityLevel"=""
"LastNamespace"=""
"Port"="51773"
"ServerType"=""
"ServerPrincipalName"=""
"Telnet"="22"
"WebServerAddress"=""
"WebServerInstanceName"=""
"WebServerPort"="443"
"HTTPS"="1"

[HKEY_CURRENT_USER\Software\InterSystems\Cache Studio\Editor\Server Background Color]
"LIVE-ISCU-Demo"=dword:00a0a0ff

[HKEY_CURRENT_USER\Software\InterSystems\Cache Studio\Editor\Status Bar Color]
"LIVE-ISCU-Demo"=dword:005757ff 

Hope this helps!

Ben

We use nightly IRIS backups which are moved to a network share, so Test can restore the backups to an alternate application data DB via a script.  We always have 2 application DBs defined, so we can script a restore on a weekly basis so the data is readily available if a developer needs it - they simply swap from the active data DB to the alternate (the alternate is always the target of the automated restore so as not to interrupt any data depending testing which may be actively going on at the time of restore).  

We have found this to be very effective for our needs for multiple internal applications. 

if you are wanting to completely render the page within the context of another page, then using <iframe src="package.page.csp" </iframe> is going to be your best bet.  Remember that a csp page isn't just a static HTML snippet - it is an entire renderable page, along with pre-page headers, etc.  That is why OnPreHttp(), OnBody() and OnPostHttp() are all included in the page framework for a .csp.  If you simply want to show what is 'rendered' when you call the page directly, you can play with calling OnPage() (which contains the compiled version of the entire body of your .csp file), but that may not operate correctly when called in isolation - it is intended to be called as part of a full pageload process, which the iframe approach above would provide.

These classes are still in your 2018.1 instance (if they were not you would not be able to log into the System Management Portal), however, the Security.* package only exists in the %SYS Namespace (as it is not a % package it isn't projected to other namespaces).  See:  https://docs.intersystems.com/ens201817/csp/documatic/%25CSP.Documatic.c...

It may have been that you used package mappings to make the Security.* classes available in your application namespace, or that they were mapped by the product (I don't remember - 2014 is 10 years old at this point ;) ).  However, best practice today is to change to temporarily change to the %SYS Namespace in your code if you ever need to call the Security.* package.  There are privileged calls in there which you typically don't want directly accessible within your application namespace. 

@Paul DeSantis - By default, all InterSystems Login users can only see the last released version of a product as well as any available preview releases.  Users that are Supported Customers (meaning they have been given access to our Support system as part of a Supported Organization) can access older builds, either through Evaluation or directly through the WRC Direct application.  Do you have a 2nd account which is tied to a Supported Org?  Or do you have a colleague who does?

@Alan Watts - there is no client-side Git plugin for Studio.  Studio works exclusively with server-side source-control hooks.  This is what the git-source-control package on OEX is ... it is server-side source control hooks to allow multiple developers to properly interact with a git repo from a single Namespace within InterSystems IRIS.  So once this is properly installed and configured for a given Namespace, once you connect via Studio you should see new top level Menu items in Studio and all changes will be governed by the source control hooks.  Nothing else is needed to be installed on the developers' Studio instances in terms of plug-ins, etc.

@Colin Brough - this was recently discussed on a thread internal to InterSystems, and I credit @Eduard Lebedyuk 
for the following options, which were suggested within the context of Enabled/Disabled Business Hosts on different environments using the same Production (some don't apply to your question about logging and testing, but I include them all for completeness):

1. Track a separate production class for each environment.
2. Use SDS to effectively disable Business Hosts (for example, by setting the Port property to an empty string).
3. Create a custom adapter/business host that has SDS configurable setting "RealEnable", which would be checked in OnInit or OnProcess input.
4. Use Interoperability Schedules, with Business Host always off/on.

I think (1) and (3) would be most likely to work for you here.

Also, it's not going to help you in the immediate term, but be aware that TestingEnabled (along with some other fields) is supported for SDS starting in InterSystems IRIS 2023.3 (I am very excited about that!!)

Sounds like you are using client-side source control in a shared development environment ... this is just a formula for frustration.  Either use private dev instances with client-side source control, or use server-side source control with a shared dev instance.  This was the theme of a presentation we did at G.S. a couple of times.  See https://community.intersystems.com/post/new-video-shared-development-21s...
NOTE - This was given a 2nd time where we used VSCode and not Atelier but I can't find that posting for some reason.   However the principles are identical whether you're using Atelier or VSCode ... they use the same APIs to manage source with the server.