Post

젠킨스 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를 찾을 수 없다는 오류가 발생했다.. 이 오류를 해결해봐야겠다

This post is licensed under CC BY 4.0 by the author.