deploy_tools#
A set of tools used for deploying applications to a shared filesystem.
This is used for deploying containerised desktop applications to many users who have access to a shared filesystem. We use the Environment Modules package to make these applications available to the end user.
Source |
|
---|---|
PyPI |
|
Docker |
|
Documentation |
|
Releases |
The demo_configuration folder in this repository can be passed as the config_folder to the deploy-tools commands. The deployment_root needs to be a writeable location for all files to get deployed under.
deployment_root = /path/to/deployment/root
config_folder = /path/to/config/folder
schema_folder = /path/to/schema/folder
# Generate the schema for configuration yaml files
python -m deploy_tools schema $schema_folder
# Validate the deployment configuration files, also ensuring that the required updates
# are compatible with the previous deployments.
python -m deploy_tools validate $deployment_root $config_folder
# Synchronise the deployment area with the configuration files. This will first run
# validation as part of determining the required changes
python -m deploy_tools sync $deployment_root $config_folder
Deployment Steps#
There are several key steps that make up the deployment process. Note that these are a
bit different to the CLI commands; see deploy-tools --help
for more information.
Step |
Description |
---|---|
Compare |
Compare the snapshot taken of the previous deployment with the modulefiles and built modules that already exist. This ensures that the Deployment Area is in a healthy state |
Validate |
Process the updated configuration. By comparing the new configuration files with a snapshot from the previous deployment, we determine the set of actions that need to be taken |
Build |
Generate entrypoint scripts, configuration files and environment variables for a given Module. These are output to the Build Area |
Deploy |
Move all built Modules from the Build Area into the Modules Area. A link to the built modulefile is moved to either the Modulefiles Folder or Deprecated Folder, depending on its deprecation status. Update default versions for the modulefiles |
JSON Schema#
A set of JSON schema files are provided under src/deploy_tools/models/schemas
. These are generated from the Pydantic models in the schemas parent directory.
We strongly recommend that you provide a schema for configuration file validation. The relevant lines at the top of each release file are:
# yaml-language-server: $schema=/workspaces/deploy-tools/src/deploy_tools/models/schemas/release.json
As the demo_configuration is used during development, we set it to use the locally generated schemas. Note that the ‘Generate Schema’ VSCode task will update the schemas according to any update of the code, but you need to trigger this manually and check the contents in.
For any production configuration, you should set it to use schema files from GitHub.
CLI Commands, VSCode Tasks and Debug Configuration#
The following CLI commands are used in our CI/CD process to update the Deployment Area using new configuration.
In order to help with development and testing, these commands (plus useful defaults) are
available as Tasks and Debug configurations for VSCode. These tasks (plus their default
inputs) should create a separate demo-output
folder at the top-level of the workspace
folder.
You will need to use the --from-scratch
argument if starting from a clean Deployment
Area, as there is no snapshot from a prior Deploy step.
It is recommended that you use --help
to explore the commands, arguments and options
in greater detail.
Name |
CLI command |
Description |
---|---|---|
Generate Schema |
|
Generate the yaml schema (in .json format) for the top-level configuration files |
Clean deployment |
|
Wipe the deployment area local to your own checkout of deploy-tools, enabling you to test a deployment from scratch |
Sync Modules |
|
Synchronise the Deployment configuration with the Deployment Area |
Validate deployment |
|
Compare the new configuration with that previously used when deploying modules, and test the build process if requested |
Compare deployment to snapshot |
|
Compare the configuration stored from the last |
Glossary#
See the Deployment Steps above for an overview of the primary stages of a deployment.
Term |
Definition |
---|---|
Environment Modules |
A standard package for Linux that provides definitions for loading and unloading ‘Environment Modules’. Note that while we are using this system, our definition of Module is separate. If we are referring to an Environment Module, we will use the full name |
Modulefile |
Used by the Environment Modules package to specify all details of an Environment Module. This can include executables to add to the path, environment variables to set, etc. |
Deployment |
The sum total of all Releases (deprecated or not) that are to be maintained in the Deployment Area |
Module |
A set of files that can be used to provide applications on your path, provide configuration, and set environment variables. We do this using the Environment Modules system by providing a Modulefile with the relevant configuration |
Release (noun) |
A Module, including version, alongside its lifecycle (i.e. deprecation) status |
Application |
Each Module can be configured with multiple Applications, each one providing one or more executables. As of writing, there are 2 types of Application: |
Deployment Area |
The top-level location where all Modules are to be deployed. This is typically a shared filesystem location for general use by multiple people. Note that there are several subdirectories which are used by |
(Area) Root |
Refers to the filesystem path at the root of the given Area. |
Deployment Step |
Refers to one of the primary steps that make up the Deployment process. See the section ‘Deployment Steps’ above for a breakdown |
Build Area |
The filesystem location used for building modules. This should ideally be on the same filesystem as the Deployment area to ensure that later move operations are atomic, so by default it is the |
Modules Area |
Refers to the |
Modulefiles Folder |
Refers to the |
Deprecate |
Moving a modulefile to the separate Deprecated Folder, to indicate that its use should be discouraged |
Deprecated Folder |
The folder used to contain Modulefiles for Modules that have been deprecated. By adding the modulefiles subdirectory to your MODULEPATH environment variable, you then have the ability to use any deprecated Module as normal. |
End User |
Refers to anybody who is intending to make use of a deployed Module. This can include the people modifying configuration themselves |
How the documentation is structured#
Documentation is split into four categories, also accessible from links in the top bar.