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

Odpowiedzi:


162

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

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


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


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

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

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

1

Rozwiązano dla mnie za pomocą

checkout scm: ([
                    $class: 'GitSCM',
                    userRemoteConfigs: [[credentialsId: '******',url: ${project_url}]],
                    branches: [[name: 'refs/tags/${project_tag}']]
            ])
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.