it-swarm-eu.dev

Checkout Jenkins Pipeline Git SCM con credenziali?

Stavo seguendo questo tutorial :

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

Tuttavia non dice come aggiungere credenziali. Jenkins ha una specifica sezione "Credenziali" in cui si definisce utente utente e passaggio, quindi si ottiene l'ID da utilizzare nei lavori, ma come faccio a utilizzarlo nelle istruzioni della pipeline?

Ho provato con:

git([url: '[email protected]: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 i credenziali nella pipeline, o devo mettere le chiavi SSH nel file .ssh/authorized_keys di Linux di Jenkin?

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

50
Render

Puoi utilizzare quanto segue in una pipeline:

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

Se stai usando l'URL ssh, le tue credenziali devono essere username + private key. Se stai utilizzando l'URL clone https invece di quello ssh, le tue credenziali devono essere nome utente + password.

92

Se si desidera utilizzare le credenziali ssh,

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

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

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

Per eseguire il checkout esplicito utilizzando credenziali specifiche

    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"
        }
    }

Per effettuare il checkout in base alle credenziali di configura nell'attuale lavoro Jenkins

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

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

6
Upul Doluweera

Questo è lavoro per me al 100% con script jenkins 

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"
    }
}
0
Dulip Chandana

Per quello che vale aggiungere alla discussione ... ciò che ho fatto mi ha aiutato ad aiutarmi ... Poiché la pipeline viene eseguita all'interno di uno spazio di lavoro all'interno di un'immagine docker che viene ripulita ogni volta che viene eseguita. Ho afferrato 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 correttamente le operazioni repo 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...
    '''
}
0
madeyejm