Build a Docker image

Use DuploCloud to build and push a Docker image from GitHub Actions

Avoid using capital letters when referencing a DuploCloud construct, such as a Tenant, even when the UI displays the string in all capital letters. Don't specify DEV01, for example; specify dev01. The `TENANT_NAME` may need to be lowercase even though the UI shows it in uppercase.

Build and Push to ECR

This section aims to show you how to build a Docker image and push it to ECR.

It does three things:

  • Logs in to AWS ECR (using just-in-time AWS credentials from DuploCloud)

  • Builds and tags your Docker image, with the tags based on the Git commit SHA and ref.

  • Pushes your Docker image

Example Workflow

Here is an example of a GitHub workflow that builds and pushes a Docker image to ECR.

To use it, ensure the following are configured correctly:

  • DUPLO_HOST environment variable

  • DUPLO_TOKEN environment variable

name: Publish Image
on:
  # Triggers the workflow on push to matching branches
  push:
    branches:
    - main
  # (Optional) Allows users to trigger the workflow manually from the GitHub UI
  workflow_dispatch: {}
  # (Optional) Allow other workflows to use this workflow and its outputs
  workflow_call: 
    outputs:
      image:
        description: The URI of the image
        value: ${{ jobs.build_image.outputs.image }}
    secrets:
      DUPLO_TOKEN:
        description: The token to use for DuploCloud API calls
        required: true

env:
  DUPLO_HOST: ${{ vars.DUPLO_HOST }}
  DUPLO_TOKEN: ${{ secrets.DUPLO_TOKEN }}
  # Images are usually stored in a dedicated tenant, so the name doesn't change
  DUPLO_TENANT: devops

jobs:
  build_image:
    name: Build and Push Image
    runs-on: ubuntu-latest
    outputs:
      image: ${{ steps.build_image.outputs.uri }}
    steps:

    - name: Checkout code
      uses: actions/checkout@v4

    # Configures DuploCloud and the host cloud, for example, AWS
    - name: Cloud CI Setup
      uses: v0.0.5
    
    # logs into the registry, configures Docker, builds the image, and lastly pushes
    - name: Build and Push Docker Image
      id: build_image
      uses: v0.0.5
      with:
        platforms: linux/amd64,linux/arm64
        push: true # false for dry runs
        build-args: >
          foo=bar
          ice_cream=chocolate
          name=${{ github.repository }}

References

Last updated

Logo

© DuploCloud, Inc. All rights reserved. DuploCloud trademarks used herein are registered trademarks of DuploCloud and affiliates