3
votes

Docker push dans Jenkins - refusé: l'accès demandé à la ressource est refusé

J'essaie donc de configurer un pipeline dans Jenkins pour créer une image et la pousser vers le hub Docker. Mes informations d'identification dans Gérer 'Jenkins' sont appelées de la même manière que "docker-hub-credentials" et semblent être utilisées.

Il peut construire, mais il ne passe tout simplement pas par la poussée ... Aide? J'y suis depuis des heures et je ne suis pas sûr de ce qui me manque.

J'ai déjà essayé d'utiliser la connexion docker, mais jenkins ne le permet pas.

The push refers to repository [docker.io/username/foldername]
a73d7d9f4346: Preparing
964bdfb24a54: Preparing
1af124d739c9: Preparing
6cffeea81e5d: Preparing
614a79865f6d: Preparing
612d27bb923f: Preparing
ef68f6734aa4: Preparing
612d27bb923f: Waiting
ef68f6734aa4: Waiting
denied: requested access to the resource is denied

Je m'attends à ce que l'image soit poussée, mais j'ai ceci à la place:

stage('Build image') {
    /* This builds the actual image; synonymous to
     * docker build on the command line */

     bat 'docker build -t username/foldername:build . '    }


stage('Push image') {
    /* Finally, we'll push the image with two tags:
    docker.withRegistry('https://registry.hub.docker.com', 'docker-hub-credentials') {
        bat 'docker push username/foldername:build'
    }
}


3 commentaires

Vous devrez peut-être utiliser connexion au docker


Je ne peux pas me connecter au docker, ce n'est pas interactif: /


Essayez docker-login sur la machine sur laquelle cela fonctionnera? Ou la machine change-t-elle de temps en temps?


6 Réponses :


4
votes

À l'étape Image push , vous pouvez d'abord effectuer la connexion au docker , puis pousser l'image. Essayez ce qui suit pour la connexion au docker:

stage('Push image') {
    withCredentials([usernamePassword( credentialsId: 'docker-hub-credentials', usernameVariable: 'USER', passwordVariable: 'PASSWORD')]) {
        def registry_url = "registry.hub.docker.com/"
        bat "docker login -u $USER -p $PASSWORD ${registry_url}"
        docker.withRegistry("http://${registry_url}", "docker-hub-credentials") {
            // Push your image now
            bat "docker push username/foldername:build"
        }
    }
}

Assurez-vous que l'URL du registre est correcte. La méthode withCredentials ([usernamePassword (...)]) ci-dessus définira deux variables d'environnement USER et PASSWORD qui sont vos informations d'identification de registre Docker à partir des informations d'identification id docker-hub-credentials.


7 commentaires

Mais n'est-ce pas le codage de mon mot de passe ...


Non, vous ne codez pas le mot de passe en dur. Créez un identifiant de nom d'utilisateur / mot de passe dans Jenkins nommé "docker-hub-credentials". Si c'est déjà fait, le code que j'ai suggéré devrait fonctionner. Jetez un œil à la fonction jenkins.io / doc / pipeline / steps / credentials-binding /… , a utilisé le code


Oh, donc vous voulez vraiment ne pas remplacer usernameVariable: 'USER', passwordVariable: 'PASSWORD' par les informations d'identification réelles? Ils sont déjà dans les identifiants, et je ne les ai pas dans mon dossier.


Une chose qui m'inquiète également est: je ne veux pas de mon mot de passe dans les journaux


Les informations d'identification que vous obtenez en utilisant la méthode de la fonction withCredentials ne peuvent pas être exposées en clair. Même si vous essayez de l'imprimer dans les journaux, il afficherait simplement un astérisque (*******).


Merci beaucoup, j'ai littéralement copié-collé ce que vous avez écrit et ajouté mon push docker avec les bons noms, mais j'ai toujours frappé refusé / refusé ...


J'ai essayé avec --password-stdin registry.hub.docker.com/ mais évidemment: Erreur: impossible d'effectuer une connexion interactive à partir d'un périphérique non TTY



1
votes

Une meilleure option consiste à utiliser plug-in de pipeline Docker (il est inclus dans le plugins recommandés).

node {

  checkout scm
  def dockerImage

  stage('Build image') {
    dockerImage = docker.build("username/repository:tag")
  }

  stage('Push image') {
    docker.withRegistry('https://registry-1.docker.io/v2/', 'docker-hub-credentials') {
      dockerImage.push()
    }
  }

}

Pour ce faire, vous devez spécifier les informations d'identification du registre Docker dans la Définition du modèle de pipeline .

Docker Le plug-in pipeline a des problèmes pour appliquer les informations d'identification affectées dans la définition de modèle de pipeline aux projets avec un pipeline multi-branches. Autrement dit, si vous utilisez le code ci-dessus, vous continuez à recevoir l'erreur:

refusé: l'accès demandé à la ressource est refusé

Ensuite, vous devez spécifier les informations d'identification dans le fichier Jenkins comme suit:

node {

  checkout scm
  def dockerImage

  stage('Build image') {
    dockerImage = docker.build("username/repository:tag")
  }

  stage('Push image') {
    dockerImage.push()
  }   

}

Vous pouvez modifier l'URL vers un registre personnalisé si vous en avez besoin p >


3 commentaires

salut! Merci pour votre réponse. J'ai opté pour une construction "manuelle" avec le plugin mais je veux un pipeline donc j'ai suivi vos conseils. Deux choses se sont produites: il n'accepte pas dockerImage = docker.build car il dit qu'il n'y a pas de nohup (j'utilise Windows env) donc je suis passé à docker image = bat 'docker build -t username / image: build.'. Deuxièmement, dans l'image push de scène, il ne veut pas fonctionner avec dockerImage car il semble qu'il est nul ...? Mais l'image se construit avec succès ... Une idée?


Rebonjour! J'ai essayé docker.withRegistry (' registry-1.docker.io/v2 ', 'docker-hub-credentials') {bat "docker push devopsglobalmedia / teamcitydocker: build" et cette fois, il me dit simplement "refusé: l'accès demandé à la ressource est refusé"


Salut! Je ne pense pas que dockerImage = bat 'docker build ...' devrait fonctionner. Je lance Jenkins sur Docker, je n'ai jamais travaillé avec Jenkins fonctionnant en natif sur Windows, je suis désolé de ne pas pouvoir vous aider. J'espère que vous pourrez trouver une solution.



3
votes

J'ai trouvé la réponse !!!

 stage('Push image') {
        withDockerRegistry([ credentialsId: "docker-hub-credentials", url: "" ]) {
        bat "docker push devopsglobalmedia/teamcitydocker:build"
        }


0 commentaires

0
votes

J'ai eu le même problème récemment, c'était une mauvaise URL de registre du docker

Le problème - https://index.docker.io/v1

Le correctif - https://index.docker.io/v1/

Oui, c'était un problème. Je n'ai pas pu le pousser dans le registre docker.


0 commentaires

0
votes

J'ai passé une demi-journée à le résoudre. Veuillez vous assurer que le Docker Pipeline Plugin est installé.

script {
  withDockerRegistry([ credentialsId: "Docker-Hub-Cred", url: "https://index.docker.io/v1/" ]){            
                             
  }
}  


0 commentaires

0
votes

Si vous voulez pousser le dépôt privé, vous devez suivre les commandes ci-dessous:

1er: vous devez vous assurer que les informations d'identification de dockerhub sur jenkins. 2ème: Vous avez créé un emploi avec un projet de pipeline 3. Ensuite, vous devez pousser votre projet avec jenkinsfile. 4ème: maintenant vous pouvez construire jenkins.

Je donne le fichier Jenkins complet cela aidera à résoudre ce problème d'autorisation refusée et avec succès vous pouvez créer une image docker et pousser vers dockerhub.

p>

pipeline {
     agent any
     stages{
        stage('Maven Install'){
                      agent any
                      steps{
                          bat 'mvn -f pom.xml clean install'
                      }
                  }

        stage('Docker Build'){
                         agent any
                         steps{
                             bat 'docker build -t dockerhub_username/repository_name/docker-jenkins-integration .'
                         }
                     }

        stage('Push image'){
                    agent any
                    steps{
                      
                        
                                       withDockerRegistry([ credentialsId: "id", url: "" ]) {
                                       bat "docker tag dockerhub_username/repository_name/docker-jenkins-integration dockerhub_username/repository_name:docker-jenkins-integration"
                                       bat "docker push dockerhub_username/repository_name:docker-jenkins-integration"
                                     }

                }


                }
     }

}


0 commentaires