Docker deployment utilities for REDMIC infrastructure.
You can use it to deploy your own services, supporting **docker-compose** and **Docker Swarm** environments.
You can use it to deploy your own services, supporting **Docker Compose** and **Docker Swarm** environments.
## Actions
***deploy**: Perform a service deployment on a remote Docker environment. Contains 3 stages:
**prepare-deploy*: Copy resources to remote environment (*docker-compose* files, service configurations...), prepare environment variables and directories, etc.
**do-deploy*: Launch service on Docker environment. Both standard (using *docker-compose*) and *Swarm* modes are supported on remote Docker environment, but *Swarm* mode is recommended (even for single-node clusters).
**prepare-deploy*: Copy resources to remote environment (*compose* files, service configurations...), prepare environment variables and directories, etc.
**do-deploy*: Launch service on Docker environment. Both standard (using `docker compose`) and *Swarm* (using `docker stack deploy`) modes are supported on remote Docker environment, but *Swarm* mode is recommended (even for single-node clusters).
**check-deploy*: Once deployment is done, this stage waits a defined time period for the service to being up and running (or stopped after run successfully). If service status remains stable after several checks, then it is considered successfully deployed.
***create-nets**: Prepare remote environment creating Docker networks which are external to service definition (not created by service deployment itself, defined as *external* in compose files).
***relaunch**: Force a previously deployed service to update, relaunching it with the same service configuration. Available only for *Swarm* mode.
## Usage
@@ -23,9 +18,10 @@ For REDMIC, we use this image into CI/CD configuration. Deploy jobs are defined
@@ -49,46 +45,44 @@ Using script parameters you can set:
You may define these environment variables (**bold** are mandatory):
***DEPLOY_KEY**: Private key used to authenticate, paired with a public key accepted by remote host.
***SSH_REMOTE**: SSH user and hostname (DNS or IP) of remote host where you are going to deploy.
***STACK**: Name of Docker stack (*Swarm* mode) or project (*docker-compose* mode) used to wrap deployed services.
**COMPOSE_FILE*: Name of service definition file. Multiple files are supported, separated by colon (`:`). Default `docker-compose.yml`.
**DEFAULT_DEPLOY_FILES*: Files needed for deployment. Used only if `DEPLOY_DIR_NAME` directory does not exist. Default `docker-compose*.yml .env`.
**DEPLOY_DIR_NAME*: Name of directory containing files needed for deployment. If directory exists, `DEFAULT_DEPLOY_FILES` is ignored and all content is copied to remote host. Default `deploy`.
**DEPLOY_PATH*: Path in remote host where deployment directory (used to hold temporary files) will be created. Default `~`.
**ENV_PREFIX*: Prefix used to identify variables to be defined in remote environment and service, available there without this prefix. Change this if default value collides with the beginning of your variable names. Default `DD_`.
**ENV_SPACE_REPLACEMENT*: Unique string (change this if that is not true for you) used to replace spaces into variable values while handling them. Default `<dd-space>`.
**FORCE_DOCKER_COMPOSE*: Use always standard (*docker-compose*) mode instead of Docker *Swarm*, even if it is available on remote Docker environment. Default `0`.
**OMIT_CLEAN_DEPLOY*: Leave at remote host deployment resources after doing a successful deploy. Useful when using bind mounts or *docker-compose* secrets (pointing to static content in deployment resources). Default `0`.
**SWARM_RESOLVE_IMAGE*: Allow edit behaviour of query the registry to resolve image digest and supported platforms ("always"|"changed"|"never"). Default `always`.
**GREP_BIN*: Path to *grep* binary in remote host. Default `grep`.
**REGISTRY_PASS*: Docker registry password, corresponding to a user with read permissions. **Required** for private registry or repository.
**REGISTRY_URL*: Docker registry address, where Docker must log in to retrieve images. Useful only when using private registry or repository. Default is empty, to use Docker Hub registry.
**REGISTRY_USER*: Docker registry username, corresponding to a user with read permissions. **Required** for private registry or repository.
**SERVICES_TO_AUTH*: Names of services which need authorization to access to private registry, separated by space. Default is empty, to use service names found into docker-compose files with stack prefix (`<stack-name>_<service-name>`).
**SERVICE*: Name of service to relaunch (`<stack-name>_<service-name>`). Available and **required** only for *relaunch* action.
**SERVICES_TO_CHECK*: Names of services to check after deployment, separated by space. Default is empty, to use service names found into docker-compose files with stack prefix (`<stack-name>_<service-name>`).
**SERVICES_TO_DEPLOY*: Names of services to deploy, separated by space. Available only for standard (*docker-compose*) mode. Default is empty, to deploy all defined services.
**STATUS_CHECK_DELAY*: Seconds to wait before check deployment. Default `120`.
**STATUS_CHECK_INTERVAL*: Seconds to wait between check iterations. Default `20`.
**STATUS_CHECK_MIN_HITS*: Minimum number of successful checks to consider deployment as successful. Default `3`.
**STATUS_CHECK_RETRIES*: Maximum number of checks before considering deployment as failed. Default `10`.
**USE_IMAGE_DIGEST*: Update service image using digest data when relaunching. Available only for *relaunch* action. Default `0`.
**SSH_PORT*: Port used for SSH connection to remote host. Default `22`.
**SSH_CONTROL_PERSIST*: Number of seconds while SSH connection to remote host remain open (useful for short but frequent connections). Default `10`.
| Variable name | Default value | Description |
| - | - | - |
| **DEPLOY_KEY** | - | Private key used to authenticate, paired with a public key accepted by remote host. |
| **SSH_REMOTE** | - | SSH user and hostname (DNS or IP) of remote host where you are going to deploy. |
| **STACK** | - | Name of Docker stack (*Swarm* mode) or project (*Compose* mode) used to wrap deployed services. |
| *COMPOSE_FILE* | `compose.yaml` | Name of service definition file. Multiple files are supported, separated by colon (`:`). |
| *DEFAULT_DEPLOY_FILES* | `*compose*.y*ml .env` | Files needed for deployment. Used only if `DEPLOY_DIR_NAME` directory does not exist. |
| *DEPLOY_DIR_NAME* | `deploy` | Name of directory containing files needed for deployment. If directory exists, `DEFAULT_DEPLOY_FILES` is ignored and all contents are copied to remote host. |
| *DEPLOY_PATH* | `~` | Path in remote host where deployment directory (used to hold temporary files) will be created. |
| *ENV_PREFIX* | `DD_` | Prefix used to identify variables to be defined in remote environment and service, available there without this prefix. Change this if default value collides with the beginning of your variable names. |
| *ENV_SPACE_REPLACEMENT* | `<dd-space>` | Unique string (change this if that is not true for you) used to replace spaces into variable values while handling them. |
| *FORCE_DOCKER_COMPOSE* | `0` | Use always standard (*Compose*) mode instead of Docker *Swarm*, even if it is available at remote Docker environment. |
| *OMIT_CLEAN_DEPLOY* | `0` | Leave at remote host deployment resources after doing a successful deploy. Useful when using bind mounts or *Compose* secrets (pointing to static content in deployment resources). |
| *SWARM_RESOLVE_IMAGE* | `always` | Allows to edit the behaviour of the registry query to resolve image digests and supported platforms (`always`, `changed` or `never`). |
| *GREP_BIN* | `grep` | Path to *grep* binary in remote host. |
| *REGISTRY_PASS* | - | Docker registry password, corresponding to a user with read permissions. **Required** for private registry or repository. |
| *REGISTRY_URL* | - | Docker registry address, where Docker must log in to retrieve images. Useful only when using private registry or repository. Default is empty, to use Docker Hub registry. |
| *REGISTRY_USER* | - | Docker registry username, corresponding to a user with read permissions. **Required** for private registry or repository. |
| *SERVICES_TO_AUTH* | - | Names of services which need authorization to access to private registry, separated by space. Default is empty, to use service names found into compose files with stack prefix (`<stack-name>_<service-name>`). |
| *SERVICE* | - | Name of service to relaunch (`<stack-name>_<service-name>`). Available and **required** only for *relaunch* action. |
| *SERVICES_TO_CHECK* | - | Names of services to check after deployment, separated by space. Default is empty, to use service names found into compose files with stack prefix (`<stack-name>_<service-name>`). |
| *SERVICES_TO_DEPLOY* | - | Names of services to deploy, separated by space. Available only for standard (*Compose*) mode. Default is empty, to deploy all defined services. |
| *STATUS_CHECK_DELAY* | `120` | Seconds to wait before check deployment. |
| *STATUS_CHECK_INTERVAL* | `20` | Seconds to wait between check iterations. |
| *STATUS_CHECK_MIN_HITS* | `3` | Minimum number of successful checks to consider deployment as successful. |
| *STATUS_CHECK_RETRIES* | `10` | Maximum number of checks before considering deployment as failed. |
| *USE_IMAGE_DIGEST* | `0` | Update service image using digest data when relaunching. Available only for *relaunch* action. |
| *SSH_PORT* | `22` | Port used for SSH connection to remote host. |
| *SSH_CONTROL_PERSIST* | `10` | Number of seconds while SSH connection to remote host remain open (useful for short but frequent connections). |
### Your services
When using *deploy* action, you can configure your own services through variables:
* Define any variable whose name is prefixed by `ENV_PREFIX` prefix:
1. Set variable `docker run ... -e DD_ANY_NAME=value ... deploy`.
2.`ANY_NAME` will be available into service containers with `value` value.
* Pass any variable as deploy script parameter (without `ENV_PREFIX` prefix):
1. Set parameter to deploy script: `docker run ... deploy ANY_NAME=value`.
2.`ANY_NAME` will be available into service containers with `value` value.
@@ -98,7 +92,7 @@ When using *deploy* action, you can configure your own services through variable