J'essaye de créer une compilation SBT capable de publier un conteneur Docker soit sur DockerHub, soit sur notre dépôt interne Docker. J'utilise sbt-native-packager 1.0.3 pour construire l'image Docker.Création d'une configuration qui remplace certains paramètres Docker tout en conservant le docker: comportement de publication
Voici un extrait de mon build.sbt:
dockerRepository in dockerInternal := Some("thomaso"),
packageName in dockerInternal := "externalname",
sbt docker:publish
publie maintenant avec succès à Thomaso/ExternalName sur DockerHub.
Pour ajouter la possibilité de publier sur notre repo Docker interne j'ai ajouté une configuration appelée dockerInternal:
val dockerInternal = config("dockerInternal") extend Docker
J'ai ensuite ajouté ces deux paramètres pour remplacer les paramètres par défaut:
dockerRepository in Docker := Some("docker.nrk.no/project"),
packageName in Docker := "internalname",
Je me attendais sbt dockerInternal:publish
doit publier une image Docker sur docker.nrk.no/project/internalname. Au lieu de cela, je reçois ce message d'erreur:
delivering ivy file to /home/n06944/repos/nrk.recommendations/api/target/scala-2.10/ivy-0.1- SNAPSHOT.xml
java.lang.RuntimeException: Repository for publishing is not specified.
Il me semble SBT a essayé de publier Ivy, pas Docker - quand je hardcode les valeurs à la prise en pension interne de l'édition fonctionne très bien et il n'y a aucune mention de Ivy dans les journaux. La configuration de Docker modifie la tâche de publication, et j'espérais qu'en laissant dockerInternal étendre Docker, j'hériterais le comportement de publication spécifique à Docker. Est-ce une hypothèse incorrecte? Ai-je manqué quelques incantations, ou y a-t-il une autre approche qui serait meilleure?