본문 바로가기

Develop/DevOps

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

젠킨스 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

 

반응형