The Structure of uDeploy

In many projects, Jenkins is the standard tool for Continuous Integration and other lifecycle and maintenance tasks. Jenkins is OpenSource, has a wide range of Plugins, and sees use in a wide range of companies. Furthermore, most jobs in Jenkins create or work with newest version of source code or artefacts. However, using your Jenkins server to manage a large server farm with different application versions can be very challenging. In this case, you would use a tool like Chef to manage your Middleware and you would use a tool to manage the large complexity of the various application versions on the servers. Ross McKinley describes how he manages a large infrastructure with Chef.in his blog post, Chef – and How we Cook our Infrastructure​.
In the case of our team, we needed a tool to manage different application versions on a large Cloud infrastructure. We decided to use uDeploy to manage the application versions on our nodes.​ uDeploy or UrbanCode Deploy or UCD is a tool to automate deployments on different environments. It is similar to Jenkins but uses UI elements for its job processes.

uDeploy StructureThe above diagram shows the relationships between the elements in uDeploy. uDeploy has the concept of an Application, an Environment, Components and Application Processes. An Application is similar to a Jenkins job. It uses Environments to manage its installation of Components. These Environments have Resources that are collections of Agents and Components. An Agent is a uDeploy process that runs on a node, similar to a Jenkins node. A Component contains versioned files and a Component Process that performs operations on these files. This Component Process contains Steps that are displayed as UI elements. A Step can be unzip, move, download or a shell command. The Properties of a Component can be used by the Component Processes. The Process of the Application uses the Component Processes to build on a higher, more abstract level, the execution flow for the whole application.

The following picture shows an example of a Component Process. At first, it deletes the files and directories of the target folder on the target machine, in the Delete Files and Directories step. Then, it downloads the artefacts from the uDeploy server to the target machine in the Download Artifacts step. In the Delete Files and Directories step, it clears the directory on the target machine, where the file should be extracted. Then it extracts the files in the Unzip step. The Shell step executes some shell commands to set the permissions of Ant. An Application Process will look similar, but will use a whole Component Process as Step.

uDeploy Process

Here you can see the Environments of this Application. With an Environment you can keep track which versions are installed on your machines. This is very helpful, when you have a high amount of machines, like in a cluster. By clicking on the play button you can execute the installation of an Application. You see on the Environments the Compliancy, which displays if all the correct versions are installed on the Environment. Keep in mind, that when you create an Application you need to add the Components to it directly, and additionally, you need to add the Resources with the Agents and Components again to the Environment.

Environments

When you click on the play button of an Environment you will see the execution process in a graphical view. You can also view the log output of each Component Process by clicking on the cmd icon. In this execution, uDeploy copies and extracts a zip file to a node. Then it installs some properties files and installs another script.

Process Request

Overall, uDeploy has it’s strength in the visual organised presentation of the Processes with their Steps, the lists of  Environments with their installed Versions, and the execution process of an Application. These features are very helpful, for maintaining a large number of nodes in a Cloud environment. For other tasks, build servers, like Jenkins, suit better and provide a faster way to create a job process. Many teams use also a combination of Jenkins and uDeploy. This strategy takes all benefits of both technologies and combines them.