Autonomous Development

Imperative Image Construction

The application component pipelines do not deliver to an actual runtime environment, instead they create a releasable image only. The only required output is the versioned image, and the developer(s) are free to use whatever delivery mechanism they like to publish this image. In our case, there are two component patterns

  • PiP resolves Python dependencies, and gathers these, along with helper scripts, to produce a release package. The release package is then used to construct a runtime image, which in turn is smoke tested using docker-compose. The tested image is then pushed to the registry.

  • NPM resolves NodeJS dependencies, builds an image and pushes it to the registry.

graph LR subgraph python["Python"] python-git[(Git)] python-build-artefact[(Build)] python-release.ps1 subgraph docker-compose image-container test-container end push end subgraph node["NodeJS"] node-git[(Git)] node-build node-push["push"] end registry[(Docker Registry)] python-git -- "CI (PiP)" --> python-build-artefact -- "CD" --> python-release.ps1 --> image-container --> push --> registry test-container -. "smoke test" .-> image-container node-git -- "CI (NPM)" --> node-build --> node-push --> registry classDef dashed stroke-dasharray: 5, 5 class python,node dashed classDef dotted stroke-dasharray: 2, 2 class docker-compose dotted classDef blue fill:#007FFF class registry blue

Note: the Python release.ps1 is an intermediary artefact, and not used to deploy to the runtime environments.