Dockerfile COPY не удалось: stat нет такого файла при использовании GitHub CI

Я использую GitHub Actions для проекта Gradle с этими шагами:

name: Java CI

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v1
      - name: Set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 11

      - run: gradle wrapper

      - run: ./gradlew bootJar

      - run: ls ./build/libs/

      - uses: actions/checkout@v1
      - name: Login to docker
        run: docker login docker.pkg.github.com -u xxxxxx -p xxxxxx

      - uses: actions/checkout@v1
      - name: Build the Docker image
        run: docker build . -t realtimechat-snapshot-0.$GITHUB_REF


      - uses: actions/checkout@v1
      - name: Tag the image
        run: docker tag realtimechat-snapshot-0.$GITHUB_REF realtimechat-snapshot-0



      - uses: actions/checkout@v1
      - name: Push the image
        run: docker push realtimechat-snapshot-0.$GITHUB_REF


на Build the Docker image шаге он создает этот Dockerfile:

FROM alpine:latest
COPY ./build/libs/realtimeChattingSystem-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT exec java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar

и когда он пытается скопировать файл jar, я получаю эту ошибку:

Ошибка копирования: stat /var/lib/docker/tmp/docker-builder207778036/build/libs/realtimeChattingSystem-0.0.1-SNAPSHOT.jar: нет такого файла или каталога

ПРИМЕЧАНИЕ *

на - run: ls ./build/libs/ в шагах он действительно показывает мне файл jar:

Запустите ls ./build/libs/

realtimeChattingSystem-0.0.1-SNAPSHOT.jar

Проблема № 2

после внесения изменений в этот пост

Я столкнулся с другой проблемой

это шаги:

name: Java CI

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v1
      - name: Set up JDK 13
        uses: actions/setup-java@v1
        with:
          java-version: 13

      - run: ./gradlew bootJar

      - name: Login to Github regestry
        run: docker login docker.pkg.github.com -u xxxxx -p xxxxx

      - name: Build the Docker image
        run: docker build . -t docker.pkg.github.com/sulimanlab/realtime-chat/realtimechat-snapshot-0.$GITHUB_REF


      - name: Push the image to github
        run: docker push docker.pkg.github.com/sulimanlab/realtime-chat/realtimechat-snapshot-0.$GITHUB_REF


На последнем шаге я получаю такую ​​ошибку:

Отправка относится к репозиторию [docker.pkg.github.com/sulimanlab/realtime-chat/realtimechat-snapshot-0.refs/heads/master]

3aad04996f8f: Подготовка

77cae8ab23bf: Подготовка

ошибка синтаксического анализа тела ответа HTTP 404: недопустимый символ 'p' после значения верхнего уровня: "страница 404 не найдена \ n"


person suliman    schedule 18.11.2019    source источник
comment
Почему вы проверяете свое репо снова и снова? Обратите внимание, что существует проблема с использованием этого действия более одного раза . Если вам нужен доступ к корневой папке, в которой находится ваше репо, попробуйте использовать переменную среды GITHUB_WORKSPACE, но используйте действие проверки только один раз.   -  person smac89    schedule 19.11.2019
comment
@ smac89 большое спасибо, у меня все еще есть один вопрос: я использую ›$ GITHUB_REF, чтобы дать каждой сборке тег, который ее идентифицирует. Я ищу значение env, равное ›$ CIRCLE_BUILD_NUM в circleci   -  person suliman    schedule 19.11.2019
comment
Я так не думаю, но вы можете попробовать GITHUB_SHA. Здесь определены все переменные по умолчанию.   -  person smac89    schedule 19.11.2019
comment
@ smac89, спасибо, человек. Я действительно столкнулся с другой проблемой после того, как сделал то, что вы предложили, я отредактировал вопрос [ссылка] (stackoverflow.com/q/ 58920140/10420300)   -  person suliman    schedule 19.11.2019
comment
Пожалуйста, задайте новый вопрос и дайте ссылку здесь.   -  person smac89    schedule 19.11.2019
comment
Также в будущем вы можете использовать secrets для хранения ваших токенов доступа. Вы можете получить секрет, позвонив ${{ secrets.MY_TOKEN }}. При первой же возможности удалите указанный выше токен доступа и используйте вместо него секреты. Обратите внимание, что редактирование этого вопроса не поможет, потому что stackoverflow сохраняет историю изменений, поэтому вам все равно следует отозвать этот токен и создать новый.   -  person smac89    schedule 19.11.2019
comment
@ smac89 заранее большое спасибо: (stackoverflow.com/questions/58938410/)   -  person suliman    schedule 19.11.2019


Ответы (1)


Вам нужно использовать actions/checkout только один раз в начале рабочего процесса. Когда вы снова используете его после сборки, я думаю, что он, вероятно, сбрасывает локальное рабочее пространство обратно в GITHUB_SHA, и ваш файл jar удаляется в процессе.

Попробуй это:

name: Java CI

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - name: Set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 11

      - run: gradle wrapper

      - run: ./gradlew bootJar

      - run: ls ./build/libs/

      - name: Login to docker
        run: docker login docker.pkg.github.com -u xxxxxx -p xxxxxx

      - name: Build the Docker image
        run: docker build . -t realtimechat-snapshot-0.$GITHUB_REF

      - name: Tag the image
        run: docker tag realtimechat-snapshot-0.$GITHUB_REF realtimechat-snapshot-0

      - name: Push the image
        run: docker push realtimechat-snapshot-0.$GITHUB_REF
person peterevans    schedule 18.11.2019