Je cherche un moyen d'exécuter une compilation compatible avec Docker composée de plusieurs conteneurs dans Jenkins 2.0.
Existe-t-il des projets de prise en charge native de Docker Compose in Pipeline , ou via des plug-in de dockeur CloudBees pour pipeline.
Ou cela peut-il/doit-il être adressé par des appels explicites sh docker-compose...
? Peut-être même les utiliser dans try... finally
to pour mieux contrôler le cycle de vie des services.
EDIT: La première réponse a été de suggérer un moyen de construire des conteneurs de docker en Jenkins. Ce n'est pas ce qui est nécessaire ici. EngineerDollery souhaite utiliser ma plate-forme cible dans Jenkins à l'aide de la fonction Compose afin de pouvoir y déployer mon application et exécuter des tests de bout en bout.
Après avoir recherché dans Jenkins, le suivi des bogues , JENKINS-35025 suggère que docker-compose.yml
soit pris en compte lors de l'exécution d'une tâche dans un conteneur de menu fixe, à l'aide de maven build .
Voir aussi Création d'un pipeline de CI avec Jenkins , ce qui suppose que docker-compose est installé sur votre serveur Jenkins.
Remarque: un an plus tard (août 2017), docker-compose n'est toujours pas pris en charge dans le plug-in Docker Pipeline
Juillet 2018, Ivan Aracki notes dans les commentaires :
Installer manuellement
docker-cli
etdocker-compose
avec la même version que Host est la solution pour le moment ...
Voici les fichiers pour exécuter un conteneur jenkins qui exécute docker à l'intérieur:
docker run \
-p 8080:8080 \
-v /var/run/docker.sock:/var/run/docker.sock \
--name jenkins \
getintodevops/jenkins-withdocker:lts
référence: https://getintodevops.com/blog/the-simple-way-to-run-docker-in-docker-for-ci
Je suis confronté à un problème similaire, j'ai trouvé ceci https://reinout.vanrees.org/weblog/2017/10/03/docker-compose-in-jenkins.html mais je ne sais pas ce qui est lié à .
Mon problème est de tester pendant le développement et d'automatiser le test dans Jenkins. J'utilise docker-compose pour faire apparaître des scripts php ET un serveur mysql, pour exécuter des tests isolés (phpunit à partir de maintenant).
Je pourrais penser que je peux y arriver en
docker network create
)docker run mysql --network=netname --name=mysqlmachine
mysqlmachine
en tant qu'hôte.Mais cela voudrait dire que je devrais configurer des données de base de données, nettoyer des données de base de données, et également laisser toujours sur la machine mysqlmachine, même si elles ne sont pas nécessaires, en consommant des ressources RAM. Je peux résoudre le dernier problème avec les commandes docker start mysqlmachine
et docker stop mysqlmachine
dans mon fichier Jenkins définissant le pipeline.
Mais, encore une fois, en exécutant un shell dans le menu fixe où jenkins est en cours d’exécution, je ne trouve pas la commande docker
Pour moi est une solution viable jusqu'à ce que je ne puisse pas trouver quelque chose de mieux
UPDATE: Je vais essayer la solution https://wiki.jenkins.io/display/JENKINS/Docker+Slaves+Plugin , elle a presque ce dont j'ai besoin
UPDATE 08.02: Comme suggéré par Alexander Zeitler, en utilisant
agent {
docker {
image 'pdmlab/jenkins-node-docker-agent:6.11.1'
args '-v /var/run/docker.sock:/var/run/docker.sock'
}
}
dans le fichier Jenkins autoriser l’utilisation de la commande docker-compose: docker dans un docker, principalement docker près d’un docker comme indiqué ici: Docker dans Docker - les volumes ne fonctionnent pas: pleins de fichiers dans le conteneur de 1er niveau, vides dans le 2e
Mais j'ai préféré utiliser une autre approche, qui n'exige pas de lancer Jenkins d'une manière spéciale.
Le pipeline dit:
stage('Test') {
steps {
sh './build_docker.sh jenkinstests'
}
}
et build_docker.sh fait:
jenkinstests)
docker volume create idealodbconn
docker run -v idealodbconn:/data --name helper busybox true
docker cp ./dbconn/db249.json helper:/data
docker rm helper
docker-compose -f services/docker-compose-jenkins.yml up \
--abort-on-container-exit \
--exit-code-from idealoifapi
docker-compose -f services/docker-compose-jenkins.yml rm -f
docker volume rm idealodbconn
;;
Ici aussi, --abort-on-container-exit
dit de quitter une fois qu'un conteneur défini dans docker-compose-jenkins.yml se ferme, et --exit-code-from idealoifapi
dit de prendre le code de sortie de l'image idealoifapi.
C'est tout. Une partie manquante, peut-être, est l'utilisation du volume par docker-compose-jenkins.yml, elle est externe: true:
volumes:
idealodbconn:
external: true