Github 프라이빗 리포지토리에 대한 Jenkins CI 인증


136

Jenkins가 Github에서 호스팅되는 개인 저장소에서 데이터를 자동으로 가져오고 싶습니다. 그러나 나는 그 작업을 수행하는 방법을 모른다.. 젠킨스 사용자를 위해 ssh 키를 생성하는 문서를 시험해 보았습니다. "리포를 복제 할 수 없습니다". URL을 확인했습니다. URL이 유효합니다.

어떤 단서라도, 이런 종류의 물건을 설명하는 문서 / 블로그 / 무엇을 알고 있습니까?


:이에게 비슷한 질문에 대답, 당신은 아래 링크에서 답을 볼 수 있습니다 젠킨스 및 GitHub의
user965062

답변:


139

아마도 배포 키에 대한 GitHub의 지원 이 원하는 것입니까? 해당 페이지를 인용하려면 :

배포 키는 언제 사용해야합니까?

단일 개인 저장소에 대한 풀 액세스가 필요한 서버가있는 경우 간단합니다. 이 키는 개인 사용자 계정 대신 리포지토리에 직접 연결됩니다.

그것이 이미 시도하고 있고 작동하지 않는 경우 사용중인 URL, 키 파일의 이름 및 위치 등에 대한 자세한 내용으로 질문을 업데이트 할 수 있습니다.


이제 기술 부분 : Jenkins에서 SSH 키를 사용하는 방법은 무엇입니까?

예를 들어, jenkins유닉스 사용자 인 경우에 배포 키를 저장할 수 있습니다 ~/.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 리포지토리를 인증하고 Github에 git@github.com대한 모든 연결에 위의 키를 사용하지 않기 위해 호스트 별칭 github-deploy-myproject를 만들었습니다 . 복제 URL은 이제

git clone github-deploy-myproject:myuser/myproject

Jenkins에 리포지토리 URL 로 넣는 것도 마찬가지 입니다.

( 이 작업을 수행하기 위해 ssh : // 를 앞에 두어 서는 안됩니다 .)


4
젠킨스의 열쇠를 어떻게 만들었 어?
Thiago Diniz 2016 년

5
"배포 키"는 이전 SSH 키입니다. 내가 한 일은 ssh-keygen사용자 Jenkins가 (Ubuntu 서버에서 "jenkins")로 실행되면서 실행됩니다. 그런 다음 ~jenkins/.ssh/id_rsa.pubgithub의 리포지토리의 배포 키 섹션에 추가 했습니다.
Adam Monsen

10
일부 설치에서는 ~디렉토리에 포함 시키지 않아야 합니다. 그러나 /var/lib/jenkins/.ssh/기본 젠킨스 사용자가 해당 키를 사용하도록!
garmoncheg

7
@garmoncheg에 의해 주석, 노트에 후속 /var/lib/jenkins 홈 디렉토리 ( ~에 대한) jenkins사용자.
데이비드 하크 니스

1
누구든지 이것을 사용하여 배포 후크를 얻는 방법을 알고 있습니까? Could not match github-deploy-myproject:myuser/myproject후크 로그에 오류가 비슷합니다 . 내 Repo URL과 빌드로 GitHub에 액세스 할 수 있도록 입력했습니다. 빌드를 트리거하지 못하는 것은 GitHub의 게시물입니다.
pogo

36

나를 위해이 일을 한 가지는 그것이 있는지 확인하는 github.com것입니다~jenkins/.ssh/known_hosts .


이 키 쌍을 설정 한 후 자식 푸시 실패 어디에 I 갖는 고정 된 문제
chrisbunney

필자의 경우 jenkins 사용자로 올바르게 로그인 할 수 없으므로 'sudo su jenkins'를 수행하는 가장 쉬운 방법입니다. jenkins ID가 있으면 github / bitbucket에 수동 ssh 로그인을 수행하고 jenkins 사용자 대신 원격 호스트 키를 수락 할 수 있습니다.
LOAS

그러나 Jenkins Initialization을 개발 환경의 '부트 스트랩'으로 만들면 어떨까요? 이것의 '수동'측면이 작동하지 않습니다
TheJediCowboy

13

Jenkins가 1 개 이상의 프로젝트에 액세스해야하는 경우 다음을 수행해야합니다.
1. 하나의 github 사용자 계정에 공개 키
추가 2.이 사용자를 소유자 (모든 프로젝트에 액세스) 또는 모든 프로젝트의 공동 작업자로 추가하십시오.

GitHub가 처음으로 일치하는 배포 키를 발견하고 "오류 : 사용자 / repo2에 대한 권한이 사용자 / repo1에 거부 됨" 과 같은 오류를 다시 보내므로 한 시스템 사용자의 많은 공개 키가 작동하지 않습니다 .

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


2
배포 키 사용에 대한 답변은 단일 리포지토리 만있는 경우 효과적입니다. 그러나 CI 서버가 여러 저장소에 걸쳐 프로젝트를 빌드하도록하려면 즉시 여러 키 세트 (리포 당 한 쌍)를 관리해야하며이 답변에 나열된 방법을 사용하는 것이 훨씬 쉬워집니다.
cclark

이 안내서는 ~ / .ssh / config를 사용하여 다른 배포 키를 통해 설정하는 방법을 설명합니다. gist.github.com/victorborda/2871029
Jorge Orpinel

@ JorgeOrpinel, 링크의 접근 방식으로 Github 플러그인을 사용하여 github webhook이 빌드를 트리거하지 못하게 할 수 있다고 생각합니다. 나는, 내 참조 GitHub의 클론 URL과 일치하도록 빌드 설정에 저장소 URL을 필요로하기 때문에의 repos의 모든 단일 키 및 액세스 할 수있는 더미 사용자가 더 나는 또한 원하는 경우은 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 repo 의 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.