ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • windows + Jenkins + Bonobo git server+ slack
    개발 이야기/인프라 구축 및 운영 2021. 3. 23. 17:14
    반응형

    github나 gitlab 으로 CI/CD를 구축하는건 다들 큰 문제는 없으실 겁니다. 

     

    이번에 windows에 jenkins, bonobo git으로 자체 git 서버를 구축해서 사용하여 CI/CD 구축하려니 걸림돌이 여럿 있어 정리해 보았습니다. 

     

    더보기

    아래 내용은 windows 10 / Jenkins(2.277.1) / Bonobo Git Server (6.5.0) / git (2.31.0) 를 사용해 진행했습니다.

    이 글에 포함된 예제의 목표 시나리오는 다음과 같습니다.

     

    1) 개발자가 'master'라고 명명한 브랜치에 push를 하면 최신 코드를 받아 ssh를 통해 서비스 노드로 전송

    2) 마지막 commit message를 환경변수에 임시 저장

    3) slack의 지정한 채널로 저장한 메세지를 전송

     

    * 샘플 프로젝트를 포함하지 않아, 별도 빌드 과정은 생략합니다.

     

    순서는 다음과 같습니다. 

     

    1. git 저장소 만들기

    2. jenkins에 프로젝트 생성 및 구성

    3. slack 채널 연결

    4. 빌드 테스트 및 마무리

     

     

    1. git 저장소 만들기

    설치한 Bonobo git server로 접속해 저장소를 생성합니다.

    저장소를 생성하면 저장소 리스트 화면에서 목록을 확인할 수 있으며, 이후 저장소 주소는 화면 우측의 주소 복사 아이콘을 이용해 쉽게 복사할 수 있습니다.

     

    2. jenkins에 프로젝트 생성 및 구성

    프로젝트를 생성하기 전에 필요한 Plugin을 우선 설치합니다.  

     

    'Jenkins 관리' 메뉴를 선택 후 '플러그인 관리' 화면으로 들어갑니다.

    '설치 가능' 탭에서 화면 상단 filter에 아래 이름을 검색 후 설치하세요. 이미 설치된 플러그인은 '설치된 플러그인 목록' 탭에서 확인 가능합니다.

    더보기

    설치할 필수 Plugin List

    Credentials Plugin
    Publish Over SSH

    SCM API Plugin
    Slack Notification Plugin
    Environment Injector Plugin
    Git client plugin

    이제 Dashboard 화면에서 '새로운 Item' 메뉴를 선택합니다.

    프로젝트 명을 입력 후 'Freestyle project'를 선택합니다.

    [General]

    필수 입력 사항은 없습니다.

     

    [소스 코드 관리]

    Git을 선택한 후 Repository URL에 git 주소를 입력하세요. (저장소 리스트에서 뒤쪽 아이콘을 클릭하시면 복사할 수 있습니다.)

    그리고 git 연결을 위한 Credentials을 추가합니다.

    'Add' -> 'Jenkins'를 선택하면 아래와 같은 화면이 출력됩니다.

    이 예제에서는 git에 id/pw를 이용해 접속하도록 합니다. Kind를 'Username with password'를 선택 후 아래 Username과 Password에 git에서 사용하는 값을 입력합니다.

     

    Credentials에서는 어떤 저장소에 대한 계정인지를 관리하는 것은 아니고 인증을 위한 값만을 저장하고 있으며, 프로젝트 구성화면에서 추가된 인증서를 선택해 설정을 완료하게 됩니다. 

     

    추가했다면 프로젝트 구성 화면에서 선택하면 됩니다.

     

    'Branches to build'에서는 어떤 bransh 소스를 가져올 것인지를 결정할 수 있습니다. 여기서는 기본값인 '*/master'로 설정합니다.

     

    [빌드 유발/ 빌드 환경]

     

    Poll SCM을 선택 후 Schedule에 "H * * * *"(한 시간에 한번) 을 설정합니다.

     

    "C:\inetpub\wwwroot\git\App_Data\Repositories\[project name]\hooks 에 post-receive 라는 파일을 만들고 아래 내용을 입력합니다.  

    curl http://[jenkins_address]/git/notifyCommit?url=http://[git_id]@[git_address]/git/[repo_name].git

    * curl이 설치되어 있어야 합니다.

     

    이후 한 시간 간격으로 git에서 최신 업데이트가 있는지 확인 후 업데이트 사항이 있을 때만 배포를 자동으로 진행하게 됩니다.

     

    프로젝트 화면 좌측 메뉴에서 "Git Polling Log"를 통해 로그를 확인할 수 있습니다.

     

    [Build]

     

    샘플이라 빌드할 건 없지만, 이 과정에서 마지막으로 commit된 메세지를 가져와 slack으로 보내기 위해 "LAST_COMMIT_MESSAGE"라는 이름의 환경변수에 잠시 저장하는 과정을 추가합니다. 

     

    1. "Add build step"에서 "Execute Shell" 선택합니다. 그리고 Command에 아래와 같은 스크립트를 추가합니다. 

    echo LAST_COMMIT_MESSAGE=\""$(git log --format="medium" -1 ${GIT_COMMIT})"\" | sed -E 's/$/\\n/g' | tr -d '\n' | sed 's/..$//' > last_commit_message

    2. "Add build step"에서 "Inject environment variables"를 선택하여 "Properties File Path" 에 "last_commit_message"를 입력합니다.

     

    * windows 환경에서 shell script를 실행을 위해 "Jenkins 관리" -> "환경설정" -> "Shell"에 아래 이미지처럼 bash 경로를 입력합니다.

     

    [빌드 후 조치]

     

    "빌드 후 조치"에서는 배포와 빌드 결과를 slack에 전달하는 과정을 설정합니다. 

     

    우선 ssh 서버를 등록해야 합니다.

     

    "Jenkins 관리" -> "환경설정" -> "Publish over SSH" 에서 배포할 서버를 설정합니다.

    설정 후 "Test Configuration" 버튼으로 잘 연결되는지 확인을 해보시기 바랍니다.

     

    다시 프로젝트 구성으로 돌아와 "빌드 후 조치"에서 "Send build artifacts over SSH"를 선택합니다.

    그리고 SSH Server 의 Name에서 추가한 ssh 서버 정보를 선택 합니다. 그리고 Transfers 항목에서 Source files 에 **(프로젝트에 포함된 파일 및 폴더 모두 선택)를 입력합니다. 

     

    3. slack 채널 연결

    우선 slack에서 jenkins CI를 위한 app을 설치합니다. 'Add apps'에서 'jenkins'를 입력하고, 해당 앱을 클릭합니다.

    'Add to Slack' 버튼을 클릭 후 jenkins에서 메세지를 전달받을 채널을 선택합니다.

    등록 후 Jenkins 등록 가이드가 나오는데 Step 3에서 "Team Subdomain"은 추후 Jenkins 설정 중 workdspace에, "Integration Token Credential ID" 값은 Credential의 Secret Text에 등록해야 합니다. 

     

    Jenkins 프로젝트 구성 화면으로 다시 돌아와 '빌드 후 조치 추가'에서 'Slack Notifications'을 선택합니다.

    Slack에는 빌드가 성공했을때만 보내보도록 하겠습니다.

    "Notify Success"를 선택 후 "Include Custom Message"를 클릭해서 아래와 같이 정보를 입력합니다.

    그리고 해당 메세지를 전달할 채널을 "Upload build artifacts"에 설정합니다. Workspace에는 위에서 확인했던 "Team Subdomain"의 값을 입력하고 Slack을 위한 Credential을 추가합니다.

     

    "Kind"에 "Secret text"를 선택 후 "Secret"에는 위 "Integration Token Credential ID" 값을 입력하고 추가합니다.

     

    "Username"에는 "jenkins"를 입력하고 "Channel/member id"에는 메세지를 전달할 채널명을 입력합니다. 

     

    이로서 모든 설정은 마무리 되었습니다. 저장 후 다음으로 넘어갑니다.

     

    4. 빌드 테스트 및 마무리

    빌드 해당 프로젝트 화면에서 "Build now"를 눌러 새롭게 commit된 내용의 mesage가 전달되었다면 잘 마무리 된 것입니다. 

     

    그리고 Git Polling Log를 통해 자동으로 변경된 내용들이 잘 배포되는지 확인도 해보시기 바랍니다.

     

    배포될 서버에 대한 ssh 설정, shell 실행을 위한 bash 파일 위치 설정, ssh 및 slack에 대한 인증 설정, bonobo git server에 대한 polling 작업에 대한 과정 정리가 필요해서 정리해 봤는데, 다른 분들에게도 도움이 되었으면 합니다. 

     

     

     

    반응형

    댓글 0

Designed by Tistory.