7

This will be a decent read so I thank you a lot for trying to help :bow:

I am trying to write a github action configuration that does the following two tasks:

  1. Creates a autodeploy.xar file inside the build folder
  2. Use that folder along with all other files inside to create a docker image.

The build process can not find the folder/files that the previous step has created. So I tried three things:

  1. Try to use the file created in the previous step (within the same job in github actions) but couldn't get it to run.

    • The build process threw an error that complained that the file doesn't exist: Error: buildx failed with: error: failed to solve: lstat /var/lib/docker/tmp/buildkit-mount3658977881/build/autodeploy.xar: no such file or directory
  2. Try to build two jobs, one to initiate the file and the other that needs the first one to build the docker. However, this gave the same error as step 1.

  3. Try to build the docker image from task 1

    • This step is just running a bash script from the github actions.
    • I tried to run docker build . from inside the shell script, but the github actions complained with "docker build" requires exactly 1 argument.
    • I was providing the right argument because on echoing the command I clearly saw the output docker build . --file Dockerfile --tag ***/***:latest --build-arg ADMIN_PASSWORD=***

This must be something very trivial, but I have no idea what's going wrong. And I think a solution to either one of these approaches should work.

Thanks once again for going through all this. Please find the GH actions, workflow.sh and the docker file below:

The GitHub actions yml file:

name: ci

on:
  push:
    branches:
      - 'build'

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up JDK 11
        uses: actions/setup-java@v3
        with:
          java-version: '11'
          distribution: 'temurin'

      - name: Login to DockerHub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Run script to replace template file
        run: |
          build/workflow.sh
        
      - name: Build and push
        uses: docker/build-push-action@v3
        with:
          push: true
          tags: ${{secrets.DOCKERHUB_USERNAME}}/${{secrets.REPO_NAME}}:latest
          build-args: |
            ADMIN_PASSWORD=${{secrets.ADMIN_PASSWORD}}

The workflow file:

# run the ant
ant <--------- This command just creates autodeploy.xar file and puts it inside the build directory


#### I TESTED WITH AN ECHO COMMAND AND THE FILES ARE ALL THERE:
# echo $(ls build)

The docker file:

# Specify the eXist-db release as a base image
FROM existdb/existdb:6.0.1

COPY build/autodeploy.xar /exist/autodeploy/    <------ THIS LINE FAILS
COPY conf/controller-config.xml /exist/etc/webapp/WEB-INF/
COPY conf/exist-webapp-context.xml /exist/etc/jetty/webapps/
COPY conf/conf.xml /exist/etc

# Ports
EXPOSE 8080 8444

ARG ADMIN_PASSWORD
ENV ADMIN_PASSWORD=$ADMIN_PASSWORD

# Start eXist-db
CMD [ "java", "-jar", "start.jar", "jetty" ]
RUN [ "java", "org.exist.start.Main", "client", "--no-gui",  "-l", "-u", "admin", "-P", "", "-x", "sm:passwd('admin','$ADMIN_PASSWORD')" ]

The error saying file was not found:

#5 [2/6] COPY build/autodeploy.xar /exist/autodeploy/
#5 ERROR: lstat /var/lib/docker/tmp/buildkit-mount3658977881/build/autodeploy.xar: no such file or directory
#4 [1/6] FROM docker.io/existdb/existdb:6.0.1@sha256:fa537fa9fd8e00ae839f17980810abfff6230b0b9873718a766b767a32f54ed6

1 Answer 1

18

this is dumb, but the only thing I needed to change was the context: . in the github actions

- name: Build and push
  uses: docker/build-push-action@v3
  with:
    context: .
         
Sign up to request clarification or add additional context in comments.

5 Comments

OMG, thanks, this one helped me after hours of madness..
same here... thanks a lot
I gave up for a couple days came back to it, and found this post!
Thanks! This is insightful, not dumb. The only dumb thing is that the docker build action behaves differently from our local docker build command and is missing the sensible default for context.
I don't know who or where you are, but if we ever meet, I owe you one.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.