web-dev-qa-db-fra.com

Comment puis-je pousser et tirer du hub de docker dans le pipeline déclaratif Jenkins

Je réussis à construire des images de menu fixe à partir de mon pipeline jenkinsfile sur un esclave, en utilisant simplement les commandes standard "sh".

Je veux pouvoir essayer d'extraire une image de docker/hub, et si elle échoue (car elle n'a pas encore été enregistrée), créez-la et transmettez-la au hub de docker.

De toute évidence, j’ai besoin d’une manière ou d’une autre de stocker les informations d’identification pour Docker Hub et de les fournir à une commande de connexion Docker.

Mon problème est que je suis confus. Il existe des plug-ins de pipeline Docker, mais je pense qu'ils sont destinés à l'exécution d'étapes Jenkins dans un conteneur Docker - et non à ce que j'essaie de faire. En outre, de nombreux exemples semblent être un pipeline scripté plutôt que déclaratif.

En termes "d'étapes" simples, je pense que je veux faire quelque chose comme

agent {
    label 'pi'
}
steps {
  sh 'docker login -u my-account -p xxxx'
  sh 'docker pull my-account/image:version || (docker build -f dockerfile -t my-account/image:version && docker Push my-account/image:version)'
....
}

mais je pense aussi que j'ai peut-être besoin de faire quelque chose comme

steps {
  script {
    withDockerRegistry([credentialsId: 'something', url: 'docker.io/my-account']) {
      sh 'docker pull my-account/image:version || (docker build -f dockerfile -t my-account/image:version && docker Push my-account/image:version)'
    ....
  }
}

mais je ne veux pas faire d’erreurs et visser un pipeline qui fonctionne bien à l’exception de ce petit bout.

Est-ce que je suis dans les bonnes lignes?

9
akc42

Si vous avez le Docker pipeline plugin vous pouvez créer et envoyer des images comme celle-ci.

dir(config.buildFolder){
                newImage = docker.build(${imageTag})
                docker.withRegistry("https://${registryAddress}", '${credentialsId}'){
                     newImage.Push("${variables.version}")

            }

Vous pouvez extraire et exécuter du code dans un conteneur comme ceci:

testbed = docker.image('${imageName}')
testbed.inside("-u root:root"){
                echo 'executing build inside container'
                sh 'dotnet restore'
            }

Cela montera automatiquement le dossier à partir duquel vous avez créé le conteneur en tant que répertoire racine de votre conteneur afin que vous puissiez utiliser ces données (comme pour créer une application).

6
herm

Je travaille aussi sur le même sujet. Je souhaite extraire des images Docker de mon dépôt Dockerhub et effectuer quelques tests avec elles. J'ai réussi à faire fonctionner mon pipeline en suivant les étapes présentées ici.

https://Gist.github.com/jglick/0aa389c053196e38e2a1

0
Swagrid