Docker로 Maven 프로젝트를 빌드하고 푸시하기 위한 GitHub 작업 Docker Hub

내 워크플로



프로젝트는 그를 위해 2개의 Dockerfile을 만든 간단한 "Hello world"Maven 프로젝트입니다.

아티팩트를 이미지에 복사하고 .jar 파일을 실행하는 하나의 간단한 Dockerfile:

FROM anapsix/alpine-java
ADD target/my-app-*.jar /home/myjar.jar
CMD ["java","-jar","/home/myjar.jar"]

그리고 프로젝트를 빌드하는 두 번째 다단계 Dockerfile:

FROM maven:3 as BUILD_IMAGE
ENV APP_HOME=/root/dev/myapp/
RUN mkdir -p $APP_HOME/src/main/java
WORKDIR $APP_HOME
COPY . .
RUN mvn -B package -e -X --file my-app/pom.xml

FROM openjdk:8-jre
WORKDIR /root/
COPY --from=BUILD_IMAGE /root/dev/myapp/my-app/target/my-app*.jar .
CMD java -jar my-app*.jar

그래서 프로젝트에 대한 2개의 GitHub 워크플로를 만들었습니다.
  • 표준 Dockerfile로 maven 프로젝트를 빌드합니다. 이 작업 흐름에는 3가지 작업이 포함되어 있습니다. 1. .jar 버전을 범프하고 maven 프로젝트를 빌드합니다. 2. 도커 이미지를 빌드하고 Docker Hub에 푸시합니다. 3. 이미지를 당겨 실행합니다.

  • name: Maven Package
    
    on:
      [push]
    
    jobs:
      build:
        runs-on: ubuntu-latest
        permissions:
          contents: read
          packages: write
        outputs:
          jar_version: ${{ steps.bump.outputs.jar_version }}
    
        steps:
        - uses: actions/checkout@v2
        - name: Set up JDK 8
          uses: actions/setup-java@v2
          with:
            java-version: '8'
            distribution: 'adopt'
            server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
            settings-path: ${{ github.workspace }} # location for the settings.xml file
    
        - name: Bump jar version
          id: bump
          run: |
            POMPATH=my-app
            OLD_VERSION=$(cd $POMPATH && mvn help:evaluate -Dexpression=project.version -q -DforceStdout)
            BUMP_MODE="none"
            old="$OLD_VERSION"
            parts=( ${old//./ } )
            bv=$((parts[2] + 1))
            NEW_VERSION="${parts[0]}.${parts[1]}.${bv}"
            echo "pom.xml at" $POMPATH "will be bumped from" $OLD_VERSION "to" $NEW_VERSION
            mvn -q versions:set -DnewVersion="${NEW_VERSION}" --file $POMPATH/pom.xml
            echo ::set-output name=jar_version::${NEW_VERSION}
    
        - name: Compile
          run: mvn -B compile --file my-app/pom.xml
    
        - name: Build a package
          run: mvn -B package --file my-app/pom.xml
    
        - name: Temporarily save jar artifact
          uses: actions/upload-artifact@v2
          with:
            name: jar-artifact
            path: ${{ github.workspace }}/my-app/target/*.jar
            retention-days: 1
    
      deploy:
        runs-on: ubuntu-18.04
        needs: build
    
        steps:
        - uses: actions/checkout@v2
        - uses: actions/download-artifact@v1
          with:
              name: jar-artifact
              path: target/
        - name: Docker build
          run: |
            docker build . -t shayki/shayki-maven:${{needs.build.outputs.jar_version}}
        - name: Login to DockerHub
          uses: docker/login-action@v1
          with:
            username: ${{ secrets.DOCKER_USERNAME }}
            password: ${{ secrets.DOCKER_PASSWORD }}
    
        - name: Docker push
          run: |
            docker push shayki/shayki-maven:${{needs.build.outputs.jar_version}}
      run:
        runs-on: ubuntu-18.04
        needs: [build, deploy]
    
        steps:
        - name: Run container
          run: |
            docker run shayki/shayki-maven:${{needs.build.outputs.jar_version}}
    

  • Multi Stage Dockerfile로 maven 프로젝트를 빌드합니다. 이 워크플로에서 빌드 단계는 위와 같지 않고 도커 내부에 있습니다. 따라서 빌드 및 배포는 하나의 작업에 있고 이미지 실행은 두 번째 작업에 있습니다.

  • name: Maven Package - Multi stage docker
    
    on:
      [push]
    
    jobs:
      build:
        runs-on: ubuntu-latest
        permissions:
          contents: read
          packages: write
        outputs:
          jar_version: ${{ steps.bump.outputs.jar_version }}
    
        steps:
        - uses: actions/checkout@v2
    
        - name: Bump jar version
          id: bump
          run: |
            POMPATH=my-app
            OLD_VERSION=$(cd $POMPATH && mvn help:evaluate -Dexpression=project.version -q -DforceStdout)
            BUMP_MODE="none"
            old="$OLD_VERSION"
            parts=( ${old//./ } )
            bv=$((parts[2] + 1))
            NEW_VERSION="${parts[0]}.${parts[1]}.${bv}"
            echo "pom.xml at" $POMPATH "will be bumped from" $OLD_VERSION "to" $NEW_VERSION
            mvn -q versions:set -DnewVersion="${NEW_VERSION}" --file $POMPATH/pom.xml
            echo ::set-output name=jar_version::${NEW_VERSION}
    
        - name: Docker build
          run: |
            docker build . -t shayki/shayki-maven:${{ steps.bump.outputs.jar_version }} -f DockerfileMultiStage
        - name: Login to DockerHub
          uses: docker/login-action@v1
          with:
            username: ${{ secrets.DOCKER_USERNAME }}
            password: ${{ secrets.DOCKER_PASSWORD }}
    
        - name: Docker push
          run: |
            docker push shayki/shayki-maven:${{ steps.bump.outputs.jar_version }}
      run:
        runs-on: ubuntu-18.04
        needs: [build]
    
        steps:
        - name: Run container
          run: |
            docker run shayki/shayki-maven:${{needs.build.outputs.jar_version}}
    

    내 프로젝트에서 여러 워크플로우를 사용했습니다.
  • 체크아웃@v2
  • setup-java@v2
  • 업로드-아티팩트@v2
  • 다운로드-artifact@v1
  • docker/login-action@v1

  • 제출 카테고리:



    메인테이너 머스트해브

    Yaml 파일 또는 코드 링크


    코드 레포 링크:




    shayki5 / 메이븐-안녕하세요-세계


    간단하고 최소한의 Maven 예제: Hello World





    Docker로 Maven 프로젝트를 빌드하고 푸시하기 위한 GitHub 작업 Docker Hub


    내 워크플로우


    프로젝트는 그를 위해 2개의 Dockerfile을 만든 간단한 "Hello world"Maven 프로젝트입니다.
    아티팩트를 이미지에 복사하고 .jar 파일을 실행하는 하나의 간단한 Dockerfile:
    FROM anapsix/alpine-java
    ADD target/my-app-*.jar /home/myjar.jar
    CMD ["java","-jar","/home/myjar.jar"]
    
    그리고 프로젝트를 빌드하는 두 번째 다단계 Dockerfile:
    FROM maven:3 as BUILD_IMAGE
    ENV APP_HOME=/root/dev/myapp/
    RUN mkdir -p $APP_HOME/src/main/java
    WORKDIR $APP_HOME
    COPY . .
    RUN mvn -B package -e -X --file my-app/pom.xml
    
    FROM openjdk:8-jre
    WORKDIR /root/
    COPY --from=BUILD_IMAGE /root/dev/myapp/my-app/target/my-app*.jar .
    CMD java -jar my-app*.jar
    
    그래서 프로젝트에 대한 2개의 GitHub 워크플로를 만들었습니다.
  • 표준 Dockerfile로 maven 프로젝트를 빌드합니다. 이 작업 흐름에는 3가지 작업이 포함되어 있습니다. 1. .jar 버전을 범프하고 maven 프로젝트를 빌드합니다. 2. 도커 이미지를 빌드하고 Docker Hub에 푸시합니다. 3. 이미지를 당겨 실행합니다.
  • name: Maven Package
    on



    View on GitHub

    좋은 웹페이지 즐겨찾기