Home > Blockchain >  Running docker from github actions can't find file added during previous step
Running docker from github actions can't find file added during previous step

Time:06-13

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

CodePudding user response:

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: .
         
  • Related