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