Kimlik bilgileriyle Jenkins Pipeline Git SCM'yi kontrol edin?


108

Bu öğreticiyi takip ediyordum :

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

Ancak kimlik bilgilerinin nasıl ekleneceğini söylemez. Jenkins'in kullanıcı & geçişi tanımladığınız ve daha sonra işlerde kullanmak için ID aldığınız özel "Kimlik Bilgileri" bölümü var, ancak bunu Pipeline talimatlarında nasıl kullanırım?

İle denedim:

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

şanssız:

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.

Kredileri ardışık düzen içinde yapılandırmanın bir yolu var mı, yoksa SSH anahtarlarını Jenkin'in Linux kullanıcısının .ssh / yetkili_keys dosyasına koymam gerekiyor mu?

İdeal dünyada, ardışık düzen işleri ve depo anahtarları için bir depoya sahip olmak, ardından Docker Jenkins'i başlatmak ve bu işleri ve anahtarları Jenkins Konsolunda hiçbir şey yapılandırmak zorunda kalmadan dinamik olarak buraya eklemek istiyorum.

Yanıtlar:


167

Aşağıdakileri bir ardışık düzen içinde kullanabilirsiniz:

git branch: 'master',
    credentialsId: '12345-1234-4696-af25-123455',
    url: 'ssh://git@bitbucket.org:company/repo.git'

Ssh url'sini kullanıyorsanız, kimlik bilgileriniz kullanıcı adı + özel anahtar olmalıdır. Ssh yerine https klon url'si kullanıyorsanız, kimlik bilgileriniz kullanıcı adı + şifre olmalıdır.


1
Düzeltti, teşekkürler. SSH-url ve HTTPS-url'nin çalışmak için farklı kimlik bilgileri gerektirdiğinin farkında değildim!
render

3
yardımcı oldu, ancak anlamak için mücadele etmem gerektiğinden credentialsId, id'den geliyor /var/lib/jenkins/credentials.xml.
2017

18
@prayagupd, kimlik bilgileri kimliğini kimlik bilgileri sayfasından ( http://yourjenkinsinstall/credentials) alabilmelisiniz . Yapılandırma dosyalarını taramaya gerek yok.
Serban Constantin

4
"Kimlik Bilgileri Nasıl Oluşturulur" diye soranlar için. Nasıl bulacağınız burada. [1. Jenkins ana sayfasında Kimlik Bilgileri'ne tıklayın, 2. Oluşturduğunuz tüm kimlik bilgilerinin bulunduğu bir tablo göreceksiniz. 3. Kimlik bu
tablodadır

1
Benim için URL'yi başlaması için ayarladığımda çözemedi ssh://. Kaldırmak, düzeltmek.
Moshisho

32

Belirli bir kimlik bilgilerini kullanarak açıkça ödeme yapmak için

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

Mevcut Jenkins İşindeki yapılandırılmış kimlik bilgilerine göre ödeme yapmak için

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

Tek bir Jenkins dosyasında her iki aşamayı da kullanabilirsiniz.


2
bu kimlik bilgileri nasıl oluşturulur?
tanımsız


kimlik bilgileri dosyasını nerede saklamalıyım. jenkins sais: Uyarı: CredentialId "jenkins_key" bulunamadı.
Dinu Nicolae

@Dinu kimlik bilgileri Jenkins'te oluşturulur, eklenti kuruluysa ana menüde görmelisiniz. support.cloudbees.com/hc/en-us/articles/…
Upul Doluweera

1
teşekkür ederim! Buraya ve buraya bir parça değil, tamamını gönderen ve insanların geri kalanı için ne koyacaklarını sihirli bir şekilde bilmelerini ümit eden biri.

25

Ssh kimlik bilgilerini kullanmak istiyorsanız,

  git(
       url: 'git@github.com<repo_name>.git',
       credentialsId: 'xpc',
       branch: "${branch}"
    )

kullanıcı adı ve şifre kimlik bilgilerini kullanmak istiyorsanız, @Serban'ın bahsettiği gibi http klonunu kullanmanız gerekir.

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

10
bu kimlik bilgileri nasıl oluşturulur?
tanımsız

Kimlik bilgilerini şu şekilde oluşturdum: help.github.com/en/articles/… , genel anahtarı git'ime ekledim, ancak bu dosyayı nerede depolamam gerekiyor? Jenkins şunu söylüyor: Uyarı: CredentialId "jenkins_key" bulunamadı.
Dinu Nicolae

@DinuNicolae lütfen Adding new global credentials -> 7.aşağıdaki bağlantıya bakın . jenkins.io/doc/book/using/using-credentials
f-Society

16

Git eklentisi GitSCM kullanarak size hızlı bir örnek ekliyoruz :

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

senin boru hattında

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

tüm ekip için global kimlik bilgilerini nasıl kullanacağınızı biliyor musunuz? Ya da hangisi geliştirici github için bastırıyor böylece onlar Jenkinsfile içinde maruz kalmadan kimlik bilgilerini sağlayacak bir yol yoktur
henhen

Geliştirme ekibinizde kendi mantığınızla ilgili mekanizmanızı yönetebilir ve her grup için farklı kimlik bilgileri anahtarları kullanabilirsiniz. örneğin: Bir Github kullanıcısı 'arka uç_ geliştiriciler' listesinde ise <gitCredentialsGroupA> kullanın, 'frontend_developers' listesindeki Github kullanıcısı <gitCredentialsGroupB> kullanıyorsa, mekanizmanızı kendi kullanım durumunuza göre tasarlayın.
avivamg

bu kimlik bilgilerini nerede saklarsın? Jenkins Credentials eklentisi ile mi?
henhen

Jenkins kimlik bilgilerini kullanın - jenkins.io/doc/book/using/using-credentials
avivamg

1
Bunun checkoutgibi basit bir örnek için çok araştırdım , teşekkürler.
301_Moved_Permanently

1

Tartışmaya eklemeye değer olan şey için ... yaptığım şey bana yardımcı oldu ... Ardışık düzen, her çalıştığında temizlenen bir docker görüntüsü içindeki bir çalışma alanında çalıştırıldığı için. Ardışık düzenimdeki depoda gerekli işlemleri gerçekleştirmek için gereken kimlik bilgilerini aldım ve bunları bir .netrc dosyasında sakladım. bu, git repo işlemlerini başarıyla yetkilendirmeme izin verdi.

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

Kullanarak benim için çözüldü

checkout scm: ([
                    $class: 'GitSCM',
                    userRemoteConfigs: [[credentialsId: '******',url: ${project_url}]],
                    branches: [[name: 'refs/tags/${project_tag}']]
            ])
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.