Deployments using Rundeck




1 - What is rundeck

Rundeck is an automation tool that is used to automate tasks. It is used as a web front-end to run deployment tasks on the Maestrano Powered platforms. As Rundeck is an open source application, a new instance is installed and configured to manage one or several environments.


The Rundeck instance is configured to provide a way to execute tasks on the platform without having to configure SSH access to the server instances.\

2 - Overall process

2.1 - Build process

Maestrano components source code is stored on Github repositories. When a developer releases a version of a component, a notification is sent to Codeship Continuous Integration. The project is pulled from Github, built and if successful, packaged and uploaded to an AWS S3 bucket. From there, the built package is available for deployment on a Maestrano platform.

  1. Developer releases a code change on Github
  2. A notification is sent to Codeship
  3. Codeship builds, packages and versions and uploads the component on an AWS S3 bucket
  4. The component version is available for future deployments

2.2 - Deployment process

Rundeck deployment jobs rely on Ansible scripts to execute a sequence of tasks when deploying a Maestrano component. Each component as a specific execution process and is configured per environment (Staging, Production, etc...)

  1. User triggers a new deployment of a component version
  2. Rundeck downloads the latest version of the mno-infrastructure (Ansible scripts and configuration variables)
  3. Rundeck executes the Ansible scripts specifying the target servers and version (e.g.: deploy component:Connec!, version: 10279132)
  4. The task execution and the status of the deployment are logged by Rundeck


2.3 - Accessing Rundeck instance

URL: <to-be-decided>

User access management:

  • VPN or public access
  • User list, Roles authorized

2.4 - Projects configuration

A Rundeck project definition contains:

  • Resources: the server nodes that will be targeted by the deployment tasks. On AWS EC2, instances are found dynamically using AWS APIs keys (configured as part of the installation)
  • Node Executor: The command to use to access the nodes via SSH and a jumphost

2.5 - Jobs configuration

A Rundeck job defines the list of actions to be performed on a set of nodes. Basically it will execute an Ansible script on a remote node that will either execute the complete sequence of actions to install and configure a server or deploy a version of a component.

3 - Codeship build

Codeship build pipelines are configured by Maestrano on every component (front-end, mnohub, nex!, connec!, impac!). When a component build pipeline is executed, the test suite is run and if successful, the component is packaged and then uploaded onto the relevant S3 buckets.
The build pipelines are configured to run on different Github branches, usually a development branch and a release branch. When user acceptance testing has been performed on the development version of a component, it is then promoted to release to then be deployable to production environments.

4 - Deploying a version of a component

Projects are configured by deployable component (front-end, mnohub, connec!, impac!) and environment (UAT, Production).
For example, the project CONNEC_UAT defines how to access the Connec! servers on this environment and access them via SSH.
From there, the job CONNEC_UAT_DEPLOY_VERSION can be executed by specifying the version of Connec! to be deployed.

5 - Ansible scripts configuration

Please refer to the mno-deploy readme for information about the Maestrano products configuration: https://github.com/maestrano/mno-deploy/blob/develop/README.md