Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I set the docker image version automatically from github?

I have link a github repo with my docker hub account. When there is a push to github master branch, a new image will be built in docker hub. But the image only has LATEST tag. How can I make the version increased automatically?

Ideally, I'd like it follow the sversion 1.0.0. And increase for every push 1.0.1, 1.0.2 1.0.3 etc.

Is there a way to make it follow this pattern?

like image 741
Joey Yi Zhao Avatar asked Jun 24 '26 03:06

Joey Yi Zhao


2 Answers

You could associate a GitHub Action workflow to your repository, like docker/metadata-action

GitHub Action to extract metadata (tags, labels) for Docker. This action is particularly useful if used with Docker Build Push action.

You can see it used here. Warning: the tag name (as generated by the GitHub Action) will contain the branch name as well.

like image 134
VonC Avatar answered Jun 27 '26 13:06

VonC


I was having the same problem, solved with this GitHub Action Code:

  1. Create a secret called MAJOR to save your mayor version
  2. Create a secret called MINOR to save your minor version
  3. You will need a token to update you repo secrets, so... create a secret called REPO_ACCESS_TOKEN to grant your action dose his work.
name: Docker Image CI

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:    
    - uses: actions/checkout@v2
    -
      name: Build the Docker image
      run: docker build . --file src/MasterReport.UI/Dockerfile --tag eriksongm/master-report:${{ secrets.MAJOR }}.${{ secrets.MINOR }}
    -
      name: Login to DockerHub
      uses: docker/login-action@v1 
      with:
        username: ${{ secrets.DOCKERHUB_USERNAME }}
        password: ${{ secrets.DOCKERHUB_TOKEN }}
    -
      name: Push to DockerHub
      run: docker push eriksongm/master-report:${{ secrets.MAJOR }}.${{ secrets.MINOR }}
    -
      name: Update Minor version
      uses: hmanzur/[email protected]
      with:
        name: 'MINOR'
        value: $((${{ secrets.MINOR }}+1))
        repository: EriksonGM/MasterReport
        token: ${{ secrets.REPO_ACCESS_TOKEN }}

This was my final code, as you can see, I have a last step just to update the minor version, only if all the other jobs run ok.

like image 35
Erikson Gomes Avatar answered Jun 27 '26 11:06

Erikson Gomes