Web App reference architecture in Octopus

Azure Web App reference architecture

The Octopus - Web App Reference Architecture step populates an existing Octopus space with deployment projects demonstrating how DevOps teams can deploy applications to the Azure Web App platform.

Configuring the step

Hosted Octopus users should use the Hosted Ubuntu worker pool and run the step with the octopuslabs/terraform-workertools container image accessed via the Container Images feed. On-premises Octopus users need to ensure the step is run on a worker with a recent version of Terraform installed, or can use the octopuslabs/terraform-workertools container image on a worker with Docker installed.

The step exposes a number of options, typically requesting credentials to the various platforms that are configured to support Azure Web App deployments:

  • Azure account application ID, Azure account subscription ID, Azure account tenant ID, and Azure account password require the details associated with a service principal used to access the Azure platform.
  • Docker Hub Username and Docker Hub Password require the credentials of a Docker Hub user that is used to access sample Docker images from public DockerHub repositories. These credentials are also used by a sample GitHub Actions workflow that publishes Docker images.
  • GitHub Access Token requires the GitHub access token of a user that is used to create a new GitHub repository holding a sample application.
  • Octopus API Key requires an API key to the Octopus instance where the reference architecture projects and supporting resources are created.
  • Octopus Space ID requires the space ID where the reference architecture projects and supporting resources are created. Leave the default value to populate the same space as the runbook.
  • Octopus Server URL requires the URL of the Octopus instance where the reference architecture projects and supporting resources are created. Leave the default value to populate the same instance as the runbook.
  • Optional Terraform Apply Args allows custom arguments to be passed to the terraform apply command. The Terraform module applied by this step exposes a number of optional variables that can be defined as apply arguments. These arguments can be defined by setting this field to a value like -var=project_template_project_name=renamed -var=infrastructure_project_name=renamed2 -var=frontend_project_name=renamed3 -var=products_project_name=renamed4 -var=audits_project_name=renamed5:
    • infrastructure_project_name defines the name of the _ Azure Web App Infrastructure project
    • project_template_project_name defines the name of the Docker Project Templates project
    • frontend_project_name defines the name of the Azure WebApp Octopub Frontend project
    • products_project_name defines the name of the Azure WebApp Octopub Products project
    • audits_project_name defines the name of the Azure WebApp Octopub Audits project
  • Optional Terraform Init Args allows custom argument to be passed to the terraform init command. Leave this field blank unless you have a specific use case.

Reference projects

The step creates a number of reference projects demonstrating how to deploy applications to an Azure web app.

The _ Azure Web App Infrastructure project contains a runbook called Create Web App. This runbook creates an Azure service plan and three Azure web app services - one for each of the sample microservices deployed by the other projects.

The Azure WebApp Octopub Audits, Azure WebApp Octopub Frontend, Azure WebApp Octopub Products projects deploy the Octopub sample application to an Azure Web App, performs a smoke test, and scans the SBOM associated with each image using Trivy. Each of these projects have a number of supporting runbooks to inspect Kubernetes resources.

The _ Deploy Azure Web App Octopub Stack project uses the Deploy a release step to orchestrate the deployment of the individual microservices that make up the Octopub sample application. Orchestration projects provide a convenient way of promoting multiple related releases between environments in a predefined order, which may be required when applications are tightly bound or a well-defined set of release versions must be installed as a group.

The Docker Project Templates project contains a runbook called Create Template Github Node.js Project that:

  1. Creates a new GitHub repository
  2. Adds Github Actions secrets to allow workflows to interact with the Octopus server and the DockerHub repository
  3. Populates the repo with a sample Node.js web application and GitHub Actions workflow to build the application, push it to DockerHub, and create a release in Octopus

This runbook is an example of platform engineering where DevOps teams can bootstrap sample applications with best practices such as versioning, security scanning, and CI/CD pipelines provided as part of a common base template.

Help us continuously improve

Please let us know if you have any feedback about this page.

Send feedback

Page updated on Monday, November 13, 2023