Chcesz skorzystać z usługi Jenkins Pipeline Git SCM z poświadczeniami?

104

Śledziłem ten tutorial :

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

Jednak nie mówi, jak dodać poświadczenia. Jenkins ma określoną sekcję „Poświadczenia”, w której definiuje się użytkownika i przepustkę, a następnie uzyskuje identyfikator do wykorzystania w zadaniach, ale jak mam go używać w instrukcjach Pipeline?

Próbowałem z:

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

brak szczęścia:

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.

Czy istnieje sposób skonfigurowania kredytów w potoku, czy też muszę umieścić klucze SSH w pliku .ssh / Authorized_keys użytkownika Jenkin?

W idealnym świecie chciałbym mieć repozytorium dla zadań potokowych i kluczy repozytorium, a następnie uruchomić Docker Jenkins i dynamicznie dodawać tam te zadania i klucze bez konieczności konfigurowania czegokolwiek w Jenkins Console.

Renderowanie
źródło

Odpowiedzi:

162

W potoku można użyć następujących elementów:

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

Jeśli używasz adresu URL ssh, Twoje poświadczenia muszą zawierać nazwę użytkownika + klucz prywatny. Jeśli używasz adresu URL klonowania https zamiast adresu ssh, Twoje poświadczenia powinny zawierać nazwę użytkownika i hasło.

Serban Constantin
źródło
1
To rozwiązało problem, dziękuję. Nie wiedziałem, że SSH-url i HTTPS-url wymagają różnych poświadczeń do pracy!
Renderuj
3
to było pomocne, ale credentialsIdpochodzi z identyfikatora, /var/lib/jenkins/credentials.xmlponieważ musiałem walczyć, aby to rozgryźć.
prayagupd
17
@prayagupd, powinieneś być w stanie uzyskać identyfikator poświadczenia ze strony poświadczeń ( http://yourjenkinsinstall/credentials). Nie ma potrzeby przeszukiwania plików konfiguracyjnych.
Serban Constantin
4
Dla tych, którzy pytają „Jak wygenerować identyfikator uwierzytelnienia”. Tutaj, jak to znaleźć. [1. Kliknij Poświadczenia na stronie głównej Jenkins, 2. Pojawi się tabela ze wszystkimi utworzonymi poświadczeniami. 3. ID jest w tej tabeli]
vincedjango
1
Dla mnie nie udało się rozwiązać adresu URL, gdy ustawiłem go na początek ssh://. Usunięcie go, naprawiłem.
Moshisho
30

Jawne wyewidencjonowanie przy użyciu określonych poświadczeń

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

Do kasy na podstawie skonfigurowanych poświadczeń w bieżącym zadaniu Jenkins

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

Możesz użyć obu etapów w jednym pliku Jenkins.

Upul Doluweera
źródło
2
jak wygenerować ten identyfikator poświadczeń?
nieokreślony
gdzie powinienem przechowywać plik poświadczeń. jenkins sais: Ostrzeżenie: nie można znaleźć CredentialId „jenkins_key”.
Dinu Nicolae
Dane logowania @Dinu są tworzone w Jenkins, powinieneś zobaczyć je w menu głównym, jeśli wtyczka jest zainstalowana. support.cloudbees.com/hc/en-us/articles/…
Upul Doluweera
1
Dziękuję Ci! ktoś, kto opublikował całą sprawę, a nie tylko trochę tutaj i trochę tutaj, i miał nadzieję, że ludzie w magiczny sposób wiedzą, co umieścić na resztę.
25

Jeśli chcesz użyć poświadczeń ssh,

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

jeśli chcesz użyć danych logowania do nazwy użytkownika i hasła, musisz użyć klonowania http, o czym wspomniano w @Serban.

    git(
       url: 'https://github.com/<repo_name>.git',
       credentialsId: 'xpc',
       branch: "${branch}"
    )
f-społeczeństwo
źródło
10
jak wygenerować ten identyfikator poświadczeń?
nieokreślony
Wygenerowałem dane uwierzytelniające w ten sposób: help.github.com/en/articles/… , dodałem klucz publiczny do mojego gita, ale gdzie mam przechowywać ten plik. Jenkins mówi: Ostrzeżenie: nie można znaleźć CredentialId „jenkins_key”.
Dinu Nicolae
@DinuNicolae, zapoznaj się Adding new global credentials -> 7.z poniższym linkiem. jenkins.io/doc/book/using/using-credentials
f-
14

Dodaję ci szybki przykład przy użyciu wtyczki git GitSCM :

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

w twoim rurociągu

stage('checkout'){
    steps{
        script{
            checkout
        }
    }
}
avivamg
źródło
czy wiesz, jak używać globalnych danych uwierzytelniających dla całego zespołu? Czy jest sposób, aby niezależnie od tego, który programista naciska na github, może podać swoje dane logowania bez konieczności ujawniania ich w pliku Jenkinsfile
henhen
Możesz zarządzać mechanizmem związanym z własną logiką w zespole programistów i używać różnych kluczy poświadczeń dla każdej grupy. na przykład: Jeśli użytkownik Github znajduje się na liście „backend_developers”, użyj <gitCredentialsGroupA>, jeśli użytkownik Github na liście „frontend_developers” używa <gitCredentialsGroupB>, zaprojektuj mechanizm powiązany z własnym przypadkiem użycia.
avivamg
gdzie chcesz zachować te dane uwierzytelniające? Czy to z wtyczką Jenkins Credentials?
henhen
Skorzystaj z dokumentacji poświadczeń Jenkins - jenkins.io/doc/book/using/using-credentials
avivamg
1
Szukałem daleko i szeroko w poszukiwaniu prostego checkoutprzykładu, takiego jak ten, dziękuję.
301_Moved_Permanently
1

Co warto dodać do dyskusji ... to, co zrobiłem, pomogło mi ... Ponieważ potok jest uruchamiany w obszarze roboczym w obrazie dockera, który jest czyszczony przy każdym uruchomieniu. Wziąłem dane uwierzytelniające potrzebne do wykonania niezbędnych operacji na repozytorium w moim potoku i zapisałem je w pliku .netrc. Pozwoliło mi to pomyślnie autoryzować operacje 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...
    '''
}
madeyejm
źródło
1

Rozwiązano dla mnie za pomocą

checkout scm: ([
                    $class: 'GitSCM',
                    userRemoteConfigs: [[credentialsId: '******',url: ${project_url}]],
                    branches: [[name: 'refs/tags/${project_tag}']]
            ])
Sarang
źródło