Skip to content

Instantly share code, notes, and snippets.

@rsmartins78
Last active May 11, 2018 19:46
Show Gist options
  • Select an option

  • Save rsmartins78/1c626f7fa767a6804e1fe7aee35454e6 to your computer and use it in GitHub Desktop.

Select an option

Save rsmartins78/1c626f7fa767a6804e1fe7aee35454e6 to your computer and use it in GitHub Desktop.
Script for Gitlab in Docker backup. It collects de Container ID, make an Docker exec, and move the file created in origin to destiny choosed.
#!/bin/bash
#############################################################################
## Nome: Gitlab-Backup ##
## Função: SCRIPT PARA AUTOMAÇÃO DE BACKUP DE UM GITLAB SERVER EXECUTADO ##
## EM DOCKER. PODE SER UTILIZADO PARA USO EM CRONTAB, POIS COLETA A ID ##
## DO CONTAINER DE FORMA DINÂMICA ##
## Linguagem: Shell Script ##
## Criado por: RAFAEL MARTINS <rsmartins78@hotmail.com> ##
## ##
## OBRIGADO PELO APOIO ##
#############################################################################
function usage() {
echo "Script para backup do Gitlab em Container"
echo "Como usar:"
echo "$0 -t <local|externo> -o path/de/origem -d path/de/destino"
echo "-h exibe este menu"
echo "-r remove todos os arquivos da pasta de origem"
echo "USE A OPÇÃO -r COM CAUTELA, ELA APAGA TUDO DA ORIGEM DEFINIDA"
echo ""
echo "Exemplos:"
echo "$0 -t local -o /devops/gitlab/backup -d /backup/"
echo "$0 -t externo -o /devops/gitlab/backup -d root@10.10.10.10:/backup"
echo ""
echo "ATENÇÃO"
echo "CASO O PARAMETRO ESCOLHIDO PARA -t SEJA 'externo', FAVOR CRIAR ~/.ssh/config,"
echo "especificando endereço do host e path da chave."
echo "Mais informações em https://www.cyberciti.biz/faq/force-ssh-client-to-use-given-private-key-identity-file/"
}
function backup_local() {
echo "Realizando Backup"
docker exec -t ${CONTAINERID} bash -c 'gitlab-rake gitlab:backup:create'
echo "Copiando ao Destino ${DESTINO}"
rsync -azvh --progress ${ORIGEM} ${DESTINO}
}
function backup_externo() {
if [ ! -f ${HOME}/.ssh/config ]; then
echo "Para realizar o backup externo é necessário criar um arquivo ~/.ssh/config"
echo "Com os parametros de acesso SSH ao destino"
echo ""
usage
exit 2
fi
echo "Realizando Backup"
docker exec -t ${CONTAINERID} bash -c 'gitlab-rake gitlab:backup:create'
echo "Copiando ao Destino ${DESTINO}"
rsync -Cravzpte ssh --progress ${ORIGEM} ${DESTINO}
}
function limpa_origem() {
rm -rf ${ORIGEM}/*
}
function start() {
#Definindo opção de limpar origem = false
deleta=false
CONTAINERID=$(docker ps | grep -i gitlab-server | awk '{print $1'})
if [ -z $CONTAINERID ]; then
echo "ID do Container não identificada"
echo "Verifique se o mesmo existe ou está sendo executado"
exit 2
fi
echo ""
echo "Iniciando backup !!"
echo ""
echo "A ID do Container é ${CONTAINERID}"
echo "A Origem é: ${ORIGEM}"
echo "O Destino é: ${DESTINO}"
echo ""
#VERIFICA SE DESTINO CONTEM CARACTERE '@'
TDESTINO=$( echo $DESTINO | sed 's/@//g' )
#Verifica o target, e se as opções origem e destino foram setadas, em caso de externo, valida se contem um @.
if [ ${TARGET} = 'externo' ] && [ -n ${ORIGEM} ] && [ ${DESTINO} -eq ${TDESTINO} ]; then
echo "Escolhida a opção de backup externo (via SSH)"
#Executa função de backup externo caso verdadeiro.
backup_externo
#Caso seja escolhida opção -r, será executada função para limpar origem.
if [ $deleta = true ]; then
echo "Eliminando conteúdo da pasta de origem: ${ORIGEM}"
limpa_origem
fi
exit 0
elif [ ${TARGET} = 'local' ] && [ -n ${ORIGEM} ] && [ -n ${DESTINO} ] ; then
echo "Escolhida a opção de backup local"
#Executa função de backup local caso verdadeiro.
backup_local
#Caso seja escolhida opção -r, será executada função para limpar origem.
if [ $deleta = true ]; then
echo "Eliminando conteúdo da pasta de origem: ${ORIGEM}"
limpa_origem
fi
exit 0
else
#Caso as validações acima retornem falso, irá printar como usar.
echo "Target, Origem ou Destino Inválido !!"
echo ""
usage
exit 1
fi
}
#Abaixo é coletado os parâmetros solicitados, junto com seus respectivos argumentos.
while getopts :hrt:o:d: OPTION; do
case "${OPTION}" in
o)
# Gravando origem na variável.
ORIGEM="${OPTARG}"
;;
d)
# Gravando destino na variável.
DESTINO="${OPTARG}"
;;
r)
# Informando que a origem deverá ser limpa.
deleta=true
;;
t)
# Definindo target
TARGET="${OPTARG}"
;;
h)
# Exibindo menu de ajuda.
usage
exit 1
;;
*)
# No caso de opção inválida, é emitido alerta.
echo "Opção inválida !"
echo "Verifique como usar com -h"
exit 1
;;
esac
done
# Abaixo está sendo realizada uma validação se os parâmetros obrigatórios foram passado antes de iniciar aplicação.
if [ -z $TARGET ]; then
echo "Favor definir o target"
echo ""
usage
exit 1
elif [ -z $ORIGEM ]; then
echo "Favor definir a origem"
echo ""
usage
exit 1
elif [ -z $DESTINO ]; then
echo "Favor definir o destino"
echo ""
usage
exit 1
else
# Programa é iniciado
start
fi
## FIM DO CÓDIGO
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment