J'essaie d'adapter une construction de docker pour Jenkins. Je suis notre fichier docker-compose et je crée un fichier Jenkins qui crée chaque conteneur et les lie entre eux. Le problème que je rencontre est que les fichiers docker-compose déclarent un contexte qui n’est pas celui où se trouve le fichier Dockerfile. Pour autant que je sache, Jenkins définira le contexte dans lequel se trouve le fichier Dockerfile, qui place les fichiers à copier dans un emplacement relatif différent, selon que le fichier jenkinsfile ou le fichier docker-compose est en cours de construction.
La structure du dossier est:
workspace
|-docker
|-db
|-Dockerfile
|-entrypoint.sh
C’est ainsi que le fichier Dockerfile déclare l’instruction COPY du fichier en question.
COPY docker/db/entrypoint.sh /
Voici comment mon jenkinsfile construit le fichier. Qui, à ma connaissance, met le contexte dans ce répertoire
docker.build("db", "${WORKSPACE}/docker/db")
le fichier docker-compose le déclare comme suit:
db:
build:
context: .
dockerfile: docker/db/Dockerfile
qui met le contexte à la racine du projet.
Existe-t-il un moyen de demander à un fichier jenkins d'utiliser le même contexte que le fichier docker-compose, de sorte que l'instruction COPY du fichier dockerfile puisse rester inchangée et valable pour Jenkins et docker-compose? Si ce n'est pas possible, est-ce que quelqu'un connaît des solutions alternatives?
Il s'avère que je tirais une version précédente (1.6) du plugin docker-pipeline-pipeline. La fonction en question a depuis été mise à jour (1.7) pour permettre au deuxième paramètre de désigner un emplacement de fichier Docker en dehors du contexte.
La déclaration mise à jour dans mon fichier Jenkins est la suivante:
return docker.build("db", "-f docker/db/Dockerfile .")
Et cela permet à mon conteneur de construire sans modifier le contexte attendu de docker-compose ou Dockerfiles du développeur.
La méthode build () construit par défaut le fichier Dockerfile dans le répertoire actuel. Cela peut être annulé en fournissant un chemin de répertoire contenant un fichier Docker comme deuxième argument de la méthode build (), par exemple:
node {
checkout scm
def testImage = docker.build("test-image", "./dockerfiles/test")
testImage.inside {
sh 'make test'
}
}
Omnit juste l’élément context
sur docker-compose
pour qu’il soit par défaut à l’emplacement du fichier Dockerfile.
La syntaxe suivante devrait fonctionner: ')