기록하는 개발자

Jenkins SVN 커밋시 자동배포 본문

서버/Linux

Jenkins SVN 커밋시 자동배포

gitseok 2024. 6. 19. 20:32

SVN 커밋 발생시 Hooks(post-commit)를 활용하여 commit 기록을 Jenkins에 전송해주고

Jenkins에 주기적으로 확인하도록 설정 후 commit 기록을 발견할시 자동 빌드 및 배포 하도록 세팅하였습니다.


SVN Hooks 설정

Hooks란? 특정 이벤트가 발생할때 자동으로 실행되는 정의 스크립트

post-commit 스크립트 추가

post-commit란? 커밋이 완료한 자동으로 실행됨

cd /[svn경로]/[repository]/hooks/
vi post-commit

post-commit 내용 수정

#!/bin/bash
REPOS="$1"
REV="$2"
UUID=$(svnlook uuid $REPOS)
CHANGED_PATHS=$(svnlook changed --revision $REV $REPOS)

# 변경된 경로에 '[기준경로]/[프로젝트명]'가 포함된 경우에만 Jenkins에 알림
if echo "$CHANGED_PATHS" | grep -q "[기준경로]/[프로젝트명]"; then
    JENKINS_URL="http://0.0.0.0:8080/jenkins" 
    CRUMB=$(wget -q --output-document - "$JENKINS_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,\":\",//crumb)")

    /usr/bin/wget \
        --header "Content-Type:text/plain;charset=UTF-8" \
        --header "$CRUMB" \
        --post-data "$CHANGED_PATHS" \
        --output-document "-" \
        --timeout=2 \
        "$JENKINS_URL/subversion/$UUID/notifyCommit?rev=$REV"
fi

commit 범위 지정

if echo "$CHANGED_PATHS" | grep -q "[기준경로]/[프로젝트명]"; then

 

 

 

한개의 리포지터리에 여러 버전의 프로젝트가 세팅되어 있어서

grep -q로 커밋된 파일의 전체 경로중에 "[기준경로]/[프로젝트명]"가 포함되어 있는지 확인하는 부분이 추가되어 있습니다.

jenkins URL 지정

JENKINS_URL="<http://0.0.0.0:8080/jenkins>"

저장

:wq

실행 권한 부여

chmod +x post-commit

Jenkins 설정

Jenkins 관리 페이지 → 프로젝트 → 구성

빌드 유발

Poll SCM

H/5 * * * * 입력 후 저장

* 5분마다 SVN 이 보낸 변경사항을 확인

참고자료

 

Subversion

This plugin adds <a href="https://subversion.apache.org/" target="_blank" rel="nofollow noopener noreferrer">Apache Subversion</a> support (via SVNKit) to Jenkins.

plugins.jenkins.io

 

Comments