Jenkins CI'yi Github özel deposu için doğrulayın


136

Jenkins'in Github'da barındırılan özel veri havuzumdan otomatik olarak veri almasını istiyorum. Ama bu görevi gerçekleştirmek için hiçbir fikrim yok .. jenkins kullanıcı ve tüm görebildiğim için ssh-anahtar üreten belgeleri, denedim: "repo klonlayamıyor". URL'leri kontrol ettim - geçerlidir.

Herhangi bir ipucu, belki de bu tür şeyleri tanımlayan bazı dokümanlar / bloglar / ne biliyorsunuz?


Buna benzer bir soruyu cevaplıyorum, cevabı aşağıdaki bağlantıda görebilirsiniz: jenkins & GitHub
user965062

Yanıtlar:


139

Belki GitHub'ın anahtarları dağıtma desteği aradığınız şeydir? Bu sayfayı alıntılamak için:

Ne zaman bir dağıtım anahtarı kullanmalıyım?

Basit, tek bir özel depoya çekme erişimi gerektiren bir sunucunuz olduğunda. Bu anahtar, kişisel bir kullanıcı hesabı yerine doğrudan depoya eklenir.

Zaten denediğiniz şey buysa ve işe yaramazsa, sorunuzu kullanılan URL'lerle ilgili daha fazla ayrıntı, anahtar dosyaların adları ve konumu vb. İle güncellemek isteyebilirsiniz.


Şimdi teknik kısım için: SSH anahtarınızı Jenkins ile nasıl kullanabilirsiniz?

Bir jenkinsunix kullanıcısı varsa, konuşlandırma anahtarınızı depolayabilirsiniz ~/.ssh/id_rsa. Jenkins repoyu ssh ile klonlamaya çalıştığında, o anahtarı kullanmaya çalışır.

Bazı kurulumlarda Jenkins'i kendi kullanıcı hesabı olarak çalıştıramazsınız ve muhtemelen varsayılan ssh anahtarı konumunu da kullanamazsınız ~/.ssh/id_rsa. Bu gibi durumlarda, örneğin farklı bir konumda bir anahtar oluşturabilir ve bunu aşağıdaki girişle kullanmak üzere ~/.ssh/deploy_keyyapılandırabilirsiniz :ssh~/.ssh/config

Host github-deploy-myproject
    HostName       github.com
    User           git
    IdentityFile   ~/.ssh/deploy_key
    IdentitiesOnly yes

Tüm Github depolarına kimlik doğrulaması git@github.comyaptığınız ve yukarıdaki anahtarın Github'a olan tüm bağlantılarınız için kullanılmasını istemediğiniz için, github-deploy-myproject ana bilgisayar takma adını oluşturduk . Klon URL'niz artık

git clone github-deploy-myproject:myuser/myproject

ve ayrıca Jenkins'e depo URL'si olarak koyduğunuz da budur .

