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: 'git@bitbucket.org: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.

Antworten:


160

In einer Pipeline können Sie Folgendes verwenden:

git branch: 'master',
    credentialsId: '12345-1234-4696-af25-123455',
    url: 'ssh://git@bitbucket.org: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.


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://git@test.com/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.


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: 'git@github.com<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}"
    )

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

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

1

Es löste sich für mich mit

checkout scm: ([
                    $class: 'GitSCM',
                    userRemoteConfigs: [[credentialsId: '******',url: ${project_url}]],
                    branches: [[name: 'refs/tags/${project_tag}']]
            ])
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.