github & Jenkins CI/CD 자동 빌드 배포 환경 구성하기 - 1

2023. 6. 14. 17:46·Develop/DevOps
반응형

젠킨스 CI / CD 환경을 여러번 구성하였지만

할 때마다 환경도 달라지고 프로젝트 구성도 달라지면서 가물가물..

이번엔 기록하면서 머리에 넣어야겠다.. 😵

 

 

일단 나는 NHN클라우드 - 인스턴스 - 리눅스(centos 7) 환경에서 작업하고 있다.

생략 하고 바로 젠킨스 설정을 살펴보자 😛

 

 

 

종종 이렇게 git 저장소와 연결 설정 할 경우 

자주 나올 수 있는 오류로는

Failed to connect to repository : Error performing command: git.exe ls-remote -h https://github.com/DongJu-Na/Nadry.git HEAD

 

원인으로는 아래와 같다

 

  1. 네트워크 연결 문제:
    • 젠킨스 서버가 인터넷에 연결되어 있는지 확인
    • 방화벽 또는 프록시 설정으로 인해 GitHub 저장소에 접근할 수 없는 경우, 네트워크 구성을 확인하고 접근 제한 사항을 조정
  2. 잘못된 저장소 URL:
    • GitHub 저장소의 URL이 올바르게 지정되었는지 확인
    • 오타가 있는지 다시 한 번 확인
  3. 인증 오류:
    • 비공개 저장소에 접근하는 경우, 젠킨스가 올바른 인증 정보를 가지고 있는지 확인
    • GitHub API 토큰이나 사용자 인증 정보를 제공하여 저장소에 액세스할 수 있도록 젠킨스 구성을 업데이트
  4. Git 설치 문제:
    • 젠킨스 서버에 Git이 정상적으로 설치되었는지 확인
    • 실행할 수 있는 권한이 있는지 확인
    • 필요에 따라 Git을 업데이트하거나 권한을 조정

대부분 3,4 에 해당하니 확인하고 설정을 수정하면 해결된다 😤

 

 

나는 한 저장소에 프론트엔드와 백엔드를 묶어서 구성해놓았기에

젠킨스 스크립트(Execute shell)를 이용하여 웹훅 -> 빌드 - > 배포 환경을 구성하였다.

# 변경된 파일 목록 확인
#!/bin/bash
changed_files=$(git diff --name-only HEAD^ HEAD)
echo changed_files
# 프론트엔드 소스 변경 시
if [[ $changed_files == *"client"* ]]; then
    # 프론트엔드 빌드 및 배포 작업
    cd /var/lib/jenkins/workspace/Nadry/client/
    # 프론트엔드 빌드 스크립트 실행 예시
    npm install
    npm run build
    # 프론트엔드 배포 스크립트 실행 예시
    rsync -avz ./build/ user@example.com:/var/www/frontend

# 백엔드 소스 변경 시
else
	java -version
    # 백엔드 빌드 및 배포 작업
    # 예시: 서버 재시작 등의 작업을 포함할 수 있습니다.
    cd /var/lib/jenkins/workspace/Nadry/
    chmod +x gradlew
    ./gradlew clean build
    
    # 백엔드 Jar 파일 실행
    jar_path="/var/lib/jenkins/workspace/Nadry/build/libs/ndj-0.0.1-SNAPSHOT.jar"
    process_id=$(lsof -ti :8082 || true)  # 8082 포트에 실행 중인 프로세스 ID 조회

    # 실행 중인 프로세스 종료
    if [[ ! -z $process_id ]]; then
        echo "Terminating existing process with PID: $process_id"
        kill -9 $process_id
    else
        echo "No process is running on port 8082."
    fi
    
    # Jar 파일 실행 (nohup으로 백그라운드 실행)
    sudo nohup java -jar $jar_path > /dev/null 2>&1 &
    
    echo "Backend application started."
fi

만일 Execute shell에서 lsof와 nohup이 동작하지 않는다면

젠킨스 서버 사용자(jenkins)에 권한이 있는지 확인

 

없다면 sudo visudo 를 이용하여 jenkins ALL=(ALL) NOPASSWD: /usr/sbin/lsof 

jenkins ALL=(ALL) NOPASSWD: /usr/bin/nohup

추가하도록 하자

 

 

 

완성된 CI & CD 아키텍처

 

2편에서는 무중단 배포로 작성하는게 목표..

 

관련 글

https://stackoverflow.com/questions/35863528/failed-to-connect-to-repository-error-performing-command-git-exe-ls-remote-h

 

Failed to connect to repository : Error performing command: git.exe ls-remote -h https://github.com/szabbas/Sample-programs.git

I am new to programming and trying to work with GIT repository and while configuring with the JENKINS is facing the error. I know it's a silly question but on a beginner point of view I am stuck an...

stackoverflow.com

 

반응형
저작자표시 비영리 (새창열림)

'Develop > DevOps' 카테고리의 다른 글

[nssm] 윈도우(window)에서 JAR 파일 서비스로 등록하기 🤡🍯🐝  (12) 2025.04.24
newman 을 이용하여 node 서버 부하 테스트 및 pm2 클러스트 모드 사용 / 커넥션 풀 사용하여 부하 예방하기 🐝  (6) 2024.11.12
[모니터링] 프로메테우스 + 그라파나 모니터링 시스템 구축하기 (feat micrometer)  (70) 2024.02.14
아파치 카프카(APACHE Kafka) 그게 도대체 뭔데 😤 카프카 기본 개념에 대해 알아보자  (93) 2023.11.17
자주 사용하는 linux 필수 명령어 모음  (2) 2023.07.23
'Develop/DevOps' 카테고리의 다른 글
  • newman 을 이용하여 node 서버 부하 테스트 및 pm2 클러스트 모드 사용 / 커넥션 풀 사용하여 부하 예방하기 🐝
  • [모니터링] 프로메테우스 + 그라파나 모니터링 시스템 구축하기 (feat micrometer)
  • 아파치 카프카(APACHE Kafka) 그게 도대체 뭔데 😤 카프카 기본 개념에 대해 알아보자
  • 자주 사용하는 linux 필수 명령어 모음
    반응형
  • 개발자는어디까지공부해야할까?
  • 전체
    오늘
    어제
    • 분류 전체보기 (53)
      • 인디해커 (1)
      • Develop (42)
        • Front-End (7)
        • Back-End (17)
        • Spring (1)
        • Tool (1)
        • DATABASE (1)
        • DevOps (7)
        • CS (3)
        • Trouble Shooting (5)
      • 다이소 (1)
        • 코딩테스트문제풀이 (1)
      • 변소 (9)
  • 블로그 메뉴

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

    • 깃허브(Github)
    • 개발 Feed
  • 공지사항

  • 인기 글

  • 태그

    개발자
    op.gg
    Recoil
    backend
    fow.kr
    github
    thymeleaf
    백엔드
    스프링부트
    JavaScript
    Oracle
    백엔드 개발자 면접 단골 질문 뿌시기
    자바
    롤
    node
    spring
    mybatis
    타임리프 사용방법
    spring boot
    react-router-dom
    리그오브레전드
    jdk
    @Scheduled
    SpringBoot
    React
    셀레니움
    개발자 면접
    리액트
    Java
    lol
  • 최근 댓글

  • 최근 글

  • 07-14 01:06
  • hELLO· Designed By정상우.v4.10.3
github & Jenkins CI/CD 자동 빌드 배포 환경 구성하기 - 1
상단으로

티스토리툴바