젠킨스 github credentials key 오류
부트캠프 스프린트 4 프로젝트에서 젠킨스를 이용하여 CI-CD 파이프라인을 구축하는 실습을 하다가 오류가 발생하였다.
ssh
을 github에 등록하였고, 로컬 cmd 창에서 다음 명령어를 입력하여 ssh 프로토콜을 이용할 수 있는지 확인하였다.
1
2
3
ssh -T git@github.com
Hi hyemin12! You've successfully authenticated, but GitHub does not provide shell access.
그리고 나서 다음 명령어로 github의 레포지토리를 로컬로 복제할 수 있는지 확인하였다.
1
git clone git@github.com:hyemin12/prgms-notes.git
성공적으로 클론했고, 이를 젠킨스-manage jenkins - credentials - system 에 등록하였다.
pipeline script에 프로젝트의 프라이빗 레포지토리와 branch, credentialsId까지 입력해주고, build 버튼을 클릭했더니 다음과 같은 오류가 발생했다.
pipeline script
1
2
3
4
5
6
7
8
9
10
(...)
stages {
stage("Checkout") {
steps {
git url: "git@github.com:hyemin12/prgms-notes.git",
branch: "main",
credentialsId: [credentialsId]
}
}
}
오류메세지
1
2
3
4
5
6
7
8
9
10
11
Started by user Jenkins Admin
(...)
cloning repository git@github.com:hyemin12/prgms-notes.git
> git init /home/jenkins/agent/workspace/prgms-notes # timeout=10
Fetching upstream changes from git@github.com:hyemin12/prgms-notes.git
> git --version # timeout=10
> git --version # 'git version 2.39.2'
using GIT_SSH to set credentials [credentialsId] for user hyemin12
Verifying host key using known hosts file
You're using 'Known hosts file' strategy to verify ssh host keys, but your known_hosts file does not exist, please go to 'Manage Jenkins' -> 'Security' -> 'Git Host Key Verification Configuration' and configure host key verification.
> git fetch --tags --force --progress -- git@github.com:hyemin12/prgms-notes.git +refs/heads/*:refs/remotes/origin/* # timeout=10
오류 메세지를 보면,
Jenkins가 GitHub 리포지토리에 SSH로 접속하려고 시도중이고,
‘Known hosts file’ 전략을 사용하고 있지만, known_hosts이 존재하지 않아 발생하는 오류
라고 적혀있다.
로컬 호스트에는 known_hosts 파일이 존재하는데, 계속 같은 오류가 발생하였다.
'Manage Jenkins' -> 'Security' -> 'Git Host Key Verification Configuration'
이 부분을 보고 해당 섹션으로 이동해보니 다음과 같이 설명 되어 있었다.
Known hosts file (기본값)
- known_hosts 파일을 사용하여 모든 호스트 키를 확인합니다.
Accept first connection
- 호스트가 이전에 보지 못한 경우 자동으로 호스트 키를 known_hosts 파일에 추가하며, 수정된 키를 가진 이전에 본 호스트에 대한 연결을 허용하지 않습니다.
- 주의: 일시적인 에이전트 (예: 클라우드 에이전트)를 사용하는 경우, 이 전략은 사실상 확인이 없는 것과 동일합니다. 이를 피하려면 이미지 또는 템플릿을 생성할 때 관련 있는 모든 호스트로 known_hosts를 사전 구성하거나 수동으로 제공된 키 또는 Known hosts file 전략을 사용할 수 있습니다.
- 명령 줄 Git에서 이 옵션을 사용하려면 OpenSSH 버전 7.6 이상이 필요합니다.
Manually provided keys
- 여기에서 수동으로 구성된 일련의 키를 사용하여 모든 호스트 키를 확인합니다.
No verification (비권장)
- 전혀 호스트 키를 확인하지 않습니다.
Accept first connection을 선택한 다음, 다시 빌드를 해보니 다음 오류가 발생하였다.
1
2
3
4
5
6
7
8
9
10
11
12
Verifying host key using known hosts file, will automatically accept unseen keys
(...)
ERROR: Error cloning remote repo 'origin'
remotes/origin/*" returned status code 128:
stdout:
stderr: Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
Load key "/home/jenkins/agent/workspace/prgms-notes@tmp/jenkins-gitclient.key": error in libcrypto
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
오류 메세지를 살펴보면, SSH 연결을 시도할 때 오류가 발생했다는 의미이다.
/home/jenkins/agent/workspace/prgms-notes@tmp/jenkins-gitclient.key
파일을 확인하고 해당 파일이 존재하는지
, 키가 올바른지
확인하라는 메세지이다.
지금 프로젝트는 쿠버네티스 클러스터를 사용하여 젠킨슨을 실행하고 있기때문에, 로컬 컴퓨터에서는 해당 파일이 존재하는지 알 수가 없기 때문에 로그를 확인해보았다.
1
2
3
4
5
6
7
8
9
10
11
12
kubectl get evnets
4m41s Normal Scheduled pod/prgms-notes-25-wk8fm-q7x3t-595s5 Successfully assigned default/prgms-notes-25-wk8fm-q7x3t-595s5 to docker-desktop
4m41s Normal Pulling pod/prgms-notes-25-wk8fm-q7x3t-595s5 Pulling image "sheayun/jenkins-agent-node-18"
4m38s Normal Pulled pod/prgms-notes-25-wk8fm-q7x3t-595s5 Successfully pulled image "sheayun/jenkins-agent-node-18" in 2.529s (2.529s including waiting)
4m38s Normal Created pod/prgms-notes-25-wk8fm-q7x3t-595s5 Created container builder
4m38s Normal Started pod/prgms-notes-25-wk8fm-q7x3t-595s5 Started container builder
4m38s Normal Pulled pod/prgms-notes-25-wk8fm-q7x3t-595s5 Container image "jenkins/inbound-agent:3206.vb_15dcf73f6a_9-2" already present on machine
4m38s Normal Created pod/prgms-notes-25-wk8fm-q7x3t-595s5 Created container jnlp
4m38s Normal Started pod/prgms-notes-25-wk8fm-q7x3t-595s5 Started container jnlp
4m28s Normal Killing pod/prgms-notes-25-wk8fm-q7x3t-595s5 Stopping container builder
4m28s Normal Killing pod/prgms-notes-25-wk8fm-q7x3t-595s5 Stopping container jnlp
자세한 내역은 나와있지 않아 특정 포드의 로그를 확인하려고 했더니, stop되면서 killing, 즉 삭제되어 확인할 수가 없었다…
1
2
kubectl logs pod/prgms-notes-25-wk8fm-q7x3t-595s5
Error from server (NotFound): pods "prgms-notes-25-wk8fm-q7x3t-595s5" not found
그래서 'Manage Jenkins' -> 'Security' -> 'Git Host Key Verification Configuration'
옵션을 기본값인 Known hosts file
로 변경해주었다.
그리고 구글링을 해보니 ssh로 github 프로젝트를 받아오는 방법말고, github token을 사용하여 받아오는 방법이 있었다. 이 블로그 글을 보고 새롭게 github 계정을 등록해주니 github 프로젝트는 받아왔다…
이제 jest를 찾을 수 없다는 오류가 발생했다.. 이 오류를 해결해봐야겠다