젠킨스 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
원인으로는 아래와 같다
- 네트워크 연결 문제:
- 젠킨스 서버가 인터넷에 연결되어 있는지 확인
- 방화벽 또는 프록시 설정으로 인해 GitHub 저장소에 접근할 수 없는 경우, 네트워크 구성을 확인하고 접근 제한 사항을 조정
- 잘못된 저장소 URL:
- GitHub 저장소의 URL이 올바르게 지정되었는지 확인
- 오타가 있는지 다시 한 번 확인
- 인증 오류:
- 비공개 저장소에 접근하는 경우, 젠킨스가 올바른 인증 정보를 가지고 있는지 확인
- GitHub API 토큰이나 사용자 인증 정보를 제공하여 저장소에 액세스할 수 있도록 젠킨스 구성을 업데이트
- 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편에서는 무중단 배포로 작성하는게 목표..
관련 글
반응형
'Develop > DevOps' 카테고리의 다른 글
newman 을 이용하여 node 서버 부하 테스트 및 pm2 클러스트 모드 사용 / 커넥션 풀 사용하여 부하 예방하기 🐝 (6) | 2024.11.12 |
---|---|
[모니터링] 프로메테우스 + 그라파나 모니터링 시스템 구축하기 (feat micrometer) (70) | 2024.02.14 |
아파치 카프카(APACHE Kafka) 그게 도대체 뭔데 😤 카프카 기본 개념에 대해 알아보자 (93) | 2023.11.17 |
자주 사용하는 linux 필수 명령어 모음 (2) | 2023.07.23 |