Checkout Jenkins Pipeline Git SCM con le credenziali?


104

Stavo seguendo questo tutorial :

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

Tuttavia non dice come aggiungere le credenziali. Jenkins ha una sezione "Credenziali" specifica in cui si definisce utente utente e pass e quindi si ottiene l'ID da utilizzare nei lavori, ma come lo si utilizza nelle istruzioni Pipeline?

Ho provato con:

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

senza fortuna:

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.

C'è un modo per configurare le credenziali nella pipeline o devo inserire le chiavi SSH nel file .ssh / authorized_keys dell'utente Linux di Jenkin?

Nel mondo ideale mi piacerebbe avere un repository per i lavori di pipeline e le chiavi repo, quindi avviare Docker Jenkins e aggiungere dinamicamente questi lavori e chiavi lì senza dover configurare nulla in Jenkins Console.

Risposte:


162

È possibile utilizzare quanto segue in una pipeline:

git branch: 'master',
    credentialsId: '12345-1234-4696-af25-123455',
    url: 'ssh://git@bitbucket.org:company/repo.git'

Se stai utilizzando l'URL ssh, le tue credenziali devono essere nome utente + chiave privata. Se stai utilizzando l'URL clone https invece di quello ssh, le tue credenziali dovrebbero essere nome utente + password.


1
Questo l'ha risolto, grazie. Non sapevo che SSH-url e HTTPS-url richiedessero credenziali diverse per lavorare!
Rendering

3
è stato utile, ma credentialsIdproviene da id in /var/lib/jenkins/credentials.xmlperché ho dovuto lottare per capirlo.
Prayagupd

17
@prayagupd, dovresti essere in grado di ottenere l'ID credenziale dalla pagina delle credenziali ( http://yourjenkinsinstall/credentials). Non c'è bisogno di esplorare i file di configurazione.
Serban Constantin

4
Per coloro che chiedono "Come generare un ID credenziali". Ecco come trovarlo. [1. Fare clic su Credenziali nella home page di Jenkins, 2. Verrà quindi visualizzata una tabella con tutte le credenziali create. 3. L'ID è in questa tabella]
vincedjango

1
Per me non è stato possibile risolvere l'URL quando l'ho impostato per iniziare ssh://. Rimuovendolo, riparandolo.
Moshisho

30

Per effettuare il checkout in modo esplicito utilizzando credenziali specifiche

    stage('Checkout external proj') {
        steps {
            git branch: 'my_specific_branch',
                credentialsId: 'my_cred_id',
                url: 'ssh://git@test.com/proj/test_proj.git'

            sh "ls -lat"
        }
    }

Per effettuare il checkout in base alle credenziali configurate nel lavoro Jenkins corrente

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

È possibile utilizzare entrambe le fasi all'interno di un singolo file Jenkins.


2
come generare questo credentialsId?
undefined


dove devo memorizzare il file delle credenziali. jenkins sais: Avviso: non è stato possibile trovare CredentialId "jenkins_key".
Dinu Nicolae

Le credenziali @Dinu vengono create in Jenkins, dovresti vederle nel menu principale se il plugin è installato. support.cloudbees.com/hc/en-us/articles/…
Upul Doluweera

1
grazie! qualcuno che ha pubblicato l'intera cosa piuttosto che solo un po 'qui e un po' qui, e sperando che le persone sappiano magicamente cosa mettere per il resto.

25

Se vuoi usare le credenziali ssh,

  git(
       url: 'git@github.com<repo_name>.git',
       credentialsId: 'xpc',
       branch: "${branch}"
    )

se si desidera utilizzare le credenziali di nome utente e password, è necessario utilizzare il clone http come menzionato da @Serban.

    git(
       url: 'https://github.com/<repo_name>.git',
       credentialsId: 'xpc',
       branch: "${branch}"
    )

10
come generare questo credentialsId?
undefined

Ho generato le credenziali in questo modo: help.github.com/en/articles/… , ho aggiunto la chiave pubblica al mio git, ma dove devo memorizzare questo file. Jenkins dice: Avviso: non è stato possibile trovare CredentialId "jenkins_key".
Dinu Nicolae

@DinuNicolae si prega di fare riferimento Adding new global credentials -> 7.al seguente link. jenkins.io/doc/book/using/using-credentials
f-society

14

Aggiungendo un rapido esempio utilizzando il plugin git GitSCM :

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

nella tua pipeline

stage('checkout'){
    steps{
        script{
            checkout
        }
    }
}

sai come utilizzare le credenziali globali per l'intero team? O esiste un modo in modo che qualunque sviluppatore stia spingendo su GitHub, possa fornire le proprie credenziali senza doverlo esporre nel Jenkinsfile
henhen

Puoi gestire il tuo meccanismo relativo alla tua logica nel tuo team di sviluppo e utilizzare chiavi di credenziali diverse per ogni gruppo. ad esempio: se un utente Github è nell'elenco di "backend_developers" usa <gitCredentialsGroupA>, se l'utente Github nell'elenco di "frontend_developers" usa <gitCredentialsGroupB>, progetta il tuo meccanismo in relazione al tuo caso d'uso.
avivamg

dove manterresti queste credenziali? È con il plug-in delle credenziali Jenkins?
henhen

Utilizza la documentazione delle credenziali Jenkins - jenkins.io/doc/book/using/using-credentials
avivamg

1
Ho cercato in lungo e in largo per un semplice checkoutesempio come questo, grazie.
301_Moved_Permanently

1

Per quello che vale la pena aggiungere alla discussione ... quello che ho fatto mi ha aiutato ... Poiché la pipeline viene eseguita all'interno di un'area di lavoro all'interno di un'immagine docker che viene ripulita ogni volta che viene eseguita. Ho preso le credenziali necessarie per eseguire le operazioni necessarie sul repository all'interno della mia pipeline e le ho archiviate in un file .netrc. questo mi ha permesso di autorizzare con successo le operazioni di repository git.

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...
    '''
}

1

Ha risolto per me usando

checkout scm: ([
                    $class: 'GitSCM',
                    userRemoteConfigs: [[credentialsId: '******',url: ${project_url}]],
                    branches: [[name: 'refs/tags/${project_tag}']]
            ])
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.