Construction de docker multi-projets à l'aide de jib

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

Essayer.

Contexte

Constitution

rootProject--sample1 ← C'est le référentiel qui pousse vers ECR
           --sample2

Je l'ai essayé.

https://github.com/GoogleContainerTools/jib/tree/master/jib-gradle-plugin#quickstart Corrigez-le comme ça en regardant. Il est important de mettre apply false dans les plugins du rootProject. Si vous n'entrez pas ceci, une erreur se produira.

build.gradle(Extrait de 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'
}

/*Commun à tous les projets*/
allprojects {

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

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

/*Commun aux projets Java*/
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'
    }
}

/*Commun aux projets Docker*/
configure(subprojects - project('sample2') ) {
    apply plugin: "com.google.cloud.tools.jib"
}

build.gradle(extrait sample1)


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 est également utilisé, alors créez buildspec.yml. Si vous ne créez pas de référentiel ECR, une erreur se produira, donc je l'ai créé avec terraform à l'avance. De plus, je ne le fais généralement pas, mais j'ai ajouté un docker pull and run dans la phase post_build pour voir si cela fonctionne.

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:
      #Pour le contrôle de fonctionnement
      - 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/**/*

résultat

Au début, j'ai été frappé par les spécifications ECR, mais cela a fonctionné. (Le journal a été modifié comme ça)

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

Construction de docker multi-projets à l'aide de jib
Comment créer CloudStack à l'aide de Docker
Construction multi-projets SpringBoot 2.0
Créez un projet Maven à la hâte à l'aide du conteneur Docker de Maven
Créer un serveur proxy d'authentification à l'aide de Docker
Création d'un flux de test sur CircleCI à l'aide de Jib
Créer une application Kotlin à l'aide du conteneur OpenJDK Docker
Poussez l'image vers le hub docker à l'aide de Jib
[Road_node.js_1-1] La voie de la création de l'environnement Node.js Express MySQL à l'aide de Docker
Essayez de créer un environnement de développement Java à l'aide de Docker
J'ai essayé de construire l'environnement petit à petit en utilisant docker
Créer un environnement Docker avec WSL
Utilisation de Docker depuis Java Gradle
Construire DynamoDB local avec Docker
Utilisation de PlantUml avec Honkit [Docker]
J'ai essayé d'intégrer parfaitement Docker et Maven / Netbean en utilisant Jib
Créer un environnement de test de navigateur à l'aide de Capybara dans l'environnement de développement Docker
Créer un environnement local Couchbase avec Docker
Essayez Redmine sur le docker Mac
Transformez facilement les applications Java en Docker avec Jib
[Splunk] Construire Splunk Enterprise (créer un fichier docker)
Construire Clang x VSCode sur Docker (1)
Utilisation de Docker avec Windows10 Home WSL2
Créer un environnement de développement Unity sur docker
Utilisation de cuda11.0 avec pytorch en utilisant Docker
Créez un environnement Docker + Laravel avec Laradock
[Splunk] Création de Splunk Enterprise (à l'aide de l'image Docker)
Créez un environnement de "développement d'API + vérification d'API à l'aide de Swagger UI" avec Docker