Skip to main content

Helper for deployment and CI scripts

Project description

NWON Deployment

This package provides some basic functionality that we are using for our deployment scripts and CIs.

Package is meant for internal use at NWON as breaking changes may occur on version changes. This may change at some point but not for now 😇.

What we offer

This package can help you:

  • execute shell commands
  • handle dependant environments in a docker compose based deployment
  • docker commands
  • different deployment strategy for updating a service
  • setting files handling

Command execution

We offer functions for easily execute a shell command either locally or on a docker container that is attached to one of your defined services.

Environment handling

pass

Facilitate docker commands

pass

Zero downtime deployment

pass

Setting file handling

pass

How to use

The package is configured via a setting object. You should set this settings in your deployment scripts before using any of the tools this package provides.

Typically this happens in the top level __init__.py file.

from nwon_deployment.settings import set_deployment_package_settings
from nwon_deployment.typings.deployment_settings import (
    DeploymentSettings,
    DeploymentSettingsApplicationSettings,
    DeploymentSettingsDocker,
    DeploymentSettingsGitlab,
    DeploymentSettingsPaths,
)

settings = DeploymentSettings(
    deployment_environment=deployment_environment,
    deployment_base_environment=deployment_base_environment,
    gitlab=DeploymentSettingsGitlab(
        gitlab_registry_url="https://registry.gitlab.com/test",
        use_gitlab_container_registry=False,
    ),
    docker=DeploymentSettingsDocker(
        stack_name="test",
        container_name=container_name,
        user_for_container={
            DockerService.Api: "test",
        },
        default_command_for_container={DockerService.Api: "zsh"},
        env_variable_map=env_variables_map_callable,
        compose_files=docker_compose_files,
    ),
    application_settings=DeploymentSettingsApplicationSettings(
        settings=Settings,
        lines_to_prepend_to_settings_override=["Some","thing"],
        lines_to_prepend_to_settings=["Some","other","thing"],
    ),
    paths=DeploymentSettingsPaths(
        deployment_scripts_base="/Some/path",
        deployment_environment="/Some/other/path",
    ),
)

set_deployment_package_settings(settings)
``

## Working on the package

We recommend developing using poetry.

This are the steps to setup the project with a local virtual environment:

1. Tell poetry to create dependencies in a `.venv` folder withing the project: `poetry config virtualenvs.in-project true`
1. Create a virtual environment using the local python version: `poetry env use $(cat .python-version)`
1. Install dependencies: `poetry install`

## Prepare Package

Publishing the package it is not as straight forward as just calling `poetry build` 😥.

We need to:

1. Clean dist folder
1. Bump up the version of the package
1. Build the package

Luckily we provide a script for doing all of this `python scripts/prepare.py patch`. Alternatively you can run the script in a poetry context `poetry run prepare patch`. The argument at the end defines whether you want a `patch`, `minor` or `major` version bump.

The final zipped data ends up in the `dist` folder.

## Publish Package

Before publishing the package we need to:

1. Add test PyPi repository: `poetry config repositories.testpypi https://test.pypi.org/legacy/`
2. Publish the package to the test repository: `poetry publish -r testpypi`
3. Test package: `pip install --index-url https://test.pypi.org/simple/ nwon_baseline`

If everything works fine publish the package via `poetry publish`.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nwon_deployment-0.1.16.tar.gz (863.5 kB view hashes)

Uploaded Source

Built Distribution

nwon_deployment-0.1.16-py3-none-any.whl (1.4 MB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page