Using Harbormaster

Table of Contents


The Harbormaster architecture is based on 4 major concepts

  1. Business Model
  2. Tech Stack
  3. Project Declaration (Project-as-Code)
  4. Resources

These concepts combined are how Harbormaster does what no other platform can do by generating fully operational DevOps projects including:

  • Core code to present, modify, and store all business entities and their relationships
  • Initial GIT commit of all generated files
  • CI/CD vendor specific pipeline execution YAML file to build, test, artifact store
  • Optional Docker file to containerize and push the application image
  • Optional Terraform file to spin up the infrastructure to deploy and execute
  • Optional Kubernetes directives to create a cluster and deploy the Docker container
  • Incorporating of published resources such as a Dockerfile, a build script, credentials, and more…

Business Model (Business Context)

The Harbormaster platform is Model Driven. Why is this important? It is how it generates more than ‘Hello World’ instead generating projects based on the business context of your requirements.

Harbormaster supports the following business model formats:

Model Type File Extension Example Version
YAML yml, yaml example file  
JSON json example file  
(Unified Modeling Language)
uml example file 2.0, 2.1
(XMI Metadata Interchange)
xmi example file 1.1, 1.2
SQL Script sql example file  
(Plain Old Java Objects)
jar, ear example file  
(Eclipse Modeling Framework)
ecore example file  
GIT git example Git repo  

Tech Stack (Technical Context)

Traditionally a tech stack is a concept. Harbormaster has turned the concept into a realization. A Harbormaster tech stack contains all the code, configurations, and options to define a technical context.

Harbormaster comes with a default yet growing set of tech stacks. Importantly, user defined tech stacks can be managed through the platform.

  • Angular 7 using MongoDB
  • Angular 8 using MongoDB
  • Apollo GraphQL using SQLite
  • ASP.NET 2.0 using nHibernate
  • AWS Lambda using MongoDB
  • AWS Lambda using Hibernate for Relational DB
  • Django 2.x using Python 3.x
  • Google Functions
  • Spark Java Microframework
  • Spring Core using Hibernate for Relational DB
  • Spring Core using MongoDB
  • Struts2

Upcoming tech stacks include:

  • Ruby on Rails
  • Go
  • Play
  • C/C++
  • Quarkus
  • MEVN stack
  • MERN stack

To create a custom tech stack, read the in-depth details here.

Project Declaration – Project-as-Code (Project Context)

This is a single YAML file that captures the context of a project through simple yet powerful declarative syntax. It combines a business context, a technical context, along with any number of options necessary to successfully generate all the components of a project.

Here is an example of a project using a custom business model, SpringCore tech stack with MySQL-8, Bitbucket GIT repositry, JFrog Pipelines, JFrog artificat repository, Docker container, and Kubernetes cluster:

name: Insurance Claim Project
description: ACME Insurance claim application project for
id: SpringCore
identifier: insurance_claim_business_model
name: Modern Claim System
description: Claim system using a SpringCore tech stack and DevOps toolchain
userName: xxxxxxxxxxxxxxxxxxx
password: xxxxxxxxxxxxxxxxxxx
orgName: acme-insurance
repo: claim-system
platform: jfrog.pipelines
username: xxxxxxxxxxxxxxxxxxxxxxx
password: xxxxxxxxxxxxxxxxxxxxxxxx
repository: claims-system-repo
tag: latest
inUse: true
project: xxxxxxxxxxx
region: us-central1-a
hostTarget: google # option: google, aws, azure, nutanix
username: xxxxxxxxxxxxxxxxx
password: xxxxxxxxxxxxxxxxx
exposeAsService: true
serviceType: LoadBalancer # options: LoadBalancer, NodePort, ClusterIP
useSessionAffinity: true
inUse: true
type: jfrog
userName: xxxxxxxxxxxxxxxxxx
password: xxxxxxxxxxxxxxxxxx
hibernate.connection.driver.class: com.mysql.jdbc.Driver
hibernate.connection.username: xxxx
hibernate.connection.password: xxxx
hibernate.dialect: org.hibernate.dialect.MySQL8Dialect
hibernate.max.fetch.depth: 1
hibernate.connection.url: jdbc:mysql://localhost:3306/acme-claims-system?createDatabaseIfNotExist\u003dtrue

Resources – (Shared Context)

A resource is a any file that is to be used, and possibly shared, as part of project generation. Examples could include a Dockerfile, a CI/CD YAML file, a credentials file, or even a techstack template file.

A Project-as-Code file can include multiple references to resources to be included during project generation.

If the name of resource file shares the name of a generated file, the resource will overwrite that file.