GitHub Actions部署EKS时Build & Push Image步骤找不到target目录报错如何解决
问题根因
你在Maven构建完成后重复执行了代码拉取操作,导致构建生成的target目录被清空:
- 流水线中
Build with Maven步骤已经执行mvn package成功生成了包含customer.jar的target目录 - 后续的
Checkout步骤再次调用actions/checkout@v2拉取代码,该操作默认会清理工作目录中不属于Git仓库的文件,target是构建产物,不会提交到Git仓库,因此被直接删除,Docker构建时自然找不到对应文件
解决方案
直接删除流水线中冗余的第二次Checkout步骤即可,对应要删除的配置如下:
- name: Checkout uses: actions/checkout@v2 with: ref: ${{ github.event.pull_request.head.sha }}
默认情况下第一次执行actions/checkout@v2拉取的就是PR对应的代码,不需要重复拉取。如果你的业务逻辑确实需要明确拉取PR头提交的代码而非PR合并后的代码,只需要调整步骤顺序:将指定ref的Checkout步骤移到Set up JDK 11步骤之前,删除原来的第一次Checkout步骤即可。
可选优化建议
- 将Dockerfile中的
ADD /target/customer.jar customer.jar改为COPY target/customer.jar customer.jar,COPY指令更适合复制本地文件的场景,语义更清晰 - 可以在Maven构建步骤后增加一步
ls target,方便流水线运行时排查构建产物是否生成成功
内容的提问来源于stack exchange,提问作者favisan
相关产品推荐
相关产品推荐