(Not sen gerektiğini değil koymak ssh: // önünde sırayla bunun için işe.)


4
Bur cenkinler için nasıl bir anahtar yarattın?
Thiago Diniz

5
"Konuşlandırma anahtarı" yalnızca eski SSH anahtarlarıdır. Ne yaptığım ssh-keygenkullanıcı Jenkins (Ubuntu sunucumda "jenkins") olarak çalışır. Daha sonra ~jenkins/.ssh/id_rsa.pubgithub'daki deponun dağıtım anahtarları bölümüne ekledim .
Adam Monsen

10
bazı kurulumlarda bunu ~dizine değil . Ama /var/lib/jenkins/.ssh/varsayılan jenkins kullanıcı bu anahtarları kullanmak için içine !
garmoncheg

7
@Garmoncheg tarafından açıklama, not takip etmek /var/lib/jenkins olduğunu ev dizini ( ~için) jenkinskullanıcı.
David Harkness

1
Herkes bununla çalışma kanca kanca almak nasıl biliyor mu? Could not match github-deploy-myproject:myuser/myprojectKanca günlüğüne benzer hatalar görüyorum . Bunu Repo URL'm ve yapılarımın GitHub'a erişebilmesi için girdim. Sadece GitHub'dan derlemeyi tetikleyemeyen gönderi.
pogo

36

Bunu benim için çalıştıran bir şey, github.combunun içinde olduğundan emin olmaktır ~jenkins/.ssh/known_hosts.


Bu, bir anahtar çifti kurduktan sonra git tuşuna
basmanın

Benim durumumda bunu yapmanın en kolay yolu 'sudo su jenkins' yapmaktır, çünkü jenkins kullanıcısı olarak düzgün bir şekilde oturum açmak mümkün değildir. Jenkins kimliğine sahip olduğunuzda, github / bitbucket'e manuel olarak ssh girişi yapabilir ve jenkins kullanıcısı adına uzak ana bilgisayar anahtarını kabul edebilirsiniz.
LOAS

Peki Jenkins Başlatma'yı geliştirme ortamınızın 'bootstrap'ının bir parçası yaparsanız ne olur? Bunun 'manuel' yönü çalışmıyor
TheJediCowboy

13

1'den fazla projeye erişmek için Jenkins'e ihtiyacınız varsa:
1. bir github kullanıcı hesabına genel anahtar
eklemek 2. bu kullanıcıyı Sahip (tüm projelere erişmek için) veya her projede Ortak olarak eklemek.

Bir sistem kullanıcısı için birçok ortak anahtar çalışmaz çünkü GitHub ilk eşleşen konuşlandırma anahtarını bulur ve "HATA: Kullanıcı / repo2 için kullanıcı / repo1'e izin verilmedi" hatası geri gönderir

http://help.github.com/ssh-issues/


2
Tek bir deponuz varsa, konuşlandırma anahtarını kullanmanın yanıtı çok işe yarar. Ancak bir CI sunucusunun birden çok depoda proje oluşturmasını istediğinizde, hemen birkaç anahtar grubunu (repo başına bir çift) yönetme pozisyonunda olursunuz ve bu cevapta listelenen yaklaşımı almak çok daha kolay hale gelir.
cclark

Bu adamın kılavuzu, ~ / .ssh / config kullanarak farklı konuşlandırma anahtarlarıyla nasıl ayarlanacağını açıklar: gist.github.com/victorborda/2871029
Jorge Orpinel

@JorgeOrpinel, bağlantıdaki yaklaşımın github webhooks'un Github eklentisini kullanarak yapıları tetiklemesini engelleyebileceğine inanıyorum. Tek bir tuşa sahip bir kukla kullanıcı buldum ve yapıların bir webhook tarafından tetiklenmesini istediğimde tüm depolara daha iyi çalıştım, çünkü github klon URL'sini eşleştirmek için derlem yapılandırmasındaki Havuz URL'sine ihtiyacım vardı, diğer comment
chrisbunney

6

Jenkins, sistemde bir Jenkins kullanıcısı oluşturur. Ssh anahtarı Jenkins kullanıcısı için oluşturulmalıdır. İşte adımlar:

sudo su jenkins -s /bin/bash
cd ~
mkdir .ssh // may already exist
cd .ssh
ssh-keygen

Artık SSH tuşunu kullanarak bir Jenkins kimlik bilgisi oluşturabilirsiniz Jenkins gösterge tablosunda Kimlik Bilgileri Ekle

bu seçeneği seç

Özel Anahtar: Jenkins ustasından ~ / .ssh


1

Gitlab ile benzer bir sorun yaşadım. Ssh ile giriş yapmasına izin verilen kullanıcıları kısıtladığım anlaşılıyor. Bu, github kullanıcılarını etkilemez, ancak insanların buraya gitlab (ve benzeri) sorunlar için gelmesi durumunda, gitaşağıdaki AllowUsersayara eklediğinizden emin olun /etc/ssh/sshd_config:

# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
AllowUsers batman git

0

Başka bir seçenek GitHub kişisel erişim belirteçlerini kullanmaktır :

  • Https://github.com/settings/tokens/new adresine gidin
  • Repo kapsamı ekle
  • Jenkins'e bir GitHub kaynağı ekleyin
  • Havuz HTTPS URL'sini kullan
  • Git deposunun HTTPS URL'sini ekleyin ( SSH olanını değil , ör. https://github.com/my-username/my-project.git)
  • Kimlik bilgisi ekle
    • Tür: Şifre ile Kullanıcı Adı
    • Kullanıcı adı: GitHub kullanıcı adı
    • Şifre: GitHub'da oluşturduğunuz kişisel erişim belirteci
    • Kimlik: benzeri bir şey github-token-for-my-username

Bunu Jenkins ver. Özel bir GitHub deposuyla 2.222.1 ve Jenkins GitHub eklentisi 1.29.5.


-1

Sergey_mo yanıtına bir alternatif, jenkins sunucusunda birden fazla ssh anahtarı oluşturmaktır.

(Sergey_mo'nun cevabına ilk yorum yapan kişinin söylediği gibi, bu tek bir anahtar çiftini yönetmekten daha acı verici olabilir.)


9
Şimdi bir URL göndermenin neden yanıtlar için korkunç bir strateji olduğunu anlıyorum. Yukarıdaki bağlantı öldü.
Dejay Clayton
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.