Deploy automático
unknown
sh
2 years ago
3.1 kB
14
Indexable
#!/bin/bash
#
# repo - folder com clone.
# source - folder com o clone (ui).
# target - folder intermédio para verificações de testes e compilação.
# production - folder de produção, onde o sistema está a correr.
#
repo_path="/root/RobDroneGo/SEM5_PI"
repo_ui_path="/root/RobDroneGo/SEM5_PI/ui2/"
source_path="/root/RobDroneGo/SEM5_PI/ui2"
production_path="/root/production/SEM5_PI/"
production_ui_path="/root/production/SEM5_PI/ui2/"
# Token de autenticação do GitHub.
access_token="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"
# Caminho para ficheiro de logs.
audit_log="/root/audit_log.txt"
# Função para formatar e escrever logs no ficheiro.
log_message() {
local timestamp=$(date +"[%d-%m-%Y %T] - ")
echo "$timestamp $1" >> "$audit_log"
}
# Redireciona todo o output para o audit_log.
exec >> "$audit_log" 2>&1
cd "$repo_path" || exit
# Verifica se o repo local está para trás na branch.
if [ "$(git fetch && git status -uno | grep 'Your branch is behind')" > /dev/null ]; then
git pull origin main > /dev/null
diff --exclude=node_modules -r --exclude=.angular "$repo_ui_path" "$production_ui_path" > /dev/null
# Compara o source com production (excluindo os node_modules).
if [ "$?" -gt 0 ]; then
log_message "There are no updates on frontend."
exit -1
fi
# Executa os testes de unidade.
npm run test > /dev/null
if [ "$?" -gt 0 ]; then
log_message "Unit tests failed."
exit -1
fi
# Executa teste de compilação.
#/root/compile_test.sh > /dev/null
#if [ $? -eq -1 ]; then
# log_message "Compilation error."
# fi
cd "$production_path" || exit
# Faz o pull na produção.
git pull origin main > /dev/null
# Procura o PID que está a executar o frontend.
pid=$(ps aux | grep "ng serve --host 0.0.0.0" | grep -v grep | awk '{print $2}')
if [ "$pid" -ne 1 ]; then
# Termina o processo.
kill -SIGKILL $pid
fi
cd "$production_ui_path" || exit
/usr/local/bin/ng serve --host 0.0.0.0 & > /dev/null
log_message "New version deployed successfully."
exit 0
# Corre script de teste de compilação.
# if /root/compile_test.sh > /dev/null; then
# Se existirem diferenças entre o target e a produção, é feita a atualização.
#if diff -r "$repo_path" "$production_path" > /dev/null; then
# log_message "No updates on front-end module"
# exit -1
#else
# /usr/bin/npm run test > /dev/null
# if [ $? -eq 0 ]; then
# ps aux | grep "ng serve"
# kill -SIGKILL $?
# log_message "Update and copy completed successfully."
# cp -r "$source_path"/* "$production_path"
# ng serve
# exit 0
# else
# log_message "Unit tests faled."
# fi#
# fi
# else
# log_message "Compile errors!"
# exit -1
# fi
else
log_message "Local branch is up to date. No need to update or copy."
fiEditor is loading...
Leave a Comment