Kasse Jenkins Pipeline Git SCM mit Anmeldeinformationen?

102

Ich habe dieses Tutorial verfolgt :

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

Es wird jedoch nicht angegeben, wie Anmeldeinformationen hinzugefügt werden sollen. Jenkins hat einen speziellen Abschnitt "Anmeldeinformationen", in dem Sie Benutzer Benutzer & Pass definieren und dann die ID für die Verwendung in Jobs abrufen. 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 / autorisierte_keys-Datei von Jenkins Linux-Benutzer einfügen?

In einer idealen Welt möchte ich ein Repository für Pipeline-Jobs und Repo-Schlüssel haben, dann Docker Jenkins starten und diese Jobs und Schlüssel dort dynamisch hinzufügen, ohne etwas in der Jenkins-Konsole konfigurieren zu müssen.

Machen
quelle

Antworten:

160

In einer Pipeline können Sie Folgendes 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 + Passwort sein.

Serban Constantin
quelle
1
Das hat es behoben, danke. Mir war nicht bewusst, dass für SSH-URL und HTTPS-URL unterschiedliche Anmeldeinformationen erforderlich sind!
Rendern
3
es war hilfreich, credentialsIdkommt aber von id in, /var/lib/jenkins/credentials.xmlda ich mich abmühen musste, es herauszufinden.
Prayagupd
17
@prayagupd, Sie sollten in der Lage sein, die Anmeldeinformations-ID von der Anmeldeinformationsseite ( http://yourjenkinsinstall/credentials) abzurufen . Die Konfigurationsdateien müssen nicht durchsucht werden.
Serban Constantin
4
Für diejenigen, die fragen "Wie man eine Anmeldeinformations-ID generiert". Hier, wie man es findet. [1. Klicken Sie auf der Jenkins-Startseite auf Anmeldeinformationen. 2. Anschließend wird eine Tabelle mit allen von Ihnen erstellten Anmeldeinformationen angezeigt. 3. ID ist in dieser Tabelle]
vincedjango
1
Für mich konnte die URL nicht aufgelöst werden, als ich sie für den Anfang festgelegt habe ssh://. Entfernen Sie es, reparierten Sie es.
Moshisho
30

Zum expliziten Auschecken mit bestimmten Anmeldeinformationen

    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 einzelnen Jenkins-Datei verwenden.

Upul Doluweera
quelle
2
Wie generiere ich diese Anmeldeinformationen?
undefiniert
Schauen Sie
mal rein
Wo soll ich die Anmeldeinformationsdatei speichern? jenkins sais: Warnung: CredentialId "jenkins_key" konnte nicht gefunden werden.
Dinu Nicolae
@Dinu-Anmeldeinformationen werden in Jenkins erstellt. Sie sollten sie im Hauptmenü sehen, wenn das Plugin installiert ist. support.cloudbees.com/hc/en-us/articles/…
Upul Doluweera
1
Danke! Jemand, der das Ganze gepostet hat und nicht nur ein bisschen hier und ein bisschen hier, und in der Hoffnung, dass die Leute auf magische Weise wissen, was sie für den Rest tun sollen.
25

Wenn Sie SSH-Anmeldeinformationen verwenden möchten,

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

Wenn Sie Anmeldeinformationen für Benutzername und Kennwort verwenden möchten, müssen Sie den http-Klon wie in @Serban angegeben verwenden.

    git(
       url: 'https://github.com/<repo_name>.git',
       credentialsId: 'xpc',
       branch: "${branch}"
    )
F-Gesellschaft
quelle
10
Wie generiere ich diese Anmeldeinformationen?
undefiniert
Ich habe die Anmeldeinformationen wie folgt generiert: help.github.com/de/articles/… . Ich habe den öffentlichen Schlüssel zu meinem Git hinzugefügt, aber wo muss ich diese Datei speichern ? Jenkins sagt: Warnung: CredentialId "jenkins_key" konnte nicht gefunden werden.
Dinu Nicolae
@DinuNicolae siehe Adding new global credentials -> 7.folgenden Link. jenkins.io/doc/book/using/using-credentials
F-Society
14

Fügen Sie ein kurzes Beispiel mit dem Git-Plugin GitSCM hinzu :

    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
        }
    }
}
avivamg
quelle
Wissen Sie, wie Sie globale Anmeldeinformationen für das gesamte Team verwenden können? Oder gibt es eine Möglichkeit, dass jeder Entwickler, der auf Github drängt, seine Anmeldeinformationen bereitstellen kann, ohne sie in der Jenkins-
Datei
Sie können Ihren Mechanismus in Bezug auf Ihre eigene Logik in Ihrem Entwicklerteam verwalten und für jede Gruppe unterschiedliche Anmeldeinformationsschlüssel verwenden. Beispiel: Wenn sich ein Github-Benutzer in der Liste der Backend-Entwickler befindet, verwenden Sie <gitCredentialsGroupA>. Wenn der Github-Benutzer in der Liste der Frontend-Entwickler <gitCredentialsGroupB> verwendet, entwerfen Sie Ihren Mechanismus in Bezug auf Ihren eigenen Anwendungsfall.
Avivamg
Wo würden Sie diese Anmeldeinformationen aufbewahren? Ist es mit dem Jenkins Credentials Plugin?
Henhen
Verwenden Sie die Dokumentation zu Jenkins Anmeldeinformationen - jenkins.io/doc/book/using/using-credentials
avivamg
1
Ich habe weit und breit nach einem einfachen checkoutBeispiel wie diesem gesucht , danke.
301_Moved_Permanent
1

Für das, was es wert ist, zur Diskussion hinzugefügt zu werden ... was ich getan habe, hat mir letztendlich geholfen ... Da die Pipeline in einem Arbeitsbereich innerhalb eines Docker-Images ausgeführt wird, das bei jeder Ausführung bereinigt wird. Ich habe die Anmeldeinformationen abgerufen, die zum Ausführen der erforderlichen Vorgänge für das Repo 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...
    '''
}
madeyejm
quelle
1

Es löste sich für mich mit

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