3

For building images of my current project, I use the gradle task bootBuildImage. This task creates a OCI image using Cloud Native Buildpacks.

- name: Build image with Gradle
  run: ./gradlew bootBuildImage

With the next step I'm trying to push this docker image to my private GitHub registry using build-push-action.

- name: Push image to Registry
  uses: docker/build-push-action@v1
  with:
    username: ${{ secrets.DOCKER_USERNAME }}
    password: ${{ secrets.DOCKER_PASSWORD }}
    registry: docker.pkg.github.com
    repository: sullrich84/wettkampfdb-backend
    tags: latest
  env:
    DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
    DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}

As I can tell from the logs, the problem with this step is that it seems to rely on a Dockerfile located in the workspaces root directory which does not exist.

unable to prepare context: unable to evaluate symlinks in Dockerfile path: 
  lstat /github/workspace/Dockerfile: no such file or directory

Is it possible to push the image created via bootBuildImage to my private GitHub registry without using/creating a dedicated Dockerfile?

Sebastian Ullrich
  • 1,007
  • 11
  • 21

3 Answers3

3

If you are just looking for something to deal with docker push, you can just use the native docker command to do it.

Something like this.

      - name: run docker push
        run: |
          @docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD
          @docker push $BUILD_TAG
          @docker push $LATEST_TAG          
        env: 
          DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
          DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}  
chenrui
  • 8,910
  • 3
  • 33
  • 43
2

The github-action you are using is not for pushing an image you define by repository and tag but rahter build and push https://github.com/docker/build-push-action#build-push-action

Builds and pushes Docker images and will log in to a Docker registry if required.

Specifically this is also related to https://github.com/docker/build-push-action/issues/17 - so just building without pushing is possible, not vice versa.

This github action does yet not allow just pushing.

This is for now very common for a lot of CI/CD solutions, where build and push are one task.

Eugen Mayer
  • 8,942
  • 4
  • 33
  • 57
1

I use publishRegistry option of gradle bootBuildImage.
Set parameter in your build.gradle (below is gradle.kts)

tasks.bootBuildImage {
    imageName = "${imageName}:${project.version}"
    isPublish = true
    docker {
        publishRegistry {
            url = dockerUrl
            username = dockerUsername
            password = dockerPassword
        }
    }
}

check this document

Jay Son
  • 61
  • 7
  • The current option to publish is actually `publish` instead of `isPublish`, see: https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/htmlsingle/#build-image.customization – sdm4n Mar 07 '22 at 09:45