젠킨스로 배우는 CI/CD 파이프라인 구축 - SSH

2025. 8. 3. 20:29·Study/젠킨스로 배우는 CI,CD 파이프라인 구축
신규 사용자를 개인 깃랩 리포지터리에 Contributor로 추가하는 방법, 깃랩 리포지터리에 SSH인증을 설정하는 방법, 젠킨스에서 SSH인증 방식의 깃랩 리포지터리에 접속하는 방법, SCM을 폴링하고 자동으로 빌드를 시작하는 젠킨스 작업을 생성하는 방법등을 알아보자!

📂 비공개 깃랩 리포지터리에 Contributor 추가

  • 관리자는 갯랩을 사용하는 여러 팀원에게 각기 다른 역할을 부여할 수 있다. 그러므로 개발자가 깃랩 리포지터리에서 작업하려면 관리자가 개발자를 Contributor로 추가해야한다.

💊 코드 리포지터리에 팀원 초대 (관리자만 초대할 수 있으며, 초대받는 팀원은 유효한 깃랩계정 필요함)

1.깃랩 리포지터리의 관리자 자격으로 로그인

  • 코드 리포지터리에서 생성한 깃랩 사용자의 자격 증명으로 깃랩에 로그인한다.

https://gitlab.com/

 

The most-comprehensive AI-powered DevSecOps platform

From planning to production, bring teams together in one application. Ship secure code more efficiently to deliver value faster.

about.gitlab.com

2. 코드 리포지터리로 이동

  • 깃랩 대시보드에서 팀원 초대 작업을 할 코드 리포지터리(JenkinsBookCalculatorAPI)를 찾는다.

3. 깃랩 리포지터리 링크를 클릭하여 메인으로 이동

4. Project members 페이지로 이동 > Project Infomation > Members > Invite members

5. Invite members에서 신규 멤버 추가 

  • Username, name or email address : 깃랩 사용자 이름 입력 

6. 드롭다운에서 원하는 멤버 선택

7. Select a role에서 사용자에게 할당할 역할을 설정한다.

8. Invite 버튼을 클릭하면, 초대메일이 보내진다.

그러면 해당 멤버는 자신의 변경내역을 자바 API 코드 리포지터리에 반영할 수 있다.


📂 SSH 인증 이해 

  • 깃랩 코드 리포지터리 접속 시 사용할 수 있는 인증에는 기본인증, SSH 인증, API 키 등 다양한 방식을 사용할 수 있다. 
  • 공개 키와 개인 키를 사용해 사용자를 인증하는 SSH인증을 알아본다.

💊 SSH 인증 필요성

: 사용자 이름/비밀번호 방식의 기본 인증으로 깃랩 리포지터리에 개발자 인증을 한 경우에는 이를 사용하려면 모든 시스템에서 코드 리포지터리에 접속할 수 있다. 하지만 특정 컴퓨터에서만 접속할 수 있도록 제한하려면 깃랩 리포지터리에 SSH 인증을 적용하면 된다.

🖌️ 깃랩의 SSH 인증 동작 방식

1. 코드 리포지터리에 접속하려는 개발자는 자신의 컴퓨터에서 개인 키와 공개키를 생성해야 한다. 
그다음, 생성한 공개 키를 깃랩 코드 리포지터리에 관리자에게 전송한다.
2. 관리자는 수신한 공개 키를 접속 권한을 부여하고 싶은 리포지터리에 추가한다.
3. 개발자가 코드 리포지터리에 접속하면 컴퓨터에 저장된 개인 키가 깃랩으로 전송된다.
이때, 공캐 키와 개인 키가 일치하는 지 확인한다. 2개의 키가 일치하면 접속을 허용하고, 다르면 거부한다.

📂 자바 API 코드 리포지터리에 SSH 인증 적용 

1. 공개키와 개인키 생성

: 코드 리포지터지에 접속하는 시스템에서 공개 키와 개인 키 쌍으로 생성해야한다.

 

윈도우10이후 버전을 사용하는 경우 OpenSSH가 컴퓨터에 설치돼 있는 지 확인해야 한다. 이보다 과거 버전의 윈도우를 사용한다면 OpenSSH를 먼저 설치한다.

