Github 프라이빗 리포지토리에 대한 Jenkins CI 인증 키를 생성하는 문서를

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

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



답변

아마도 배포 키에 대한 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 : // 를 앞에 두어 서는 안됩니다 .)


답변

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


답변

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

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

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


답변

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


답변

gitlab과 비슷한 문제가있었습니다. ssh를 통해 로그인 할 수있는 사용자를 제한했습니다. 이것은 github 사용자에게는 영향을 미치지 않지만 사람들이 gitlab (및 이와 유사한) 문제로 인해 여기에 오는 경우 git다음 AllowUsers설정 을 추가하십시오 /etc/ssh/sshd_config.

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


답변

또 다른 옵션은 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 리포지토리 포함).


답변

sergey_mo의 대답에 대한 대안은 jenkins 서버에서 여러 ssh 키를 작성하는 것입니다.

(sergey_mo의 답변에 대한 첫 번째 논평자가 말했듯이 단일 키 페어를 관리하는 것보다 더 고통 스럽습니다.)