Стояла задача по архивации файлов, которые были изменены после релиза на проекте. То есть при выполнении git pull origin master средствами gitlab-ранера нужен был архив с файлами, которые были изменены. Реализация простая средствами git и bash:
#!/bin/bash
# Получение полного хеша текущего комита
commit1=`git log --pretty=format:"%H" | head -n 1`
# Выкатка релиза
cd /data/project && git pull origin master
# Получение нового полного хеша текущего комита
commit2=`git log --pretty=format:"%H" | head -n 1`
# Просмотр разницы в виде списка файлов между двумя комитами
files=`git diff --name-only $commit1 $commit2`
# Создание временной директории для хранения измененных файлов
if [ ! -d /data/project/release-files/tmp ] ;
then mkdir -p /data/project/release-files/tmp
fi
tmp="/data/project/release-files/tmp"
# Имя будущего архива
curdate=/data/project/release-files/`date +%Y-%m-%d_%H-%M-%S`.tar
# Вывод списка файлов и копирование во временную директорию
for line in $files
do
cp $line $tmp/`basename $line`
done
# Создание архива и удаление временных файлов
cd $tmp
tar cf $curdate ./ && rm -rf $tmp
В результате после того, как разработчики выполняют commit & push, ранер на сервере выполняет вышеописанный скрипт.