Last active
May 11, 2018 19:46
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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