J'utilise un pipeline Jenkins pour créer un fichier Docker.
Le fichier de docker réussit toutes les étapes et crée l'image de docker.
Comme montré:
Step 16/19 : FROM base AS final
---> <id>
Step 17/19 : WORKDIR /app
---> Using cache
---> <id>
Step 18/19 : COPY --from=publish /app .
---> Using cache
---> <id>
Step 19/19 : ENTRYPOINT ["", "myapp.dll"]
---> Using cache
---> <id>
Successfully built cb3y81938e88
Successfully tagged myapp:latest
Cependant, après cela, le shell échoue avec l'erreur suivante:
Java.io.IOException: Cannot retrieve .Id from 'docker inspect base AS final'
Pourquoi jette-t-il cette erreur en dépit de la construction réussie de l'image de menu fixe? Lorsque j'exécute cette opération sur mon ordinateur local, la commande se ferme sur "Mappée avec succès myapp: latest"
Ma version de docker est 18.03.1-ce.
Toute aide sur ce sujet serait grandement appréciée!
Il semble qu'il y ait un bug dans ce plugin Jenkins.
Vous pouvez essayer de supprimer le nom de construction multi-étage ("AS final
" car vous n'en avez pas besoin):
FROM base
(....)
Mais si vous avez vraiment besoin de référencer une image construite précédente (multi-étapes), une solution de contournement peut utiliser --copy-from 0
(0,1,2 comme il correspond, au lieu du nom d'alias)
Problèmes liés à Jenkins
Modifier
Documenter ici la solution trouvée par l'OP:
Cela fonctionne en n'utilisant pas le fichier de pipeline Jenkinsfile, mais en exécutant un shell dans le travail Jenkins pour exécuter la commande de génération Docker. (docker build -t latest-build.)
J'ai rencontré le même problème avec Docker 18.09, mais je n'utilisais pas de construction à plusieurs étages. Dans mon cas, je devenais:
Java.io.IOException: Cannot retrieve .Id from 'docker inspect centos:7'
La première étape de mon fichier Dockerfile était la suivante:
FROM centos:7
J'ai pu résoudre le problème avec docker pull centos:7
; Après cela, la construction de Jenkins a pu se terminer avec succès.
Sur ma situation spécifique, mes Jenkins avaient deux nœuds, maître et esclave. Lorsque le travail exécuté sur le noeud esclave, le travail a échoué. Lorsqu'il est exécuté sur le noeud principal, le travail est exécuté avec succès.
Comment exécuter un travail Jenkins sur un noeud spécifique à l'aide de Jenkinsfile? Exemple:
node('master') {}