This guide will give you an overview of the setup, configuration, and use of the Multiple Environments functionality in Discovery Hub.
For a more detailed guide, you can download the MULTIPLE ENVIRONMENT SETUP GUIDE in PDF format Here.
This guide is divided into 4 Steps:
- Initial Server Setup
- Configure the Environments
- Create Additional Intermediate Environments
- Configure Global Databases
- Multiple Environment Transfer
Initial Server Setup
Server Configuration & Reference Architecture
In order to implement multiple environments, you must first decide on your server configuration for your environments. The below image is an reference architecture of Discovery Hub configured with 3 Environments; Development, Test, and Production. As you can see in the diagram, Development and Test are co-located on the same server. This can be done to save resource costs if desired. However, many organizations prefer to have the server specs of Test match the server specs of Production in order to analyze performance as well. Take the time to consider these and other factors before deciding on an architecture and, if necessary, consult your TimeXtender Partner to help make these decisions.
Create a Repository Database for each Environment
You must create a new project repository database for each Environment. It can be helpful to follow a naming convention to clearly identify each database such as projectRepository_Dev | projectRepository_Test |projectRepository_Prod. These databases should reside on the associated environment server. To create another repository database:
- In Discovery Hub Tools Menu > Options > Project repository Tab
- Indicate the correct server name.
- Type the desired database name for this new repository.
- Click Create.
Create a Service User for Each Environment
Each Environment (except for Development) needs an individual "Log-on As" user. This is typically the same "service" user used to run the Scheduler service. This user will be initiating the deployment and execution operations triggered through other environments, therefore, needs to have DbCreator security permissions on all associated databases for that environment. (e.g. projectRepository, ODX, DSA, and MDW).
Configure the Server Service for each Environment
Each environment (except for Development) needs to have an instance of the Discovery Hub Server Service. You'll need to modify the service to use the "Log-on As" service created in the previous step. (Please note: you will be unable to start the service until you 1. Assign the service user to the associated environment's project repository[step below] and create the associated environment(s) in Discovery Hub. [step covered in the first video below])
One instance of the Discovery Hub Scheduler Service and Discovery Hub Server service are installed when installing the Server version (as opposed to "client") of Discover Hub, so you may not need to create a new service. However, if you are running two (non-dev) environments on the same machine, you will need to create another instance of the server service. To create an additional service:
- Discovery Hub Tools Menu > Windows Service Setup
- Options > Create Service
- Provide the necessary info for the service & click create. (You may need to complete the following step first.)
Assign Each Service User to the Associated Environment's Project Repository
When you start the Server Service, the "Log-on As" user opens an instance of the TimeXtender.exe process (Discovery Hub without the UI) in the background. This process needs to know what repository to connect to. To assign the Service Account to the associated environment's project repository:
- Log into windows using the service account that will be used to run the service and launch Discovery Hub... OR
- Navigate to the timextender.exe application file in the Discovery Hub installation directory, Shift+Right-Click and choose Run as different user.
Enter the credentials for the Service Account and click OK. This will run the Discovery Hub application as the Service Account user.
- Discovery Hub will ask you to enter the SQL Server and Database name for the project repository. Enter the server and database for the repository you want to associate with the service. Click OK/Next to confirm your settings.
- Close the instance of Discovery Hub running as the Service Account.
Once you have completed the initial setup, you should now be able to create the Environments in Discovery Hub, which we will cover in the following video. Please note, you will be unable to start the service until we create the environments.
Configure the Firewall
If configuring multiple environments across multiple servers it will be necessary to open the proper ports to allow Discovery Hub to communicate across the servers. This will depend on the ports you define for each environment. The below diagram is an example of a Development-Production configuration with the outbound and inbound firewall rules illustrated by orange arrows.
Notice the Production Environment is specified in the Development server as a "remote" environment and in the Production server as a "local" environment. So when communicating across environments, Discovery Hub uses the "local port" of the "remote" environment for outgoing communication and the port of the "local" environment for incoming communication.
*Discovery Hub will send a confirmation back to the originating machine over a dynamic port, so all dynamic ports should also remain open between these two machines. Review this article to learn more abou how Dynamic Ports are used during Multi-Environment transfer.
Configure the Environments
Watch the following video to configure your environments in Discovery Hub.
- Create the Local Production Environment in the Production Repository
- Log into the Production Server
- Open Discovery Hub & switch to the Production Repository
- Open Environment Properties
- Create the "local" production environment.
- Start the Production Server Service (using the Production Service user)
- Create the Local Development Environment in the Development Repository.
- Log into the Development Server
- Open Discovery Hub & switch to the Development Repository
- Open Environment Properties
- Create the "local" development environment
- Create the Remote Production Environment in the Development Repository.
- In Environment properties, in the development repository & server.
- Create the "remote" Production Environment.
The completed configuration of Development and Production should look something like this:
Create Additional Intermediate Environments
If you wish to create additional intermediate environments, you can do so by slightly modifying the previous instructions. For example, if you were to create a Test Environment you would follow these steps.
- Be sure to complete initial setup steps for this Environment.
- Create the Test Environment in the Test Repository (on the test server, if a separate server is being used).
- Create the Remote Production Environment in the Test Repository
- Start the Test Service (using the Test Service User)
- Create the Remote Test Environment from the Development Repository
- Adjust the Environment Sequence numbers by click in the environment name in the environment properties dialog.
Configure Global Databases
When using Multiple environments it's important to identify a separate set of databases (Data Sources, ODX, DSA, MDW etc.) for each environment. Discovery Hub uses Global databases as a way to define dynamic database connections that are configured on a "per-environment" basis.
Watch the following video to learn how to configure global databases.
- Review all the databases that exist in your project and note the desired SQL server names and database names to be used in each environment. (e.g. ODX/DSA/MDW)
- Create the Global Database in Environment Properties in the Development Environment.
- Define the Server & Database Name for Development.
- Define the Server & Database Name for Production.
- Create new databases as necessary by right-clicking on "settings" in the desired cell.
- Click OK to exit the Environment Properties Dialog
- Right click on the desired database in your project and click Edit Database
- Click: Use Global Database
- Select the created global database from the drop-down.
- Repeat these steps for any databases or data sources that are environment specific.
Multiple Environment Transfer
Now that you have configured multiple environments you may want to promote your project to the next environment.
Initial Steps Prior to Environment Transfer
- Deploy & Execute your entire project in the previous environment.
- This can identify any potentially unresolved bugs.
- Prepare an Execution Package to run after the transfer.
- If you have made changes to any Incremental tables, be sure to select those tables for full-load in this package.
- Be sure you name the package so you and others know it's for a one-time use.
- Stop the scheduler service in the destination environment.
- This will ensure no scheduled executions begin during the transfer.
- Ensure no execution packages are running in the destination environment.
Watch the following video to see how to transfer a project to the next environment.
- In the Development Environment, open Multiple Environment Transfer
- Click Transfer
- Deploy, Managed & Differential
- Run the desired Execution Package.