Docker-Build für mehrere Projekte mit Fock

https://github.com/GoogleContainerTools/jib/tree/master/examples/multi-module

Versuchen.

Hintergrund

Verfassung

rootProject--sample1 ← Dies ist das Repository, das an ECR gesendet wird
           --sample2

Ich versuchte es.

https://github.com/GoogleContainerTools/jib/tree/master/jib-gradle-plugin#quickstart Korrigieren Sie es so, während Sie zuschauen. Es ist wichtig, apply false in die rootProject-Plugins einzufügen. Wenn Sie dies nicht eingeben, tritt ein Fehler auf.

build.gradle(Auszug aus rootProject)


plugins {
    id 'org.springframework.boot' version '2.3.4.RELEASE'
    id 'io.spring.dependency-management' version "1.0.10.RELEASE"
    id 'com.google.cloud.tools.jib' version '2.6.0' apply false
}

ext {
    artifactGroup = 'prototype.app'
    artifactVersion = '1.0.0'
    springBootDependenciesVersion = '2.3.4.RELEASE'
}

/*Allen Projekten gemeinsam*/
allprojects {

    ext {
        set('extention', 'jar')
        set('artifactVersion', "${artifactVersion}")
    }

    repositories {
        mavenCentral()
        jcenter()
        gradlePluginPortal()
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
}

/*Gemeinsam für Java-Projekte*/
configure(subprojects) {

    apply plugin: 'java'
    apply plugin: 'java-library'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'
  
    dependencyManagement {
        imports {
            // Spring Boot
            mavenBom "org.springframework.boot:spring-boot-dependencies:${springBootDependenciesVersion}"
        }
        imports {
            // AWS SDK ver 2.X.X
            mavenBom "software.amazon.awssdk:bom:2.14.14"
        }
    }

    dependencies {
        // for Develop
        annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
    }
}

/*Gemeinsam für Docker-Projekte*/
configure(subprojects - project('sample2') ) {
    apply plugin: "com.google.cloud.tools.jib"
}

build.gradle(Probe1 Auszug)


plugins {
    id 'com.google.cloud.tools.jib'
}

jib {
    from {
        image = 'amazoncorretto:11'  
    }
    to {
        image = "XXXXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/prototype"
    //    tags = ["${artifactVersion}"]       
    }
    container {
        environment = [SPRING_PROFILES_ACTIVE:"prod"]
    }
}

Codebuild wird ebenfalls verwendet, erstellen Sie also buildspec.yml. Wenn Sie kein ECR-Repository erstellen, tritt ein Fehler auf, daher habe ich es im Voraus mit terraform erstellt. Normalerweise mache ich das auch nicht, aber ich habe ein Docker-Pull hinzugefügt und in der post_build-Phase ausgeführt, um zu sehen, ob es funktioniert.

buildspec.yml


version: 0.2

env:
  variables:
    # FIXME:
    AWS_ACCOUNT   : "XXXXXXXXXXXXX"
    IMAGE_REPO    : "prototype"
    TAG           : "latest" 
phases:
  install:
    runtime-versions:
      java: corretto11
    commands:
      - chmod +x ./gradlew
      - touch gradle.properties
      - |
        cat <<EOL >> gradle.properties
        org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m
        EOL
        
      - nohup /usr/local/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://127.0.0.1:2375 --storage-driver=overlay&
      - timeout 15 sh -c "until docker info; do echo .; sleep 1; done"

  pre_build:
    commands:
      - echo build start on `date`
      - $(aws ecr get-login --no-include-email)
      
  build:
    commands:
      - ./gradlew build 
      - ./gradlew :sample1:jib --info

  post_build:
    commands:
      #Zur Funktionsprüfung
      - docker pull ${AWS_ACCOUNT}.dkr.ecr.ap-northeast-1.amazonaws.com/${IMAGE_REPO}:${TAG}
      - docker run -p 8080:8080 ${AWS_ACCOUNT}.dkr.ecr.ap-northeast-1.amazonaws.com/${IMAGE_REPO}:${TAG}
      - echo build end on `date`
cache:
  paths:
    - /root/.gradle/caches/**/*
    - /root/.gradle/wrapper/**/*

Ergebnis

Zuerst war ich von den ECR-Spezifikationen beeindruckt, aber es hat funktioniert. (Das Protokoll wurde so geändert)

Status: Downloaded newer image for XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/prototype:latest
XXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/prototype:latest

[Container] 2020/11/14 04:44:20 Running command docker run -p 8080:8080 ${AWS_ACCOUNT}.dkr.ecr.ap-northeast-1.amazonaws.com/${IMAGE_REPO}:${TAG}

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.3.4.RELEASE)

2020-11-14 04:44:24.281  INFO 1 --- [           main] p.b.transfer.BeforeTransferApplication   : Starting BeforeTransferApplication on f2ceab1be0d6 with PID 1 (/app/classes started by root in /)
2020-11-14 04:44:24.283  INFO 1 --- [           main] p.b.transfer.BeforeTransferApplication   : The following profiles are active: prod
2020-11-14 04:44:25.481  INFO 1 --- [           main] p.b.transfer.BeforeTransferApplication   : Started BeforeTransferApplication in 1.636 seconds (JVM running for 2.084)

[Container] 2020/11/14 04:44:25 Running command echo build end on `date`
build end on Sat Nov 14 04:44:25 UTC 2020

Recommended Posts

Docker-Build für mehrere Projekte mit Fock
So erstellen Sie CloudStack mit Docker
SpringBoot 2.0 Multi-Project Build
Erstellen Sie in Eile ein Maven-Projekt mit dem Docker-Container von Maven
Erstellen Sie mit Docker einen Authentifizierungs-Proxyserver
Erstellen eines Testflusses auf CircleCI mit Jib
Erstellen Sie eine Kotlin-App mit dem OpenJDK Docker-Container
Schieben Sie das Image mit Jib zum Docker-Hub
[Road_node.js_1-1] Der Weg zum Erstellen der Node.js Express MySQL-Umgebung mit Docker
Versuchen Sie, mit Docker eine Java-Entwicklungsumgebung zu erstellen
Ich habe versucht, die Umgebung nach und nach mit Docker aufzubauen
Erstellen einer Docker-Umgebung mit WSL
Verwenden von Docker von Java Gradle
Erstellen Sie DynamoDB local mit Docker
Verwenden von PlantUml mit Honkit [Docker]
Ich habe versucht, Docker und Maven / Netbean mit Jib gut zu integrieren
Erstellen Sie eine Browsertestumgebung mit Capybara in der Docker-Entwicklungsumgebung
Erstellen Sie mit Docker eine lokale Couchbase-Umgebung
Probieren Sie Redmine auf dem Mac Docker aus
Verwandeln Sie Java-Anwendungen mit Jib ganz einfach in Docker
[Splunk] Splunk Enterprise erstellen (Docker-Datei erstellen)
Erstellen Sie Clang x VSCode auf Docker (1)
Verwenden von Docker mit Windows10 Home WSL2
Erstellen Sie eine Unity-Entwicklungsumgebung auf Docker
Verwenden von cuda11.0 mit pytorch mit Docker
Erstellen Sie mit Laradock eine Docker + Laravel-Umgebung
[Splunk] Erstellen von Splunk Enterprise (mit Docker-Image)
Erstellen Sie mit Docker eine Umgebung für "API-Entwicklung + API-Überprüfung mithilfe der Swagger-Benutzeroberfläche"