jenkins 에서 git, scp 를 이용한 파일 배포

jenkins 를 이용해 github webhook 을 이용해 배포를 자동화하는 것을 지난 번에 테스트했다. 이번엔 배포 스크립트에 기능을 좀 더 추가하여 git 을 이용해 수정된 파일의 목록을 구하고 이 파일들만 서버에 배포하는 스크립트를 테스트해본다. 일반적으로 전체 파일을 scp나 rsync 를 이용해 배포하게 되는데 파일이 많을 경우 배포에 시간이 오래 걸릴 수 있기 때문에 수정된 파일만 목록을 구해서 각 서버로 배포하는 게 좋다는 생각에 테스트했다. 아래는 scp 를 이용한 서버 배포 쉘 스크립트이다.

#!/bin/bash

cd /var/lib/jenkins/jenkins-test

git pull

SOURCE=/var/lib/jenkins/jenkins-test/
TARGET=/tmp/jenkins/
USER="root"
FILES=$(git diff --name-only HEAD^)

while IFS='' read -r server || [[ -n "$server" ]]; do
    case $server in
        ''|\#*) continue ;;
    esac

    for f in $FILES; do
        if [ -f "$f" ]; then
            scp -o StrictHostKeyChecking=no $f $USER@$server:$TARGET$f
        else
            ssh -n -o StrictHostKeyChecking=no $USER@$server -C rm -f $TARGET$f
        fi
    done
done < /var/lib/jenkins/servers.dat

각 서버의 ip는 servers.dat 파일에 지정되어 있고 아래와 같은 형태이다.

192.168.50.94
192.168.50.95

servers.dat 파일을 쉘 스크립트에서 읽어들인 후 각 서버로 수정된 파일을 scp 를 이용해 배포하게 된다. scp 를 이용하기 위해서는 각 서버에 jenkins 서버의 ssh 키가 미리 등록되어 있어야 한다.

편리

PHP와 MariaDB, jQuery 등을 사용해 게시판, 쇼핑몰 솔루션을 개발합니다. 그누보드5와 영카트5 개발에 참여 했습니다. Linux와 Nginx는 물론 WordPress, Git 등에도 관심이 많습니다. 자전거 타기 및 사진 촬영을 취미로 하고 있습니다.

카카오톡 플러스친구 채팅 : NCUBE.NET

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.