GithubプライベートリポジトリのJenkins CIを認証する


136

Jenkinsに、Githubでホストされている私のプライベートリポジトリから自動的にデータを取得してもらいたいのですが。しかし、私はそのタスクを達成する方法がわかりません。.ドキュメントを試して、jenkinsユーザーのssh-keyを生成すると、「リポジトリをクローンできません」とわかります。URLを確認しました-有効です。

手がかりは、おそらくあなたはこの種のことを説明しているドキュメント/ブログ/何かを知っていますか?


私はこれに似た質問に答えます、以下のリンクで答えを見ることができます:jenkins&GitHub
user965062

回答:


139

おそらく、GitHubの展開キーのサポートがあなたが探しているものでしょうか?そのページを引用するには:

いつデプロイキーを使用する必要がありますか?

単純、単一のプライベートリポジトリへのプルアクセスが必要なサーバーがある場合。このキーは、個人のユーザーアカウントではなく、リポジトリに直接添付されます。

それでも問題が解決されない場合は、使用しているURLの詳細、キーファイルの名前と場所などで質問を更新することをお勧めします。


では、技術的な部分について説明します。JenkinsでSSHキーを使用するにはどうすればよいですか。

たとえば、jenkinsUNIXユーザーがいる場合は、デプロイキーをに保存できます~/.ssh/id_rsa。Jenkinsがssh経由でリポジトリのクローンを作成しようとすると、そのキーを使用しようとします。

一部の設定では、Jenkinsを独自のユーザーアカウントとして実行できず、デフォルトのsshキーの場所も使用できない場合があります~/.ssh/id_rsa。このような場合は、別の場所(例:)~/.ssh/deploy_keyにキーを作成し、sshそれをのエントリで使用するように構成できます~/.ssh/config

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

を使用してすべてのGithubリポジトリに対して認証をgit@github.com行い、上記のキーをGithubへのすべての接続に使用したくないので、ホストエイリアスgithub-deploy-myprojectを作成しました。クローンURLは次のようになります

git clone github-deploy-myproject:myuser/myproject

これは、リポジトリURLとしてJenkinsに配置するものでもあります。

(これが機能するために、ssh://を前に置かないでください。)


4
Burジェンキンスのキーをどのように作成しましたか?
Thiago Diniz、2011年

5
「デプロイキー」は、古いSSHキーです。私がしたことはssh-keygen、Jenkins が実行しているユーザー(私のUbuntuサーバーでは「jenkins」)として実行されています。次に~jenkins/.ssh/id_rsa.pub、github上のリポジトリーのデプロイキーセクションに追加しました。
Adam Monsen

10
一部のインストールでは、これを~ディレクトリに配置しないでください。しかし/var/lib/jenkins/.ssh/、デフォルトのjenkinsユーザーがこれらのキーを使用できるようにします。
garmoncheg 2013年

7
@garmonchegによるコメントをフォローアップするに/var/lib/jenkins 、それユーザーのホームディレクトリ(~)であることに注意してくださいjenkins
David Harkness 2013

1
誰かがこれでデプロイフックを機能させる方法を知っていますか?フックログに類似しCould not match github-deploy-myproject:myuser/myprojectたエラーが表示されます。Repo URLとビルドが機能するように入力したので、GitHubにアクセスできます。ビルドをトリガーできないのは、GitHubからの投稿だけです。
pogo 2014

36

これを機能させる1つのことは、それがにあることを確認することgithub.comです~jenkins/.ssh/known_hosts


これにより、キーペアを設定した後にgitプッシュが失敗するという問題が修正されました
chrisbunney

私の場合、これを行う最も簡単な方法は、jenkinsユーザーとして適切にログインできないため、「sudo su jenkins」を実行することです。jenkins IDを取得したら、github / bitbucketに手動でsshログインして、jenkinsユーザーに代わってリモートホストキーを受け入れることができます。
LOAS 2013年

しかし、Jenkins Initializationを開発環境の「ブートストラップ」の一部にするとどうなるでしょうか。これの「手動」の側面は機能しません
TheJediCowboy

13

Jenkinsが1つ以上のプロジェクトにアクセスする必要がある場合:
1.公開鍵を1つのgithubユーザーアカウントに
追加する2.このユーザーを所有者(すべてのプロジェクトにアクセスする)またはすべてのプロジェクトのコラボレーターとして追加する。

GitHubが最初に一致したデプロイキーを見つけ、「ERROR:Permission to user / repo2 denied to user / repo1」のようなエラーを返すため、1人のシステムユーザーの多くの公開鍵は機能しません

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


2
リポジトリが1つしかない場合は、デプロイキーの使用に関する回答が適切に機能します。しかし、CIサーバーで複数のリポジトリにまたがってプロジェクトを構築する場合は、すぐにいくつかのキーのセット(リポジトリごとに1ペア)を管理する立場になり、この回答に記載されているアプローチを採用する方がはるかに簡単になります。
cclark


@JorgeOrpinel、リンクのアプローチにより、Github WebhookがGithubプラグインを使用してビルドをトリガーするのを防ぐことができると思います。ビルド構成のリポジトリURLがgithubクローンURLと一致する必要があるため、ビルドをWebhookでトリガーしたい場合は、単一のキーを持つダミーユーザーとすべてのリポジトリへのアクセスがうまくいきました。他の
chrisbunney

6

Jenkinsは、システム上にユーザーJenkinsを作成します。Jenkinsユーザー用にsshキーを生成する必要があります。手順は次のとおりです。

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

これで、SSHキーを使用してJenkins資格情報を作成できます。Jenkinsダッシュボードで、資格情報を追加します

このオプションを選択

秘密鍵:Jenkinsマスターから〜/ .ssh


1

gitlabでも同様の問題がありました。ssh経由でログインできるユーザーを制限していたことがわかりました。これはgithubユーザーには影響しませんが、人々がgitlab(など)の問題でここに行き着く場合はgit、のAllowUsers設定に追加してください/etc/ssh/sshd_config

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

0

別のオプションは、GitHubパーソナルアクセストークンを使用することです。

  • https://github.com/settings/tokens/newに移動します
  • リポジトリスコープを追加する
  • JenkinsでGitHubソースを追加する
  • リポジトリHTTPS URLを使用
  • gitリポジトリのHTTPS URLを追加しますSSHなどではありませんhttps://github.com/my-username/my-project.git)。
  • 資格情報を追加する
    • 種類:ユーザー名とパスワード
    • ユーザー名:GitHubユーザー名
    • パスワード:GitHubで作成した個人用アクセストークン
    • ID:のようなもの github-token-for-my-username

これをJenkins ver。でテストしました。2.222.1およびJenkins GitHubプラグイン1.29.5(プライベートGitHubリポジトリを使用)。


-1

sergey_moからの回答の代わりに、jenkinsサーバーに複数のsshキーを作成します。

(sergey_moの回答の最初のコメント投稿者が言ったように、これは結局、単一のキーペアを管理するよりも苦痛になるかもしれません。)


9
なぜURLを投稿するだけで答えが得られないのかがわかります。上記のリンクは死んでいます。
Dejay Clayton、2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.