Checkout Jenkins Pipeline Git SCM avec des informations d'identification?

104

Je suivais ce tutoriel :

node {
  git url: 'https://github.com/joe_user/simple-maven-project-with-tests.git'
  ...
}

Cependant, il ne dit pas comment ajouter des informations d'identification. Jenkins a une section spécifique «Credentials» dans laquelle vous définissez l'utilisateur utilisateur et le pass, puis obtenez l'ID pour cela à utiliser dans les travaux, mais comment l'utiliser dans les instructions de Pipeline?

J'ai essayé avec:

git([url: '[email protected]:company/repo.git', branch: 'master', credentialsId: '12345-1234-4696-af25-123455'])

pas de chance:

stderr: Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Existe-t-il un moyen de configurer les creds dans le pipeline, ou dois-je mettre des clés SSH dans le fichier .ssh / allowed_keys de l'utilisateur Linux de Jenkin?

Dans un monde idéal, j'aimerais avoir un référentiel pour les tâches de pipeline et les clés de référentiel, puis lancer Docker Jenkins et y ajouter dynamiquement ces tâches et clés sans avoir à configurer quoi que ce soit dans la console Jenkins.

Rendre
la source

Réponses:

161

Vous pouvez utiliser les éléments suivants dans un pipeline:

git branch: 'master',
    credentialsId: '12345-1234-4696-af25-123455',
    url: 'ssh://[email protected]:company/repo.git'

Si vous utilisez l'URL ssh, vos informations d'identification doivent être un nom d'utilisateur + une clé privée. Si vous utilisez l'URL du clone https au lieu de celle de ssh, vos informations d'identification doivent être nom d'utilisateur + mot de passe.

Serban Constantin
la source
1
Cela a réglé le problème, merci. Je ne savais pas que SSH-url et HTTPS-url nécessitent des informations d'identification différentes pour fonctionner avec!
Rendu le
3
c'était utile, mais credentialsIdvient de l'identification /var/lib/jenkins/credentials.xmlcar j'ai dû lutter pour le comprendre.
prier le
17
@prayagupd, vous devriez pouvoir obtenir l'ID des informations d'identification à partir de la page des informations d'identification ( http://yourjenkinsinstall/credentials). Pas besoin de parcourir les fichiers de configuration.
Serban Constantin
4
Pour ceux qui demandent "Comment générer un credentialsId". Voici comment le trouver. [1. Cliquez sur Credentials sur la page d'accueil de Jenkins, 2. Vous verrez alors un tableau avec toutes les informations d'identification que vous avez créées. 3. ID est dans ce tableau]
vincedjango
1
Pour moi, cela ne pouvait pas résoudre l'URL lorsque je l'ai définie pour commencer ssh://. Le retirer, le réparer.
Moshisho
30

Pour effectuer un paiement explicite à l'aide d'informations d'identification spécifiques

    stage('Checkout external proj') {
        steps {
            git branch: 'my_specific_branch',
                credentialsId: 'my_cred_id',
                url: 'ssh://[email protected]/proj/test_proj.git'

            sh "ls -lat"
        }
    }

Pour effectuer le paiement en fonction des informations d'identification configurées dans le Job Jenkins actuel

    stage('Checkout code') {
        steps {
            checkout scm
        }
    }

Vous pouvez utiliser les deux étapes dans un seul fichier Jenkins.

Upul Doluweera
la source
2
comment générer ce credentialsId?
undefined
jeter un oeil - support.cloudbees.com/hc/en-us/articles/…
Upul Doluweera
où dois-je stocker le fichier des informations d'identification. jenkins sais: Avertissement: CredentialId "jenkins_key" est introuvable.
Dinu Nicolae
Les identifiants @Dinu sont créés dans Jenkins, vous devriez le voir dans le menu principal si le plugin est installé. support.cloudbees.com/hc/en-us/articles/…
Upul Doluweera
1
Merci! quelqu'un qui a posté le tout plutôt que juste un peu ici et un peu ici, et en espérant que les gens savent comme par magie quoi mettre pour le reste.
25

