Creating a Project

Mapping to aiSSEMBLE™ Concepts

You Are Here
Figure 1. You Are Here

Step 1: Instantiate a New aiSSEMBLE Project: The aiSSEMBLE archetype is an executable pattern that can quickly incept a project that is ready to leverage aiSSEMBLE for constructing components tailored to your needs. It is realized below using a Maven archetype feature.

Use a Maven Archetype to Create a New Project

The first step in creating a new project is to leverage Maven’s archetype functionality to incept a new Maven project that will contain all of your aiSSEMBLE component implementations - data delivery and machine learning pipelines as well as path to production modules.

Open a terminal to the location in which you want your project to live and execute the following command:

mvn archetype:generate \
	-DarchetypeGroupId=com.boozallen.aissemble \
	-DarchetypeArtifactId=foundation-archetype \
	-DarchetypeVersion=1.12.1

This command will trigger an interactive questionnaire giving you the opportunity to enter the following information contained in the below table.

  • This information can also be provided without interaction by including -D<propertyName>=<propertyValue> for each property you want to manually set when running the mvn archetype:generate command.

  • Some of the information required (such as archetypeVersion) is unavailable in interactive mode. For these properties, you can use the above Maven command to include them.

Table 1. Archetype Options
Value Description Guidance Example(s) Interactive

archetypeVersion

Use an archetype from a specific aiSSEMBLE release

Typically, developers should target the most recently released archetype. In appropriate circumstances, it is possible to target a pre-release snapshot version by using the -SNAPSHOT suffix.

  • 0.11.0

  • 0.9.8

  • 0.12.0-SNAPSHOT

No

artifactId

The folder name as well as module name of your project root

A generic description of the project or set of pipelines that will be included in the project. Maven conventions suggest the use of a dash to separate terms.

  • payment-analytics

  • charge-off-prediction

  • rdec (example of a project acronym)

Yes

dockerProjectRepositoryUrl

The name of the custom docker repository to use for this project.

Should be specified and utilized with the fabric8 docker-maven-plugin to build and push docker images.

If not specified, this will default to docker-registry-PLACEHOLDER/repository and will need to be updated in your root pom.xml file prior to pushing your first docker image.

  • docker.io/mydomain/repository

  • ghcr.io/mydomain/repository

No

groupId

The namespace in which your Maven modules will live

In general, you want it to think about groupId like the notional reverse ordered internet address of your effort. General pattern: <internet domain name in reverse>.<your area name>

Examples:

  • com.boozallen.aissemble

  • mil.navy.blueangels.ridealong

Yes

licenseName

The name of the license to use in the project

Defaults to Booz Allen’s "closed-source-license" but can be updated to a Booz Allen license or any license under mvn license:license-list

  • booz-allen-public-license

  • agpl_v3

No

mavenRepositoryUrl

The URL of the Maven repository where the release artifacts of the project will be deployed.

Defaults to https://release-PLACEHOLDER/repository/maven-releases and can be updated in the <properties> section of the root pom.xml

No

mavenSnapshotRepositoryUrl

The URL of the Maven repository where the snapshot artifacts of the project will be deployed.

Defaults to https://snapshot-PLACEHOLDER/repository/maven-snapshots and can be updated in the <properties> section of the root pom.xml

No

package

The package name in which JVM-based source code will be placed

Defaults to your groupId value, which is almost always the right decision, so just select enter to accept this default

See groupId examples above

Yes

projectDescription

General description of your project

Default to "Project that contains aiSSEMBLE compliant pipeline(s)"

No

projectGitUrl

The git URL of the project

The git URL of the project, without the .git suffix

Yes

projectName

A short, human-readable version name of the project

The human readable version of your artifactId

  • aiSSEMBLE

  • NAVY BA Ride Along

Yes

version

The name of the current version

Generally recommended to follow a <major version>.<minor version>.<patch version> convention. If you don’t have a strong opinion, start at 1.0.0-SNAPSHOT. 1.0.0-SNAPSHOT is the default when instantiating a new project.

Maven has inherent support for "development" versions. This helps projects manage in flight versus released software. Using Habushu, python modules are able to easily and automatically follow this Snapshot pattern as well (where -SNAPSHOT will be inferred to .dev).

  • 1.0.0-SNAPSHOT

  • 1.1.0-SNAPSHOT

No

pypiProjectRepositoryUrl

The name of the custom PyPI repository to use for this project.

Should be used if you have Python modules and intend to publish your project’s PyPI artifacts to a private repository, such as Nexus or Artifactory. If you plan to use the public https://pypi.org repository, you can explicitly set that here as well.

Please see Habushu’s documentation on repository URLs, including how to leverage settings.xml to pass in credentials for these repositories. These instructions also cover URL configuration for specific PyPI repository types (e.g., upload and download url specialization) as well as how to also configure a separate release and development PyPI URL, if desired.

If not specified, this will default to https://pypi-PLACEHOLDER/repository/ and will need to be updated in your root pom.xml file prior to pushing your first PyPI artifacts to a repository.

No

helmPublishingRepositoryUrl

The URL of the Helm repository you plan to publish your Helm charts to for this project.

Should be used if you intend to publish your project’s Helm charts to a private repository, such as Nexus or ghcr.io.

Please see helm-maven-plugin documentation, to view further configurations that can be set for your Helm repository specifications.

If not specified, this will default to https://helm-PLACEHOLDER/repository and will need to be updated in your root pom.xml file prior to pushing your Helm charts to a repository.

No

helmPublishingRepositoryName

The name of the Helm repository you plan to publish your Helm charts to for this project.

Should be used if you intend to publish your project’s Helm charts to a private repository, such as Nexus or ghcr.io.

Please see helm-maven-plugin documentation, to view further configurations that can be set for your Helm repository specifications..

If not specified, this will default to PLACEHOLDER-helm and will need to be updated in your root pom.xml file prior to pushing your Helm charts to a repository.

my-helm-charts

No

Once you enter these values, the archetype will ask you to confirm your entries. You now have a Maven project in which you can setup your specific pipelines, as described in the next step.