java - 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”
解决方案
您只需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
推荐阅读
- android - Android SMS 消息应用程序忽略 og 图像标签
- javascript - 在 for 循环中动态添加 onfocus 和 onfocusout 不起作用
- json - How to convert json to string in golang and echo framework?
- c# - 在 Blazor 中使用 Azure AD 获取原始 JWT
- excel - VBA - 自动过滤表格并粘贴到新工作表
- java - 当 ModuleLoader 是依赖项时加载模块
- github - 删除流行的存储库部分 - Github
- c# - 在 LINQ 中使用通用列
- java - 使用布尔值来协调 Java 中的两个线程
- spring-cloud - 如何使用 Stream 为 Spring Cloud Dataflow 中的子任务设置全局环境变量 - Task-Launcher