TOPIC/DevOps

Jenkins - GitHub Private하게 연결하기 (1)

H-Y-E-N 2024. 4. 10. 12:47

안녕하세요. HYEN입니다.

 

오늘은 지난 글 (Windows에 Jenkins 설치하기)에 이어 Jenkins와 GitHub를 Private하게 연결하고 Build Pipeline을 구성하는 과정을 알아보도록 하겠습니다. 

 

Windows에 Jenkins 설치하기

안녕하세요. HYEN입니다. 오늘은 Windows에 Jenkins를 설치하는 방법에 대해 알아보겠습니다. 문득 Jenkins는 Linux에만 설치를 해봤다는 생각이 들어서 이번 글을 적게 되었습니다. 이번 글에서는 Jenkins

with-cloud.tistory.com

 

  1. Windows는 어떤 디렉토리를 초기 working directory로 바라보는지
  2. private ip만 붙어 있는 가상 머신의 경우 어떻게 GitHub와 통신하는지

이 두 가지 궁금함으로 이번 테스트를 시작하게 되었는데요. 

이렇게 오래 걸릴 테스트가 아니었음에도 불구하고 Jenkinsfile을 무한 루프 돌게 만들어 버리는 바람에 시간이 다소 걸렸습니다. 🤬


Contents

     

    1. Spoke 가상 머신에 Git 설치하기

    가장 먼저 Spoke 가상 머신에 Git을 설치해 줍니다. 

    그렇지 않으면 아래에서 설명할 에러가 발생할 수 있습니다.

     

    https://git-scm.com/download/win로 이동하여 Windows용 Git을 다운로드 합니다.

    (default 값을 사용하여 설치를 진행하면 됩니다.)

     

    Git - Downloading Package

    Download for Windows Click here to download the latest (2.44.0) 32-bit version of Git for Windows. This is the most recent maintained build. It was released about 2 months ago, on 2024-02-23. Other Git for Windows downloads Standalone Installer 32-bit Git

    git-scm.com

     

    2. Jenkins Pipeline 생성

    2.1 Jenkins Pipeline 생성 - 첫 번째 Pipeline

    먼저 테스트용 Jenkins Pipeline을 생성합니다. 

     

    이번 테스트에서 Build Pipeline은 두 개를 생성할 예정입니다. 

    (원하는 결과값을 내기 위해서는 두 개로 Pipeline을 분리하는 게 최선이었는데 혹시 좋은 팁 있으면 알려주시면 감사하겠습니다.)

     

    첫 번째 파이프라인은 두 번째 파이프라인의 트리거 용으로 사용합니다.

    Build가 잘 되는지만 확인하기 위해서는 이렇게 구성할 필요가 없으나 BUILD_NUMBER라는 Jenkins의 built-in 변수를 사용해 보고자 두 개의 Pipeline으로 구성하였습니다.

     

    • Jenkins 관리 페이지에서 좌측 상단의 [+ New Item]을 클릭합니다.

     

    • Project 이름을 입력하고 Project 타입은 [Pipeline]을 선택합니다.

     

    • Configure의 General 탭에서 Build Triggers 옵션 중 "GitHub hook trigger for GITScm polling"을 선택합니다.

     

    다음 step으로 넘어가기 전 GitHub hook trigger for GITScm polling 옵션이 무엇인지 알아보도록 하겠습니다. 

     

    GitHub hook trigger for GITScm polling이란?

    GitHub는 이벤트가 발생할 때 webhook을 트리거합니다.
    webhook은 이벤트 발생시 지정된 URL로 HTTP POST 요청을 보내는 기능을 말합니다.
    Jenkins는 이러한 webhook을 통해 GitHub의 변경 사항을 감지합니다.
    Jenkins는 변경 사항이 없어도 주기적으로 저장소를 확인하고 변경 사항이 있는지 여부를 확인하게 되는데 이때 GITScm polling을 사용하게 됩니다.
    이것이 바로 변경 사항이 발생하지 않아도 Jenkins가 build를 트리거할 수 있는 이유입니다.

     

    • Configure의 Pipeline 탭에서 Definition을 “Pipeline script from SCM”으로 변경합니다.
      그 후, SCM에 대해 “Git”을 선택합니다.

     

    • Repository에 GitHub의 URL 주소를 입력합니다. (본 테스트의 경우 기존에 작성해 둔 Terraform 코드와 관련된 Repository를 사용합니다.) 
      • GitHub로 이동해 [< > Code] 버튼을 클릭하여 HTTPS 형식의 GitHub URL 주소를 복사해 옵니다.

     

     

    • 마지막으로 Configure의 Pipeline 탭에서 Script Path를 확인합니다.
      GitHub Repository 내 Jenkinsfile의 위치를 확인합니다. GitHub Repository의 가장 상단에 Jenkinsfile이 존재할 경우 default 경로를 변경할 필요는 없습니다.

     

    • Project 설정이 완료되었으면 [Save] 버튼을 클릭하여 변경 사항을 저장합니다.

     

    2.2 Jenkins Pipeline 생성 - 두 번째 Pipeline

    • Project 이름을 입력하고 Project 타입은 [Pipeline]을 선택합니다. 

     

    • 첫 번째 Pipeline에 의해 트리거 되어야 하기 때문에 다른 설정은 하지 않고 Pipeline 부분만 설정을 진행해 줍니다.
      Repository URL은 결과값이 저장될 GitHub 레포지토리를 지정해 줍니다. (Credentials의 경우 이전에 설정한 것을 사용해도 무방합니다.)

     

    2.3 Jenkinsfile 구성 확인 

    • 첫 번째 Jenkins Pipeline의 Jenkinsfile은 하기와 같습니다.
      • test라는 이름의 GitHub 레포지토리를 clone해 오는 stage와 두 번째 Pipeline을 트리거하는 stage로 이루어져 있습니다.
      • BUILD_NUMBER라는 built-in 변수를 parameters를 사용하여 두 번째 Pipeline에 전달하게 됩니다.

     

    • 두 번째 Jenkins Pipeline의 Jenkinsfile은 하기와 같습니다.
      • environment block에서 첫 번째 Pipeline의 Build 번호를 FIRST_PIPELINE_BUILD_NUMBER라는 변수에 저장합니다.
      • Build stage에서 README.md 파일에 현재 Pipeline의 Build 번호를 추가하고 Commit and Push stage에서 이를 result라는 이름의 GitHub 레포지토리에 push합니다.

     

    2.4 Jenkinsfile 구성 확인 

    앞서 말씀 드렸듯이, Pipeline 구성 시 Pipeline 탭의 Repository URL 입력 부분에서 하기와 같은 이슈가 발생할 수 있습니다.

    Failed to connect to repository : Error performing git command: git.exe ls-remote -h https://github.com/{계정 이름}/test.git HEAD

     

    이와 같은 에러가 발생하는 이유는 서버에 Git이 설치 되어 있지 않기 때문에 발생하는 문제이므로 1번 과정과 같이 Git을 서버에 설치한 후 Jenkins를 다시 시작해 주면 됩니다.

     

    Jenkins를 다시 시작하는 방법은 아래와 같습니다. (Windows 기준) 

    • 윈도우 로고 키를 마우스 우클릭한 후 Task Manager를 클릭합니다. 

     

    • Services 탭으로 이동하여 Jenkins를 검색합니다.

     

    • Jenkins Service를 마우스 우클릭한 후 [Restart]를 눌러 Jenkins를 다시 실행합니다.

     


    이렇게 Pipeline을 생성하는 부분까지 알아보았는데요. 

    다음 글에서는 GitHub Webhook Trigger를 생성하고 Jenkins Pipeline을 실행하는 과정에 대해 다뤄보겠습니다. 🐳

     

    728x90
    320x100
    SMALL