Application à eCOM avec Docker Plugin

Moteur de production

Wikipédia

Un moteur de production est un logiciel dont la fonction principale consiste à automatiser (ordonnancer et piloter) l'ensemble des actions (préprocessing, compilation, éditions des liens, etc.) contribuant, à partir de données sources, à la production d'un ensemble logiciel opérationnel.
 

Moteur de production

  • Compiler les sources
  • Gérer les dépendances
  • Construire les exécutables

Make

HEADERS = program.h headers.h
OBJECTS = program.o

default: program

%.o: %.c $(HEADERS)
    gcc -c $< -o $@

program: $(OBJECTS)
    gcc $(OBJECTS) -o $@

clean:
    -rm -f $(OBJECTS)
    -rm -f program

1977

 

 

 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
 
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>
 
  <name>Maven Quick Start Archetype</name>
  <url>http://maven.apache.org</url>
 
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.2</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

2001

 

 

2000

 

 

 

<project name="MyProject" default="dist" basedir=".">
  <description>
    simple example build file
  </description>
  <!-- set global properties for this build -->
  <property name="src" location="src"/>
  <property name="build" location="build"/>
  <property name="dist" location="dist"/>

  <target name="init">
    <!-- Create the time stamp -->
    <tstamp/>
    <!-- Create the build directory structure used by compile -->
    <mkdir dir="${build}"/>
  </target>

  <target name="compile" depends="init"
        description="compile the source">
    <!-- Compile the java code from ${src} into ${build} -->
    <javac srcdir="${src}" destdir="${build}"/>
  </target>

  <target name="dist" depends="compile"
        description="generate the distribution">
    <!-- Create the distribution directory -->
    <mkdir dir="${dist}/lib"/>

    <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
    <jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar" basedir="${build}"/>
  </target>

  <target name="clean"
        description="clean up">
    <!-- Delete the ${build} and ${dist} directory trees -->
    <delete dir="${build}"/>
    <delete dir="${dist}"/>
  </target>
</project

Avantages :

+ Architecture libre

+ Tâches configurables

Avantages :
+ convention plutôt que configuration

+ Gestionnaire de dépendances

Faiblesse :

- Pas de gestionnaire de dépendances

- Fichiers xml très verbeux

Faiblesse :

- intégration de ressources extérieures difficile

- fichiers xml très verbeux

+ convention plutôt que configuration

+ architecture libre

+ Gestionnaire de dépendances

+ Fichiers Groovy

+ Extensibles

apply plugin: "java"

/* block could be removed since sources in src/main 
   is standard configuration */
sourceSets {
    main.java.srcDirs "src/main"
}

jar {
    manifest.attributes (
        "Main-class" : "air.vts.simple.HelloWorld",
    )
}

build.gradle

$ gradle build

:compileJava
:processResources UP-TO-DATE
:classes
:jar
:assemble
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
:check UP-TO-DATE
:build

BUILD SUCCESSFUL

Total time: 0.724 secs

Lancer Gradle

$ gradle javadoc

:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:javadoc

BUILD SUCCESSFUL

Total time: 1.29 secs

Lancer Gradle (2)

source : https://docs.docker.com/engine/understanding-docker/

Architecture de eCOM

eCOM

Dockerfile

#
# Simple Dockerfile to deploy wildfly
#
FROM jboss/wildfly:10.1.0.Final

MAINTAINER Rémi GATTAZ "remi.gattaz@gmail.com"

ADD myApp.ear /opt/jboss/wildfly/standalone/deployments/

Build.gradle

/* DOCKER PLUGIN */
/* Add docker plugin as dependency */
buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath 'com.bmuschko:gradle-docker-
plugin:3.0.3'
    }
}

/* Apply docker plugin */
apply plugin: 'com.bmuschko.docker-remote-api'
repositories {
    mavenCentral()
}

/* docker configuration (OSX and windows)*/
docker {
    url = System.env.DOCKER_HOST
    certPath = new File(System.env.
DOCKER_CERT_PATH)
}
/* Copy build res in docker folder */
import org.gradle.api.tasks.Copy
task copyBuildRes(type: Copy) {
    from 'build/libs/myApp.ear'
    into 'docker/myApp.ear'
}

/* buildImage task */
import com.bmuschko.gradle.docker.tasks.image.
DockerBuildImage

task buildImage(type: DockerBuildImage) {
    dependsOn build
    dependsOn copyBuildRes

    tag = 'my-container'
    /* By default, uses the Dockerfile 
       in the folder docker */
}

Démonstration

Merci de votre Attention

VT2016_Gradle

By gattazr

VT2016_Gradle

  • 683