首页 > 解决方案 > Dockerfile COPY failed: stat no such file, when using GitHub CI

问题描述

我正在使用 GitHub Actions for 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”

标签: javadockerdockerfilegithub-actionsgithub-ci

解决方案


您只需actions/checkout在工作流程开始时使用一次。当您在构建后再次使用它时,我认为它可能会将您的本地工作区重置为jar 文件,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

推荐阅读