Talend - Containeriser ses jobs

Talend - Containeriser ses jobs

Du verbe "containeriser" qui sera bientôt dans le dictionnaire, et qui veut dire: placer dans des containers. Voici un exemple simple pour faire tourner ses jobs dans des containers Docker.

Comme on a pu le voir dans l'article sur les routines ou bien dans les passages de paramètres, nous avons souvent recours aux variables de contextes dans les jobs. Ceux-ci peuvent également servir pour des paramètres externes. Voici un exemple de mise en place de job dans un container avec passage de paramètre à celui-ci.

Containerisation

Quand vous faites un build de votre job dans Talend, vous obtenez un fichier zip avec les scripts pour le lancer. N'oubliez pas de choisir le type de build "Standalone Job" et de selectionner le contexte de prod. Dans la version payante, vous avez accès à plus de possibilités de buildtype.
talend10

Une fois terminé, vous avez votre fichier zip avec le job prêt à tourner.

Nous le plaçons alors dans un container avec la JVM. Nous utilisons le fichier Dockerfile suivant:

FROM openjdk:8u131-alpine

# Vous pouvez ajouter un utilisateur dans le container 
#RUN groupadd -r jobu && useradd --no-log-init -r -g jobu jobu
#USER jobu

# On ajoute le fichier zip du job buildé dans un sous repertoire zip
# et on le copie dans le container
ADD zip/*.zip /app.zip

RUN mkdir /Job \
        && unzip app.zip -d /Job \
        && chmod u+x /Job/MonJob/MonJob_run.sh \
        && mkdir -p /Job/data

Nous pouvons alors faire un build du container: docker build -t goovy/monjob:0.1 .

Execution du job

Si on reprend le job sur les routines nous devions lui passer la date et l'heure du fixing des devises.
Pour se faciliter la tache, nous plaçons la commande docker run dans un shell script:

#!/bin/sh

# Run the script with the current date.

DATE=`date +%Y-%m-%d`
PARAM="$DATE 16:00:00"

docker run -i --rm \
                --network=ETL_NET \
                --link db_prod:postgres \
                --link activemq:activemq \
                -v /home/job/data:/Job/data \
                goovy/monjob:0.1 /Job/MonJob/MonJob_run.sh --context_param fixingDateTime="$PARAM"

et plus qu'à mettre cela dans la crontab (par exemple).

Si vous souhaitez passer le paramètre en appelant le script ci-dessus, remplacer le paramètre par "$@".

Et voilà!