Using Harbormaster

Table of Contents

Introduction

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  
UML
(Unified Modeling Language)
uml example file 2.0, 2.1
XMI
(XMI Metadata Interchange)
xmi example file 1.1, 1.2
SQL Script sql example file  
POJOS
(Plain Old Java Objects)
jar, ear example file  
EMF
(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:

project:
name: Insurance Claim Project
description: ACME Insurance claim application project for
techstack:
id: SpringCore
model:
identifier: insurance_claim_business_model
options:
application:
name: Modern Claim System
description: Claim system using a SpringCore tech stack and DevOps toolchain
author: melissa@acmeinsurance.xxx
docker:
userName: xxxxxxxxxxxxxxxxxxx
password: xxxxxxxxxxxxxxxxxxx
orgName: acme-insurance
repo: claim-system
cicd:
platform: jfrog.pipelines
git:
username: xxxxxxxxxxxxxxxxxxxxxxx
password: xxxxxxxxxxxxxxxxxxxxxxxx
repository: claims-system-repo
host: bitbucket.org
tag: latest
kubernetes:
inUse: true
host: https://xxx.xxx.xxx.xxx
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
artificat-repo:
inUse: true
type: jfrog
userName: xxxxxxxxxxxxxxxxxx
password: xxxxxxxxxxxxxxxxxx
repoUrl: http://xxx.xxx.xxx.xxx:8081/repository/npm-public
hibernate:
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.