Compartilhando conhecimento com o mundo

Com tecnologia do Blogger.

Pesquisa

Download

Blogger Tricks

Blogger Themes

Visitas

Assuntos

8/23/2026

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