{"id":13416565,"url":"https://github.com/DIPSAS/DockerBuildManagement","last_synced_at":"2025-03-15T00:31:07.404Z","repository":{"id":90879832,"uuid":"161797252","full_name":"DIPSAS/DockerBuildManagement","owner":"DIPSAS","description":"Build Management is a python application, installed with pip. The application makes it easy to manage a build system based on Docker by configuring a single yaml file describing how to build, test, run or publish a containerized solution.","archived":true,"fork":false,"pushed_at":"2021-09-22T23:54:28.000Z","size":163,"stargazers_count":11,"open_issues_count":0,"forks_count":5,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-07-31T21:57:11.940Z","etag":null,"topics":["buildsystem","cd","ci","docker","python","python-application","swarm","yaml"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DIPSAS.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-12-14T14:44:08.000Z","updated_at":"2023-10-20T10:09:50.000Z","dependencies_parsed_at":"2024-01-07T10:50:47.012Z","dependency_job_id":null,"html_url":"https://github.com/DIPSAS/DockerBuildManagement","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DIPSAS%2FDockerBuildManagement","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DIPSAS%2FDockerBuildManagement/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DIPSAS%2FDockerBuildManagement/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DIPSAS%2FDockerBuildManagement/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DIPSAS","download_url":"https://codeload.github.com/DIPSAS/DockerBuildManagement/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243667718,"owners_count":20328032,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["buildsystem","cd","ci","docker","python","python-application","swarm","yaml"],"created_at":"2024-07-30T21:01:01.004Z","updated_at":"2025-03-15T00:31:06.980Z","avatar_url":"https://github.com/DIPSAS.png","language":"Python","readme":"# Docker Build Management\n\n[![PyPI version](https://badge.fury.io/py/DockerBuildManagement.svg)](https://badge.fury.io/py/DockerBuildManagement)\n[![Build Status](https://travis-ci.com/DIPSAS/DockerBuildManagement.svg?branch=master)](https://travis-ci.com/DIPSAS/DockerBuildManagement)\n[![MIT license](http://img.shields.io/badge/license-MIT-brightgreen.svg)](http://opensource.org/licenses/MIT)\n\n# !DEPRECATED!\nPlease follow new source: \n- https://github.com/hansehe/DockerBuildManagement\n\nBuild Management is a python application, installed with pip.\nThe application makes it easy to manage a build system based on Docker by configuring a single yaml file describing how to build, test, run or publish a containerized solution.\n\n## Install Or Upgrade\n- pip install --upgrade DockerBuildManagement\n\n## Verify Installation\n- `dbm -help`\n\n## Example\n\nEither of the sections (`run`, `build`, `test`, `publish`, `promote`) in the yaml file is triggered with the following cli commands:\n- `dbm -run`\n- `dbm -build`\n- `dbm -test`\n- `dbm -publish`\n- `dbm -promote`\n\nEach of the command sections (`run`, `build`, `test`, `publish`, `promote`) includes context sections, each defined by a suitable key describing that section. Each of the context sections are executed in sequence from top to bottom by default, or you may specify the sections to execute by adding the section keys to the command line:\n- `dbm -run secondSelection`\n\nIt is also possible to execute multiple command sections in the same command line:\n- `dbm -test -build -run secondSelection`\n\nThe `swarm` section helps deploying necessary domain services needed in the development.\nStart/Stop/Restart the swarm:\n- `dbm -swarm -start`\n- `dbm -swarm -stop`\n- `dbm -swarm -restart`\n\nPlease refer to the [SwarmManagement](https://github.com/DIPSAS/SwarmManagement) project for further info on how to configure the swarm deployment.\n\nBy convention, the default yaml filename is `build.management.yml`.\nIt is possible to specify a separate yaml file (or multiple) with the `-f` key:\n- `dbm -f my-build.yml -run`\n\n```yml\nchangelog:\n    directory: src\n    cmd:\n        - python ./pythonSnippet.py\n    file: CHANGELOG.md\n    envKey: VERSION\n    envMajorVersionKey: VERSIONMAJOR\n    envMinorVersionKey: VERSIONMINOR\n\nenv_files: \n    - environment.env\n\nrun:\n    selections:\n        firstSelection:\n            directory: src\n            environmentVariables:\n                ENVIRONMENT_VARIABLE_KEY: environment_variable\n            copyFromContainer:\n                pythonSnippet:\n                    containerSrc: /src/\n                    hostDest: output/\n            cmd:\n                - python ./pythonSnippet.py\n            abortOnContainerExit: true\n            verifyContainerExitCode: true\n            removeContainers: true\n            detached: false\n            preserveMergedComposeFile: false\n            files:\n                - docker-compose.pythonSnippet.yml\n                - docker-compose.pythonSnippet.overriden.yml\n        secondSelection:\n            directory: src\n            files:\n                - docker-compose.pythonSnippet.yml\n\nbuild:\n    selections:\n        firstSelection:\n            directory: src\n            environmentVariables:\n                ENVIRONMENT_VARIABLE_KEY: environment_variable\n            cmd:\n                - python ./pythonSnippet.py\n            additionalTag: latest\n            additionalTags:\n                - ${VERSION:-1.0.0}.beta\n                - ${VERSION:-1.0.0}.zeta\n            saveImages: ../output\n            composeFileWithDigests: docker-compose.digest.pythonSnippet.yml\n            preserveMergedComposeFile: false\n            files:\n                - docker-compose.pythonSnippet.yml\n\ntest:\n    selections:\n        firstSelection:\n            directory: src\n            environmentVariables:\n                ENVIRONMENT_VARIABLE_KEY: environment_variable\n            cmd:\n                - python ./pythonSnippet.py\n            removeContainers: true\n            preserveMergedComposeFile: false\n            files:\n                - docker-compose.pythonSnippet.yml\n\npublish:\n    selections:\n        firstSelection:\n            directory: src\n            environmentVariables:\n                ENVIRONMENT_VARIABLE_KEY: environment_variable\n            cmd:\n                - python ./pythonSnippet.py\n            additionalTag: latest\n            additionalTags:\n                - ${VERSION:-1.0.0}.beta\n                - ${VERSION:-1.0.0}.zeta\n            composeFileWithDigests: docker-compose.digest.pythonSnippet.yml\n            preserveMergedComposeFile: false\n            files:\n                - docker-compose.pythonSnippet.yml\n        secondSelection:\n            directory: src\n            containerArtifact: false\n            files:\n                - docker-compose.pythonSnippet.yml\n\npromote:\n    selections:\n        firstSelection:\n            directory: src\n            environmentVariables:\n                ENVIRONMENT_VARIABLE_KEY: environment_variable\n            cmd:\n                - python ./pythonSnippet.py\n            targetTags:\n                - latest\n                - qaapproved\n            sourceFeed: \u003cdocker.dockerserver\u003e\n            targetFeed: \u003cdocker2.dockerserver\u003e\n            user: \u003cuser_for_target_and_source_feed\u003e\n            password: \u003cpassword_for_target_and_source_feed\u003e\n            logout: false\n            dryRun: false\n            files:\n                - docker-compose.pythonSnippet.yml\n\nswarm:\n    selections:\n        firstSelection:\n            directory: src\n            environmentVariables:\n                ENVIRONMENT_VARIABLE_KEY: environment_variable\n            cmd:\n                - python ./pythonSnippet.py\n            properties:\n                - -stack -remove proxy\n            files:\n                - swarm-management.yml\n```\n\nPlease have a look at an example of use here:\n- https://github.com/DIPSAS/DockerBuildManagement/tree/master/example\n\nOr take a look at another project which takes use of this library:\n- https://github.com/DIPSAS/FluentDbTools\n\n## Section Features\n\n### General features\n- `directory` -\u003e Each section has a `directory` property defining in which relative directory the section will be executed. Note that all relative position to files and command lines will be executed relative to this directory during execution of that section.\n- `environmentVariables` -\u003e Each section has an `environmentVariables` property with a subsection of key value pairs of environment variables to set.\n- `files` -\u003e Each section has a `files` property listing all `docker-compose.yml` files to use when either building, testing or running the services listed in `docker-compose.yml`.\n- `preserveMergedComposeFile` -\u003e Each section has a `preserveMergedComposeFile` property which is set to `true` or `false`. When set to `true` it will preserve a merged compose file version of the listed compose files. It is by default set to `false`.\n- `cmd` -\u003e Executes a list of command lines before initiating the main job of the section.\n\n### Run Features\nThe `run` section runs all listed docker-compose files with `docker-compose up`.\n- `abortOnContainerExit: true/false` -\u003e Tell docker-compose to abort when either of the containers exits. Default is `true`.\n- `detached: true/false` -\u003e Tell docker-compose to run the services in detached mode. Default is `false`.\n    - Note that the `abortOnContainerExit` property will be ignored if `detached` is set to `true`. \n      - docker-compose does not allow to run a compose file as detached while telling it to abort on container exit.\n- `copyFromContainer` -\u003e Copy anything from a docker container to a destination on your computer. The section contains keys matching the container name, and this key has the following sub-keys:\n    - `containerSrc: \u003cfolder_path/file_path\u003e` -\u003e Source path to copy from the container.\n    -  `hostDest: \u003cfolder_path/file_path\u003e` -\u003e Destination path on your computer to copy the container content.\n\n### Build Features\nThe `build` section builds all docker images as described by the `docker-compose.yml` files.\n- `additionalTag: \u003cadditional_image_tag\u003e` -\u003e Include an additional tag to all built docker images.\n- `additionalTags: \u003clist_of_additional_image_tags\u003e` -\u003e Include a list of additional tags to all built docker images.\n- `saveImages: \u003coutput_folder\u003e` -\u003e Save all built docker images from the compose file as tar files. The files will be saved in the given output folder.\n- `composeFileWithDigests: \u003cdocker-compose.with_digests.yml\u003e` -\u003e Get an updated version of the compose files with the unique digest included in the image names. An unique digest is generated for each published image and should always be used in production.\n  - Note! The image digest is produced by docker only when the image is published to a remote repository, meaning the image must exist on a remote repository to have the image tag replaced with the image digest.\n\n### Test Features\nThe `test` section runs all services listed in the `docker-compose.yml` files, and detects if either of the services exited with a non-zero exit code due to an error.\n- `containerNames` -\u003e List of container names of the services to check for the non-zero exit code.\n- `removeContainers: true/false` -\u003e Remove containers created by the services. Default is `true`.\n\n### Publish Features\nThe `publish` section publishes all docker images listed in the `docker-compose.yml` files.\n- `additionalTag: \u003cadditional_image_tag\u003e` -\u003e Include an additional tag to publish with the docker images.\n- `additionalTags: \u003clist_of_additional_image_tags\u003e` -\u003e Include a list of additional tags to publish with the docker images.\n- `containerArtifact: true/false` -\u003e Sometimes the solution does not publish docker images, but just something else such as nugets, pypi or gem packages. With this property set to `true`, you can make a docker container do the work of publishing the artifact. Default is `false`.\n- `composeFileWithDigests: \u003cdocker-compose.with_digests.yml\u003e` -\u003e Get an updated version of the compose files with the unique digest included in the image names. An unique digest is generated for each published image and should always be used in production.\n\n### Promote Features\nThe `promote` section promotes docker images listed in the `images` property using docker pull, docker tag and docker push.\n- `targetTags: \u003clist_of_target_tags\u003e` -\u003e the tags you want to use when you push the image to the new feed. Mandatory to set.\n- `sourceFeed: \u003cdockerfeed.dockerserver\u003e` -\u003e the feed you want to pull the images from (should match the compose file). Not mandatory to set.\n- `targetFeed: \u003cdockerfeed.dockerserver\u003e` -\u003e the feed you want to push to. Not mandatory to set.\n- `user: \u003cdockerfeed_user\u003e` -\u003e used for authenticating to sourceFeed and targetFeed. Not mandatory to set.\n- `password: \u003cdockerfeed_password\u003e` -\u003e used for authenticating to sourceFeed and targetFeed. Not mandatory to set.\n- `logout: true/false` -\u003e logout from source and target feed after promotion. Default is `false`.\n- `dryRun: true/false` -\u003e True if you want to do a dry run. This will print what would have happened. Default is `false`.\n     \n\n### Swarm Features\nThe `swarm` section helps to deploy service stacks to your local swarm. It reuses the [SwarmManagement](https://github.com/DIPSAS/SwarmManagement) deployment tool to deploy and remove services to and from the Swarm.\n- `files` -\u003e The `files` property lists all `swarm-management.yml` deployment files to use for deploying stacks on the Swarm.\n- `properties` -\u003e This property is a list of `SwarmManagement` commands to run in addition to starting or stopping the Swarm stacks.\n\n### General Properties\n- `changelog` -\u003e The `changelog` property parses a [CHANGELOG.md](example/CHANGELOG.md) file and sets an environment variables with current version. It contains following sub-keys:\n    - `file` -\u003e Path to the changelog file. The changelog file must be of a format similar to either of the changelog formats:\n      - [example/src/CHANGELOG.md](example/src/CHANGELOG.md)\n      - [example/src/CHANGELOG.v2.md](example/src/CHANGELOG.v2.md).\n    - `envKey` -\u003e On which environment variable to expose the version value. Default is `VERSION`.\n    - `envMajorVersionKey` -\u003e Optional environment variable to expose the version major value.\n    - `envMinorVersionKey` -\u003e Optional environment variable to expose the version minor value.\n- `env_files` -\u003e List of `.env` files listing default environment variables to expose. By convention, a present `.env` file will automatically be used to expose environment variables. \n- `Environment variable replacement` -\u003e Any area in the yaml template may use environment variable replacemenet with the `${ENV_KEY:-default_value}` syntax. \n  - `Default environment variables`:\n    - `PWD` -\u003e Exposes the present working directory.\n\n## Prerequisites\n- Docker:\n    - https://www.docker.com/get-docker\n- Install Dependencies:\n    - pip install -r requirements.txt\n- If you update dependencies or add new ones, they need to be updated both in requirements.txt and in setup.py.\n\n## Additional Info\n- The pip package may be located at:\n    - https://pypi.org/project/DockerBuildManagement\n\n## Publish New Version\n1. Configure setup.py with new version.\n2. Install build tools: `pip install twine wheel`\n3. Build: python setup.py bdist_wheel\n4. Check: twine check dist/*\n5. Publish: twine upload dist/*\n\n## Test a new version locally\n1. Build: python setup.py bdist_wheel\n2. Install from local file with force-reinstall and no-cache-dir options to force reinstallation when you have changed the code without changing the version number: `python -m pip install path\\to\\yourgitrepo\\DockerBuildManagement\\dist\\DockerBuildManagement-0.0.65-py2.py3-none-any.whl --force-reinstall --no-cache-dir`\n\n## Run Unit Tests\n- python -m unittest\n","funding_links":[],"categories":["Development with Docker"],"sub_categories":["Development Environment"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDIPSAS%2FDockerBuildManagement","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FDIPSAS%2FDockerBuildManagement","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDIPSAS%2FDockerBuildManagement/lists"}