it-swarm.com.de

Checkout Jenkins Pipeline Git SCM mit Anmeldeinformationen?

Ich folgte dieses Tutorial :

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

Es kann jedoch nicht angegeben werden, wie Anmeldeinformationen hinzugefügt werden. Jenkins verfügt über einen bestimmten Abschnitt "Anmeldeinformationen", in dem Sie den Benutzer user & pass definieren und dann eine ID für die Verwendung in Jobs erhalten, aber wie verwende ich diese in Pipeline-Anweisungen?

Ich habe versucht mit:

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

kein Glück:

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.

Gibt es eine Möglichkeit, die Creds in der Pipeline zu konfigurieren, oder muss ich SSH-Schlüssel in die .ssh/authorised_keys -Datei des Linux-Benutzers von Jenkin eingeben?

Im Idealfall hätte ich gerne ein Repository für Pipeline-Jobs und Repo-Keys, starte dann Docker Jenkins und füge diese Jobs und Keys dort dynamisch hinzu, ohne in Jenkins Console irgendetwas konfigurieren zu müssen.

50
Render

Sie können Folgendes in einer Pipeline verwenden:

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

Wenn Sie die ssh-URL verwenden, müssen Ihre Anmeldeinformationen Benutzername + privater Schlüssel sein. Wenn Sie die https-Klon-URL anstelle der SSH-URL verwenden, sollten Ihre Anmeldeinformationen Benutzername und Kennwort sein.

92

Wenn Sie SSH-Anmeldeinformationen verwenden möchten,

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

wenn Sie Benutzername und Kennwort verwenden möchten, müssen Sie http clone als @Serban verwenden.

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

So checken Sie explizit anhand bestimmter Anmeldeinformationen aus

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

Zum Auschecken basierend auf den konfigurierten Anmeldeinformationen im aktuellen Jenkins-Job

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

Sie können beide Phasen in einer einzigen Jenkins-Datei verwenden.

6
Upul Doluweera

Hinzufügen eines kurzen Beispiels mit dem Git-Plugin GitSCM :

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

in Ihrer Pipeline

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

Das ist für mich 100% ig Arbeit mit dem Jenkins-Skript 

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

Was es wert ist, zur Diskussion hinzugefügt zu werden ... was ich getan habe, hat mir geholfen ... Da die Pipeline in einem Arbeitsbereich in einem Docker-Image ausgeführt wird, das bei jeder Ausführung bereinigt wird. Ich habe die Anmeldeinformationen abgerufen, die für die Durchführung der erforderlichen Operationen am Repository in meiner Pipeline erforderlich sind, und sie in einer .netrc-Datei gespeichert. Dadurch konnte ich die Git-Repo-Operationen erfolgreich autorisieren.

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