Si vous souhaitez utiliser les informations d'identification ssh,

  git(
       url: '[email protected]<repo_name>.git',
       credentialsId: 'xpc',
       branch: "${branch}"
    )

si vous souhaitez utiliser des identifiants de nom d'utilisateur et de mot de passe, vous devez utiliser le clone http comme @Serban mentionné.

    git(
       url: 'https://github.com/<repo_name>.git',
       credentialsId: 'xpc',
       branch: "${branch}"
    )
f-société
la source
10
comment générer ce credentialsId?
undefined
J'ai généré les informations d'identification comme ceci: help.github.com/en/articles/… , j'ai ajouté la clé publique à mon git, mais où dois-je stocker ce fichier. Jenkins dit: Avertissement: CredentialId "jenkins_key" n'a pas pu être trouvé.
Dinu Nicolae
@DinuNicolae veuillez vous référer Adding new global credentials -> 7.au lien suivant. jenkins.io/doc/book/using/using-credentials
f-society
14

En vous ajoutant un exemple rapide en utilisant le plugin git GitSCM :

    checkout([
        $class: 'GitSCM', 
        branches: [[name: '*/master']], 
        doGenerateSubmoduleConfigurations: false, 
        extensions: [[$class: 'CleanCheckout']], 
        submoduleCfg: [], 
        userRemoteConfigs: [[credentialsId: '<gitCredentials>', url: '<gitRepoURL>']]
    ])

dans votre pipeline

stage('checkout'){
    steps{
        script{
            checkout
        }
    }
}
avivamg
la source
savez-vous comment utiliser des informations d'identification globales pour toute l'équipe? Ou y a-t-il un moyen pour que quel que soit le développeur qui pousse vers github, il puisse fournir ses informations d'identification sans avoir à les exposer dans le Jenkinsfile
henhen
Vous pouvez gérer votre mécanisme en fonction de votre propre logique dans votre équipe de développement et utiliser différentes clés d'informations d'identification pour chaque groupe. Par exemple: si un utilisateur Github est dans la liste des 'backend_developers', utilisez <gitCredentialsGroupA>, si l'utilisateur Github dans la liste des 'frontend_developers' utilise <gitCredentialsGroupB>, concevez votre mécanisme lié à votre propre cas d'utilisation.
avivamg
où conserveriez-vous ces informations d'identification? Est-ce avec le plugin Jenkins Credentials?
henhen
Utiliser la documentation des informations d'identification Jenkins - jenkins.io/doc/book/using/using-credentials
avivamg
1
J'ai cherché de très loin un checkoutexemple simple comme celui-ci, merci.
301_Moved_Permanently
1

Pour ce que cela vaut la peine d'ajouter à la discussion ... ce que j'ai fait cela a fini par m'aider ... Puisque le pipeline est exécuté dans un espace de travail dans une image docker qui est nettoyée à chaque fois qu'il s'exécute. J'ai récupéré les informations d'identification nécessaires pour effectuer les opérations nécessaires sur le dépôt dans mon pipeline et les ai stockées dans un fichier .netrc. cela m'a permis d'autoriser les opérations de repo git avec succès.

withCredentials([usernamePassword(credentialsId: '<credentials-id>', passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USERNAME')]) {
    sh '''
        printf "machine github.com\nlogin $GIT_USERNAME\n password $GIT_PASSWORD" >> ~/.netrc
        // continue script as necessary working with git repo...
    '''
}
madeyejm
la source
1

Cela a résolu pour moi en utilisant

checkout scm: ([
                    $class: 'GitSCM',
                    userRemoteConfigs: [[credentialsId: '******',url: ${project_url}]],
                    branches: [[name: 'refs/tags/${project_tag}']]
            ])
Sarang
la source