1. Initialize a Project

With the Garden CLI installed, we'll kick off by configuring a simple example project for use with Garden.

Start by cloning our repo and finding the example project:

git clone https://github.com/garden-io/garden.git
cd garden/examples/demo-project-start

The example directory has two directories: backend and frontend. Each contains simple application with a Dockerfile. We'll first define a boilerplate Garden project, and then Garden action configurations for each application.

To initialize the project use a helper command:

garden create project

This will create a basic boilerplate project configuration in the current directory, making it our project root.

apiVersion: garden.io/v1
kind: Project
name: demo-project-start

defaultEnvironment: ephemeral

environments:
  - name: ephemeral

  - name: local
    defaultNamespace: garden-local

  - name: remote
    defaultNamespace: garden-remote-${local.username}

  - name: staging
    production: true
    defaultNamespace: staging

providers:
  - name: ephemeral-kubernetes
    environments:
      - ephemeral
  - name: local-kubernetes
    environments:
      - local
  - name: kubernetes
    environments:
      - remote
  - name: kubernetes
    environments:
      - staging

We have three environments (local, remote and staging) and also three provider configurations, one for each environment.

For this step, we'll focus on the local environment. You can ignore the others for now.

Next, let's create action configs for each of our two applications, starting with backend.

First we need to define Build and Deploy actions for the backend application. Let's use container action type. Create an empty backend.garden.yml config file in the backend directory and add the following lines:

kind: Build
name: backend
description: Backend service container image
type: container

---

kind: Deploy
name: backend
description: Backend service container
type: container

# Reference to the Build action that builds the image to be deployed (defined above)
build: backend

# Action type specific config goes under the `spec` block
spec:
  healthCheck:
    httpGet:
      path: /hello-backend
      port: http
  ports:
    - name: http
      containerPort: 8080
      servicePort: 80
  ingresses:
    - path: /hello-backend
      port: http

Next, let's do the same for the frontend application: Create a frontend.garden.yml config file in the frontend directory and add the following lines:

kind: Build
name: frontend
description: Frontend service container image
type: container

---

kind: Deploy
name: frontend
description: Frontend service container
type: container

build: frontend
# Dependency section is used to specify action execution order. The frontend will be deployed after the backend is deployed.
# Dependency for the Build action is implicit.
dependencies:
  - deploy.backend

spec:
  ports:
    - name: http
      containerPort: 8080
  healthCheck:
    httpGet:
      path: /hello-frontend
      port: http
  ingresses:
    - path: /hello-frontend
      port: http
    - path: /call-backend
      port: http

Now, let's move on to our next section, and connect to a Kubernetes cluster.

Last updated