Script da Rotina do Nosso Ambiente Docker
A automação de rotinas de infraestrutura e controle de versão é um divisor de águas na rotina do time de desenvolvimento. O uso de um script Shell interativo simplifica operações diárias relacionadas ao Docker e ao Git, trazendo padronização, agilidade e redução de erros operacionais. A substituição de sequências de comandos no terminal por uma interface por menu simplifica as tarefas diárias da equipe. O processo de versionamento é padronizado e a dependência da memorização de sintaxes complexas
--------------------------------------------------
MENU GIT (Branch Atual: [HOM])
--------------------------------------------------
1 - TRANSFER REPOSITORY
2 - CHANGE HOMOLOGACAO/PRODUCAO
3 - SYSTEM STATUS
4 - GIT PULL
0 - EXIT SYSTEM
--------------------------------------------------
Escolha uma opção:
Script para rodar no Linux
#!/bin/bash
cd ~/Documentos/Docker/docker-s0179-system-dba/
# Criamos um loop infinito que só para quando o comando 'break' for acionado
while true; do
# Verifica se a pasta atual é um repositório Git e pega o nome da branch
if git rev-parse --is-inside-work-tree > /dev/null 2>&1; then
# Pega a branch atual e transforma em MAIÚSCULO (ex: hom vira HOM)
BRANCH_ATUAL=$(git branch --show-current | tr '[:lower:]' '[:upper:]')
STATUS_REPO="Branch Atual: [$BRANCH_ATUAL]"
else
STATUS_REPO="Fora de um repositório Git"
fi
clear
echo "--------------------------------------------------"
echo " MENU GIT ($STATUS_REPO)"
echo "--------------------------------------------------"
echo " 1 - TRANSFER REPOSITORY "
echo " 2 - CHANGE HOMOLOGACAO/PRODUCAO "
echo " 3 - SYSTEM STATUS "
echo " 4 - GIT PULL "
echo " 0 - EXIT SYSTEM "
echo "--------------------------------------------------"
read -p "Escolha uma opção: " opcao
echo "" # Linha em branco para organizar o visual
case $opcao in
# ------------------------------------------------------------------------------------------------
# ------------------------------------------------------------------------------------------------
1) # Commitar e dar push
cd ~/Documentos/Docker/docker-s0179-system-dba/
date
git status
git add .
git commit -m "$(date '+%d/%m/%Y as %H:%M')"
git push
echo
echo -e "\nLimpando a tela em 1 segundos..."
# Aguarda 1 segundos e sai da tela
sleep 1
# Limpa o terminal
clear
;;
# ------------------------------------------------------------------------------------------------
# ------------------------------------------------------------------------------------------------
2) # Mudar de branch
cd ~/Documentos/Docker/docker-s0179-system-dba/
clear
echo "--------------------------------------------------"
echo " MENU GIT ($STATUS_REPO) "
echo "--------------------------------------------------"
echo
echo " PARA QUAL BRANCH DESEJA MUDAR? "
echo
echo " 1 - HOMOLOGACAO (HOM) "
echo " 2 - PRODUCAO (PRD) "
echo
read -p "ESCOLHA (1 ou 2): " branch
if [ "$branch" = "1" ]; then
git switch hom
elif [ "$branch" = "2" ]; then
git switch prd
else
echo "Branch inválida!"
fi
echo
echo -e "\nLimpando a tela em 1 segundos..."
# Aguarda 1 segundos e sai da tela
sleep 1
# Limpa o terminal
clear
;;
# ------------------------------------------------------------------------------------------------
# ------------------------------------------------------------------------------------------------
3) # git status
cd ~/Documentos/Docker/docker-s0179-system-dba/
git status
echo
read -p "Pressione Enter para voltar..."
;;
# ------------------------------------------------------------------------------------------------
# ------------------------------------------------------------------------------------------------
4)
echo -e "=== Sincronizando o repositório Docker ===\n"
# 1. Entra no diretório
cd ~/Documentos/Docker/docker-s0179-system-dba/ || { echo "Erro: Diretório não encontrado!"; break; }
# 2. Mostra o status atual antes de puxar as alterações
echo -e "\n--> Verificando status do Git..."
git status -s
# 3. Executa o git pull sem abrir editores interativos em caso de merge
echo -e "\n--> Baixando atualizações do servidor (git pull)..."
GIT_TERMINAL_PROMPT=0 git pull --no-rebase --no-edit
# Check de erro do Git
if [ $? -eq 0 ]; then
echo -e "\n[SUCESSO] Repositório sincronizado com sucesso!"
else
echo -e "\n[ERRO] Falha ao sincronizar o Git. Verifique suas credenciais ou conflitos locais."
fi
# 4. Pausa interativa para você LER o resultado antes de limpar a tela
echo
read -p "Pressione [ENTER] para retornar ao menu..."
clear
;;
# ------------------------------------------------------------------------------------------------
# ------------------------------------------------------------------------------------------------
0) # echo "Saindo do programa... Até logo!"
break # Quebra o loop e encerra o script
clear
;;
# ------------------------------------------------------------------------------------------------
# ------------------------------------------------------------------------------------------------
*)
echo "Opção inválida! Tente novamente."
clear
;;
esac
echo "" # Outra linha em branco antes de reiniciar o menu
done
PowerShell Windows
# Definir codificação para aceitar acentos
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
# Ajuste o caminho para a sua pasta no Windows (Ex: C:\Users\SeuUsuario\Documentos\...)
$CAMINHO_PROJETO = "$HOME\Documentos\Docker\docker-s0179-system-dba"
if (Test-Path $CAMINHO_PROJETO) {
Set-Location $CAMINHO_PROJETO
} else {
Write-Host "Erro: O diretório $CAMINHO_PROJETO não foi encontrado." -ForegroundColor Red
Exit
}
while ($true) {
# Verifica se está num repositório Git e obtém a branch
$isGit = git rev-parse --is-inside-work-tree 2>$null
if ($LASTEXITCODE -eq 0) {
$BRANCH_ATUAL = (git branch --show-current).ToUpper()
$STATUS_REPO = "Branch Atual: [$BRANCH_ATUAL]"
} else {
$STATUS_REPO = "Fora de um repositório Git"
}
Clear-Host
Write-Host "--------------------------------------------------"
Write-Host " MENU GIT ($STATUS_REPO)"
Write-Host "--------------------------------------------------"
Write-Host " 1 - TRANSFER REPOSITORY "
Write-Host " 2 - CHANGE HOMOLOGACAO/PRODUCAO "
Write-Host " 3 - SYSTEM STATUS "
Write-Host " 4 - GIT PULL "
Write-Host " 0 - EXIT SYSTEM "
Write-Host "--------------------------------------------------"
$opcao = Read-Host "Escolha uma opção"
Write-Host ""
switch ($opcao) {
"1" {
Set-Location $CAMINHO_PROJETO
Get-Date
git status
git add .
$DATA_HORA = Get-Date -Format "dd/MM/yyyy 'as' HH:mm"
git commit -m "$DATA_HORA"
git push
Write-Host "`nLimpando a tela em 1 segundo..."
Start-Sleep -Seconds 1
Clear-Host
}
"2" {
Set-Location $CAMINHO_PROJETO
Clear-Host
Write-Host "--------------------------------------------------"
Write-Host " MENU GIT ($STATUS_REPO) "
Write-Host "--------------------------------------------------"
Write-Host ""
Write-Host " PARA QUAL BRANCH DESEJA MUDAR? "
Write-Host ""
Write-Host " 1 - HOMOLOGACAO (HOM) "
Write-Host " 2 - PRODUCAO (PRD) "
Write-Host ""
$branch = Read-Host "ESCOLHA (1 ou 2)"
if ($branch -eq "1") {
git switch hom
} elseif ($branch -eq "2") {
git switch prd
} else {
Write-Host "Branch inválida!" -ForegroundColor Red
}
Write-Host "`nLimpando a tela em 1 segundo..."
Start-Sleep -Seconds 1
Clear-Host
}
"3" {
Set-Location $CAMINHO_PROJETO
git status
Write-Host ""
Read-Host "Pressione Enter para voltar..."
}
"4" {
Write-Host "=== Sincronizando o repositório Docker ===" -ForegroundColor Cyan
Set-Location $CAMINHO_PROJETO
Write-Host "`n--> Verificando status do Git..."
git status -s
Write-Host "`n--> Baixando atualizações do servidor (git pull)..."
$env:GIT_TERMINAL_PROMPT = "0"
git pull --no-rebase --no-edit
if ($LASTEXITCODE -eq 0) {
Write-Host "`n[SUCESSO] Repositório sincronizado com sucesso!" -ForegroundColor Green
} else {
Write-Host "`n[ERRO] Falha ao sincronizar o Git. Verifique credenciais ou conflitos." -ForegroundColor Red
}
Write-Host ""
Read-Host "Pressione [ENTER] para retornar ao menu..."
Clear-Host
}
"0" {
Clear-Host
Exit
}
Default {
Write-Host "Opção inválida! Tente novamente." -ForegroundColor Yellow
Start-Sleep -Seconds 1
Clear-Host
}
}
}
Dos Windows
@echo off
chcp 65001 > nul
set "CAMINHO_PROJETO=%USERPROFILE%\Documentos\Docker\docker-s0179-system-dba"
:MENU
cd /d "%CAMINHO_PROJETO%"
:: Pega a branch atual
git rev-parse --is-inside-work-tree >nul 2>&1
if %ERRORLEVEL% equ 0 (
for /f "tokens=*" %%a in ('git branch --show-current') do set "BRANCH=%%a"
set "STATUS_REPO=Branch Atual: [%BRANCH%]"
) else (
set "STATUS_REPO=Fora de um repositorio Git"
)
cls
echo --------------------------------------------------
echo MENU GIT (%STATUS_REPO%)
echo --------------------------------------------------
echo 1 - TRANSFER REPOSITORY
echo 2 - CHANGE HOMOLOGACAO/PRODUCAO
echo 3 - SYSTEM STATUS
echo 4 - GIT PULL
echo 0 - EXIT SYSTEM
echo --------------------------------------------------
set /p opcao=Escolha uma opção:
if "%opcao%"=="1" goto OPCAO1
if "%opcao%"=="2" goto OPCAO2
if "%opcao%"=="3" goto OPCAO3
if "%opcao%"=="4" goto OPCAO4
if "%opcao%"=="0" exit
goto INVALIDO
:OPCAO1
cd /d "%CAMINHO_PROJETO%"
echo %date% %time%
git status
git add .
for /f "tokens=1-3 delims=/ " %%a in ("%date%") do set DATA=%%a/%%b/%%c
for /f "tokens=1-2 delims=: " %%a in ("%time%") do set HORA=%%a:%%b
git commit -m "%DATA% as %HORA%"
git push
timeout /t 1 > nul
cls
goto MENU
:OPCAO2
cls
echo --------------------------------------------------
echo MENU GIT (%STATUS_REPO%)
echo --------------------------------------------------
echo.
echo PARA QUAL BRANCH DESEJA MUDAR?
echo.
echo 1 - HOMOLOGACAO (HOM)
echo 2 - PRODUCAO (PRD)
echo.
set /p branch=ESCOLHA (1 ou 2):
if "%branch%"=="1" git switch hom
if "%branch%"=="2" git switch prd
timeout /t 1 > nul
cls
goto MENU
:OPCAO3
cd /d "%CAMINHO_PROJETO%"
git status
echo.
pause
goto MENU
:OPCAO4
echo === Sincronizando o repositório Docker ===
echo.
cd /d "%CAMINHO_PROJETO%"
echo --^> Verificando status do Git...
git status -s
echo.
echo --^> Baixando atualizações do servidor (git pull)...
set GIT_TERMINAL_PROMPT=0
git pull --no-rebase --no-edit
if %ERRORLEVEL% equ 0 (
echo.
echo [SUCESSO] Repositório sincronizado com sucesso!
) else (
echo.
echo [ERRO] Falha ao sincronizar o Git.
)
echo.
pause
cls
goto MENU
:INVALIDO
echo Opção inválida! Tente novamente.
timeout /t 1 > nul
cls
goto MENU


0 comentários:
Enviar um comentário