Build and Publish a Docker Image
This action builds and publishes a Docker image to a container registry. For most of my projects I use DockerHub, but you could use this action and tweak it to use any container registry.
For publish docker images I usually restrict this to the main
branch, however as this step is often just part of the CI pipeline, you will need some conditional logic to ensure the image is only published on the main
branch (and not when the build is triggered by a feature/*
or fix/*
branch).
Minimal Pipeline Example
yaml
name: Build, Test & Publish
on:
push:
branches:
- main
- feature/*
- fix/*
pull_request:
branches:
- main
jobs:
publish:
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
name: Build and Publish Container Image
runs-on: ubuntu-latest
needs:
- build
steps:
- uses: actions/checkout@v3
- name: Setup Docker Metadata
id: meta
uses: docker/metadata-action@v4
with:
images: your-username/your-project
tags: |
type=raw,value=latest
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Build and Push Docker Image to DockerHub
uses: docker/build-push-action@v4
with:
file: './path/to/project/Dockerfile'
context: ./path/to/project
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
In the above pipeline a few changes will need to be made to suit the project you are working on:
- In the setup docker metadata step, update the
images
to your DockerHub username and the name of your project. - In the build and push docker image step, update the
file
to the path of your Dockerfile, and thecontext
to the path of your project. - You will also need to add your docker username and docker token to your GitHub repository secrets. The
DOCKER_USERNAME
is your DockerHub username, and theDOCKER_TOKEN
is a token generated from DockerHub.