더보기

※ OpenSSH 설치 확인

설정 > 선택적 기능 > OpenSSH클라이언트가 없으면 기능 추가하여 설치한다.(필자는 설치가 되어 있는 상태)

OpenSSH 클라이언트가 설치되었다면 SSH 키 쌍을 생성할 준비가 된 것이다.

 

키쌍을 새성하려면 명령 프롬프트를 열고, ssh-keygen 명령어를 실행하면, 키 쌍을 생성할 파일의 경로를 묻는 메세지가 나타난다. 

아무것도 입력하지 않으면 기본 경로에 키쌍이 생성된다.

  • 기본경로 : $(user.home)\.ssh\id_rsa

기본 경로에 파일이 생겼으며, 첫번째 파일은 개인키고, 두번째 파일은 공개 키이다.

2. JenkinsBookCalculatorAPI 깃랩 리포지터리에 공개 키 추가

개발자는 앞에서 생성한 공개 키를 깃랩에 추가할 수 있도록 깃랩 리포지터리를 매니저에게 전송해야 한다.

SSH 키를 추가하려면 Preferences메뉴 > SSH Keys > id_ed25519.pub파일의 내용을 복사해서 넣는다.(title에는 키의 제목을 입력)

Add Key를 누르면 깃랩에 키를 추가하는 작업이 완료된 것이다.


📂 SSH를 이용한 리포지터리 접속과 함수 추가

이제 신규 개발자가 SSH 키로 리포지터리에 접속해서 JenkinsBookCalulatorAPI에 새로운 연산 함수를 추가해보자!

1. JenkinsBookCalulatorAPI 리포지터리 복제

신규 개발자는 해당 리포지터리가 처음이기 때문에 복제 작업을 수행해서 원격 리포지터리 전체를 자신의 컴퓨터로 가져와야 한다.

복제 작업은 소스 코드 파일뿐만 아니라 리포지터리 전체를 다운로드한다. 그러나 우선 리포지터리를 복제하기 전에 설정을 해야 한다.

앞에서 ssh-keygen 명령으로 SSH 키 쌍을 생성할때 키를 저장하는 파일 경로를 지정했었다.만약 개인 키가 기본 위치인 $(user.home)\.ssh에 있으면 git clone 명령을 바로 실행할 수 있다.

필자는 기본위치에 있으므로 따로 설정이 필요없지만, 기본위치가 아니라면 추가 설정이 필요하다.

git bash을 열어 해당 디렉토리에 이동하여 아래 명령어를 실행하여 config 파일을 추가한다.

touch config

기본위치에 config파일을 추가해서 아래 내용을 추가한다.

Host gitlab.com
    HostName gitlab.com
    User git
    IdentityFile ~/.ssh/id_ed25519
    IdentitiesOnly yes
  • 깃랩 리포지터리에 Clon with SSH 섹션에 URL을 복사한다.

  • C:\NewDeveloper라는 빈폴더를 생성 후 git clone을 실행한다.

  • 그러면 C:\NewDeveloper 폴더에 리포지터리가 복사되고, C:\Users\hyebi\.ssh (기본위치)에서 known_hosts파일이 추가된다.

이제 SSH 키쌍을 생성할 때 설정한 암호문을 입력하면 된다.

더보기

💡known_hosts를 삭제하고 다시 만드는 방법

1. bash창을 열고 기존 known_hosts파일 삭제 : rm ~/.ssh/known_hosts

2. gitlab 호스트 키 등록 : ssh-keyscan -t ed25519 gitlab.com >> ~/.ssh/known_hosts

SSH로 GitLab에 연결되는지 확인: ssh -T git@gitlab.com 

결과 : Welcome to GitLab, @yourusername!

2. Calculator 클래스에 Multiplication 함수 추가

이클립스를 사용해 앞에서 복제한 프로젝트 중 Calculator.java 파일에 Multiplication 함수를 추가하는 과정을 알아보자.

이클립스에 빈 워크스페이스 생성 후 복제된 메이븐 프로젝트를 가져올려고 하면 아래와 같이 진행한다.

  • 이클립스 실행 > New > Existing Maven Project > 복제된 프로젝트 경로를 추가 후 클릭

  • 프로젝트가 열리면 Calculator.java 파일에 소스를 추가한다.

