Try โ€‚โ€‰HackMD

Use Github Actions to build and push your container image to OpenRegistry

It's pretty straight forward to build and push your container images to OpenRegistry. Let's take a look at two (out of many) ways to push your container images to OpenRegistry, everytime you push to main branch.

1. Easy Method - Use an existing Github Action

Github Marketplace is full of Actions that let's you build/push container images. One such Action is Publish-Docker-Github-Action

To set this Github Action on your repository, create a file under .github/workflows/push-to-openregistry.yaml and add the following contents inside it:

name: Publish to OpenRegistry
on:
  push:
    branches:
      - main
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - name: Publish to OpenRegistry
      uses: elgohr/Publish-Docker-Github-Action@master
      with:
        registry: beta.openregistry.dev
        default_branch: main
        name: <open-registry-username>/<container-image-name>
        # name: ${{ secrets.IMAGE_NAME }}
        username: ${{ secrets.OPEN_REGISTRY_USERNAME }}
        password: ${{ secrets.OPEN_REGISTRY_PASSWORD }}
        tag_semver: true
        snapshot: true
        dockerfile: <path-to-dockerfile>

Now that our workflow file is setup, let's add some Github Secrets. Navigate to Repository Settings -> Secrets -> Actions -> New Repository Secret

  • Name: OPEN_REGISTRY_USERNAME and Value: johndoe

    Image Not Showing Possible Reasons
    • The image file may be corrupted
    • The server hosting the image is unavailable
    • The image path is incorrect
    • The image format is not supported
    Learn More โ†’

  • Name: OPEN_REGISTRY_PASSWORD and Value: Super-Secret-Password

    Image Not Showing Possible Reasons
    • The image file may be corrupted
    • The server hosting the image is unavailable
    • The image path is incorrect
    • The image format is not supported
    Learn More โ†’

Congratulations, you've added a Github Action to your repository and now everytime you push to "main" branch, it will build and push the image to OpenRegistry.

2. Not so easy Method: Do it yourself

Now's it's possible that you don't want to use a third party Github Action to push your container images and that's a fine thought. Let's do this by ourselves.

We're going to start with the same first step, create a file under .github/workflows/push-to-openregistry.yaml and add the following contents inside it:

name: "Push to OpenRegistry"

on:
  push:
    branches: [ master ]
jobs:
  push-image:
    name: Analyze
    runs-on: ubuntu-latest
    permissions:
      actions: read
      contents: read
      security-events: write

    strategy:
      fail-fast: false
      matrix:
        language: [ 'go' ]
        # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
        # Learn more:
        # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed

    steps:
    - name: Checkout repository
      uses: actions/checkout@v2

    # Initializes the CodeQL tools for scanning.
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v1
      with:
        languages: ${{ matrix.language }}
        # If you wish to specify custom queries, you can do so here or in a config file.
        # By default, queries listed here will override any specified in a config file.
        # Prefix the list here with "+" to use these queries and those in the config file.
        # queries: ./path/to/local/query, your-org/your-repo/queries@main

    # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java).
    # If this step fails, then you should remove it and run the build manually (see below)
    - name: Autobuild
      uses: github/codeql-action/autobuild@v1

    # โ„น๏ธ Command-line programs to run using the OS shell.
    # ๐Ÿ“š https://git.io/JvXDl

    # โœ๏ธ If the Autobuild fails above, remove it and uncomment the following three lines
    #    and modify them (or add more) to build your code if your project
    #    uses a compiled language

    #- run: |
    #   make bootstrap
    #   make release

    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@v1