J'ai Jenkins
en cours d'exécution dans un conteneur Docker
avec docker.sock
monté. Puis-je appeler docker-compose
à partir de ce conteneur pour exécuter un service sur la machine hôte? J'ai essayé d'exécuter le script d'installation à partir d'un conteneur, mais cela continue à dire
"aucun fichier ou répertoire de ce type".
docker exec jenkins curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose docker exec jenkins chmod +x /usr/local/bin/docker-compose
3 Réponses :
C'est réalisable mais difficile à faire.
Vous devez monter avec un volume docker le chemin du fichier docker-compose.yml sur votre hôte docker, exactement au même emplacement dans le conteneur.
Donc, si l'emplacement du fichier docker-compose.yml est /home/leonid/workspace/project1/docker-compose.yml
sur l'hôte du docker, vous devez ajouter le volume -v / home / leonid / workspace / project1 /: / home / leonid / workspace / project1 /
pour le conteneur jenkins.
Ensuite, dans votre travail Jenkins:
cd /home/leonid/workspace/project1/ docker-compose up -d
Je suppose que je n'étais pas assez clair, obtenir le docker-compose.yml
n'est pas le problème car il est récupéré depuis git, le problème est que le binaire docker-compose
réel n'existe pas dans le conteneur et je ne sais pas comment le faire fonctionner de l'intérieur
Alors, vous ne savez pas comment l'installer?
Je suppose que oui, ma tentative de l'installer avec docker exec
n'a pas abouti
Créez votre propre fichier docker basé sur l'image que vous utilisez pour la construction (probablement docker: dernier)
Ensuite, dans la ligne RUN, téléchargez le docker-compose et définissez-le comme exécutable.
Faites tourner l'agent jenkins pour créer à partir de votre image au lieu de celle par défaut.
vous devez installer docker-compose sur ce conteneur de construction, pas sur jenkins master.
Pour les builds dans gitlab-ci, j'avais un conteneur de build spécial basé sur l'image docker avec compose installé en plus. Je pense que c'est votre cas - vous utilisez jenkins pour faire tourner un conteneur basé sur docker: latest qui par défaut n'a pas docker-compose. Vous devez créer votre propre image à partir de docker: latest, installer compose ou utiliser une image de docekrhub qui se fait comme ceci.
Vous pouvez également essayer d'installer compose dans le cadre de votre build. Téléchargez-le simplement dans un répertoire local et utilisez-le à partir de là.
ne serait-ce pas la même chose que docker exec
?
Jenkins crée-t-il un nouveau conteneur pour chaque exécution de build ou s'appuie-t-il sur l'image principale? Si tel est le cas, vous n'aurez pas le temps d'installer avec docker exec car le conteneur ne vit que pendant la construction.
La section "Installer en tant que conteneur" de la documentation a fonctionné pour moi: https: // docs .docker.com / compose / install /
sudo curl -L --fail https://github.com/docker/compose/releases/download/1.25.0/run.sh -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
Quelle image de docker utilisez-vous pour ce conteneur jenkins? Il devrait y avoir docker-compose installé
J'utilise le dernier Blue Ocean
Pourriez-vous publier le fichier jenkins que vous utilisez pour la construction?