High-level Overview

Core Development Tools

Version Control

Tool

Bitbucket (Git)

Usage

Build System

Tool

Maven

Usage
  • Standardized build configurations are defined in pom.xml.

  • Dependency management is handled via a Nexus internal artifact repository.

  • Jenkins CI/CD pipelines enforce build consistency.

Dependency and Build Frameworks

  • Standardized common Maven configurations are defined to enable streamlined specification of project build requirements.

  • Standardized Maven Tile definitions configure Maven plugins that facilitate common file initialization, build and testing tasks.

Containerization

Tool

Docker, Jib, Buildpacks

Usage
  • All applications are containerized for consistency across environments.

  • Base images follow VA security and orgnaizational standards.

  • Images are stored in environment-specific private registries.

Deployment & Configuration Management

Kubernetes Orchestration

Tool

Kubernetes

Usage
  • Applications are deployed as Kubernetes workloads.

  • Standardized Kustomize-based manifests define resource configurations.

Configuration Management

Tool

Kustomize

Usage
  • We use Kustomize to manage environment-specific and usage-oriented configurations.

  • Overlays ensure separation of concerns between development, testing, and production.

Build and Deployment Automation

Tool

Skaffold/Jenkins

Usage
  • Skaffold is used to manage image build and deployment workflows locally and in CI environments.

  • Standardized shared Jenkins pipelines enable GitOps-based continuous delivery.

Application Standards & Best Practices

Coding Conventions

  • Follow Java coding conventions.

  • Use Mobile Framework-based configurations of various plugins to enforce code quality automatically on each build.

Build and Deployment Frameworks

  • Include dependencies and use parent POMs defined in Mobile Framework when possible.

  • Include NGSS Maven Tiles to manage required configurations and supplemental project files.

  • Use the standard Skaffold + Kustomize framework to define image build and Kubernetes deployment configuration.

  • Include the Skaffold Test Library to write integration tests that more fully test orchestration with other services.

Configuration File Generation

Tool

Filegen Maven Plugin, Copier Templates

Usage
  • Filegen is a Maven plugin that generates and maintains standardized configuration files (Jenkinsfile, Kubernetes manifests, Skaffold configs, etc.).

  • Copier templates provide updateable, versioned configurations that can be refreshed as best practices evolve.

  • Use mvn filegen:copier-init -Dcopier.template=devops to initialize DevOps configurations from the ngss-devops-template.

  • Use mvn filegen:copier-update to incorporate template improvements while preserving local customizations via 3-way merge.

  • See the Filegen 6.0 Migration Guide for transitioning from static generation to Copier-based workflows.

Summary

This document provides an overview of our development architecture, highlighting the tools and conventions we follow. For more detailed information, refer to our internal documentation at https://wiki.mobilehealth.va.gov/spaces/CKM/pages/227300892/NGSS+Development+SOP.