docker - Github Action 到 maven 构建,然后是 Docker 构建推送

标签 docker github-actions

我是 GitHub Actions 的新手。我有以下 DockerFile

FROM openjdk:8-jdk-alpine
RUN addgroup -S spring && adduser -S spring -G spring
USER spring:spring
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
我正在尝试使用 GitHub 操作 Publish Docker下面是我的操作代码
name: Publish Docker
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - name: Publish to Registry
      uses: elgohr/Publish-Docker-Github-Action@master
      with:
        name: myDocker/repository
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_PASSWORD }}
构建失败并出现以下错误
Step 5/6 : COPY ${JAR_FILE} app.jar
COPY failed: no source files were specified
我假设它无法在目标文件夹下获取 jar 文件。我是否应该在 docker build 之前为 Maven Build 添加另一个步骤,以确保使用 Jar 生成目标文件夹。
我更新了我的操作如下但同样的错误
name: Build and push Docker images

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up JDK 1.8
        uses: actions/setup-java@v1
        with:
          java-version: 1.8
      - name: Build with Maven
        run: mvn -B package --file pom.xml
      - uses: actions/checkout@master
      - name: Publish to Registry
        uses: elgohr/Publish-Docker-Github-Action@master
        with:
          name: vinodjayachandran/spring-boot-docker
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
有关确切代码,请参阅我在 git 上的 repo:https://github.com/vinodjayachandran/spring-boot-docker/

最佳答案

解决方案是进行多阶段 docker 构建。本质上是从 DockerFile 而不是从 GitHub Actions 进行 maven 构建。

我的最终 DockerFile

#
# Build stage
#
FROM maven:3.6.0-jdk-11-slim AS build
COPY src /home/app/src
COPY pom.xml /home/app
RUN mvn -f /home/app/pom.xml clean package

#
# Package stage
#
FROM openjdk:11-jre-slim
COPY --from=build /home/app/target/*.jar /usr/local/lib/app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/usr/local/lib/app.jar"]

GitHub 操作:
name: Build and push Docker images

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - name: Publish to Registry
      uses: elgohr/Publish-Docker-Github-Action@master
      with:
        name: vinodjayachandran/spring-boot-docker
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_PASSWORD }}

关于docker - Github Action 到 maven 构建,然后是 Docker 构建推送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61388905/

相关文章:

firebase - 无法使用 github 操作将 React Web 应用程序部署到 Firebase 项目

具有多个私有(private)子模块的 GitHub Actions

c++ - MXE Qt5 应用程序在 Docker 容器中构建失败

linux - Docker 运行 - 用户组没有按预期工作?

c# - Docker RabbitMQ 消息在重启时消失

amazon-web-services - Dockerfile中的AWS凭证

github-actions - GitHub 操作 - 定义作业之间的工作流级别环境变量

docker - 在Docker中,如何清理X时间内未使用的卷/容器/等? (天,周,月?)

reactjs - 在 github 工作流程中安排 firebase.json 文件的入口点

macos - GitHub 操作 : productsign hangs