3. Multiplication 함수의 테스트 케이스 추가 

  • src/test/java/에 위치한 TestMultiplicationFunctionality.java 파일과 소스를 추가한다.

4. pom.xml에서 버전 3.0으로 변경

새로운 Multiplication 함수를 추가한 CalculatorAPI.jar 버전 3.0을 릴리스할 예정이라고 가정해보자.

5. 단위 테스트 및 신규 기능의 회귀 테스트

mvn test 명령으로 전체 단위 테스트 케이스를 수행하는 과정을 진행해보자.

해당 작업은 새로 추가된 Multiplication 함수의 동작을 확인하고, 이전에 구현된 더하기 및 빼기 기능에 문제를 일으키지 않았는지 검증하는 작업이다.

명령 프롬프트를 열고 해당 프로젝트 디렉터리로 이동하고 mvn test명령을 실행하여 테스트가 통과되는지 확인한다.

6. 로컬 브랜치에 기능 변경 사항 커밋

브랜치를 생성 후 변경사항을 커밋한다.

git checkout -b "mutifunction"
git add .
git commit -m "Multiplication function is add"

7. 로컬 브랜치를 원격 리포지터리로 푸시

git push -u git@gitlab.com:pranodayb_test/jenkinsbookcalculatorapi.git mutifunction

참고로 SSH URL 방식으로 브랜치를 푸시하는 중이므로 비밀번호 요청이 나오면 앞에 설명한 SSH 키의 암호문을 입력한다.

깃랩 리포지터리 페이지로 새로 고침하면 병합할 준비가 된것을 볼 수 있다.

8. 새로 추가된 브랜치 병합 요청 


📂 이메일 알림 기능을 갖는 자동 실행 젠킨스 작업 생성

이제 신규버전을 넥서스 리포지터리로 자동으로 릴리스하는 프리스타일 작업을 생성해보자!

1. 프리스타일 작업 

  • 젠킨스로 이동하여 새로운 작업을 생성 후  SSH 자격증명을 생성한다. 

2. Credentials필드 > Add > Jenkins Credentials Provider: Jenkins 

SSH Username with private key를 선택 후 Private Key에 개인 키 파일에서 키를 복사한 후, 필드에 붙여넣는다. 

Passphrase에는 키의 암호문을 입력하는데 암호문을 설정했는지 기억이 안난다면 bash에 아래를 입력한다.

ssh-keygen -y -f ~/.ssh/id_ed25519


암호문이 설정되어 있다면 Passphrase 를 입력하라는 메시지가 나오고, 암호문이 없다면 바로 공개키가 출력된다.

자격증명까지 입력했는데 처음에 아래와 같은 에러가 나타났다!

에러 : No ED25519 host key is known for gitlab.com and you have requested strict checking. Host key verification failed.
> 이건 Jenkins의 Git 프로세스가 GitLab 서버의 SSH 호스트 키를 신뢰하지 않아서 발생하는 오류이다.
일반적으로는 ~/.ssh/known_hosts 파일에 서버의 호스트 키가 저장되어 있어야 하는데, Jenkins 실행 환경에서는 이게 없거나 형식이 다릅니다.

Jenkins에서 문제가 생겼다면, known_hosts는 Jenkins가 사용하는 계정의 홈 디렉토리 기준으로 생성되어야 합니다
: 보통 Windows라면 Jenkins 서비스가 C:\Windows\System32\config\systemprofile\.ssh 같은 위치를 사용할 수 있어요.

그럴 경우 관리자 권한 PowerShell에서 아래 실행했더니 에러가 발생하지 않았다.

mkdir C:\Windows\System32\config\systemprofile\.ssh
ssh-keyscan -t ed25519 gitlab.com >> C:\Windows\System32\config\systemprofile\.ssh\known_hosts

💊 Triggers 구성

배치 항목에 입력하여 젠킨스가 5ㅂ분마다 리포지터리의 마스터 브랜치의 변경사항을 확인하도록 한다.

