web-dev-qa-db-fra.com

Comment définir un contexte personnalisé pour docker.build dans jenkinsfile

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?

10
Julian

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.

20
Julian

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'
    }
}
0
andy.wang

Omnit juste l’élément context sur docker-compose pour qu’il soit par défaut à l’emplacement du fichier Dockerfile.

0
Ohmen

La syntaxe suivante devrait fonctionner: ')

0
user6058180