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 키가 미리 등록되어 있어야 한다.