변경사항을 감지하면 즉시 빌드가 시작된다.

💊Build Steps 구성

💊E-mail 알림 구성

: smtp.gmail.com이메일 알림을 구성하여, 빌드가 실패할 경우 이메일 알림을 받기 위해 불안정한 빌드마다 이메일 전송을 체크하고, 알림을 받으려는 이메일 주소를 입력한다.

📂 젠킨스에서 이메일 알림 설정

  • 이메일 알림 기능을 동작시키려면 작업뿐만이 아닌 추가 설정이 필요하다! 
  • 젠킨스 > 젠킨스 관리 > 시스템 > Jenkins Location >  System Admin e-mail address (시스템 관리자 이메일 주소)

💊E-mail 알림 구성

  • SMTP : smtp.gmail.com (지메일의 SMTP 서버를 사용하기때문에)
  • Use SMTP Authentication 체크하여 유효한 지메일 계정의 사용자 이름과 비밀번호를 입력하면해당 정보를 통해 지메일의 SMTP서버가 인증을 진행한다.

⚠️여기서 비밀번호는 이메일 계정의 비밀번호가 아니다. 아래처럼 진행한 비밀번호를 넣어야 한다!

더보기

✅ 구글 > 보안 > 2단계 보안 설정 >앱 비밀번호 생성 방법
1. 다음 링크로 이동:
👉 https://myaccount.google.com/apppasswords (2단계 인증이 활성화된 계정에서만 접근 가능)
2. 로그인 요청 시 로그인
3. 앱 비밀번호 생성:
- 앱 선택: 메일
- 기기 선택: 기타 (이름 직접 입력) → 예: Hybris SMTP
4. 노란색 박스에 나오는 16자리 비밀번호 복사
5. 이 비밀번호를 SMTP 설정 비밀번호 자리에 붙여넣기

이제 위에 설정한 구성으로 이메일 테스트 진행을 해보고 완료까지 해본다.

넥서스 서버가 켜졌는지 확인해보고, gitlab에 merge한 뒤 빌드가 5분뒤에 도는지 확인하고 성공여부를 본다.

빌드 실패시 메일이 오는지 확인도 했다.

 

'Study > 젠킨스로 배우는 CI,CD 파이프라인 구축' 카테고리의 다른 글

젠킨스로 배우는 CI/CD 파이프라인 구축 - 젠킨스 분산 빌드  (0) 2025.09.13
젠킨스로 배우는 CI/CD 파이프라인 구축 - 파이프라인  (3) 2025.08.03
젠킨스로 배우는 CI/CD 파이프라인 구축 - 넥서스 설치 및 적용  (3) 2025.07.06
젠킨스로 배우는 CI/CD 파이프라인 구축 - 깃과 깃랩  (0) 2025.07.06
젠킨스로 배우는 CI/CD 파이프라인 구축 - 메이븐으로 프로젝트 준비  (0) 2025.07.06
'Study/젠킨스로 배우는 CI,CD 파이프라인 구축' 카테고리의 다른 글
  • 젠킨스로 배우는 CI/CD 파이프라인 구축 - 젠킨스 분산 빌드
  • 젠킨스로 배우는 CI/CD 파이프라인 구축 - 파이프라인
  • 젠킨스로 배우는 CI/CD 파이프라인 구축 - 넥서스 설치 및 적용
  • 젠킨스로 배우는 CI/CD 파이프라인 구축 - 깃과 깃랩
happy_dev
happy_dev
복사하고 붙여넣기 잘하고 싶어요
  • happy_dev
    happy의 개발일지
    happy_dev
  • 전체
    오늘
    어제
    • 전체 (43)
      • Java (0)
      • React (1)
      • DB (1)
      • Study (41)
        • 친절한 SQL 튜닝 (9)
        • 모던 리액트 Deep Dive (18)
        • 젠킨스로 배우는 CI,CD 파이프라인 구축 (14)
        • Studyd (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    리액트
    oracle
    DB
    Jenkins
    젠킨스
    SQL
    toad
    인덱스의기본
    조인
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
happy_dev
젠킨스로 배우는 CI/CD 파이프라인 구축 - SSH
상단으로

티스토리툴바