Home

ITA - Git deploy: un esempio pratico

dev python

Mentre sto lavorando al mio porgetto GardenServer mi sono ritrovato a modificare il codice e contemporaneamente dover aggiornare il device remoto (raspberry) che ospita il codice.

A pensarci c’è una soluzione che si può ispirare a questo vecchio articolo.

In generale i passi per raggiungere lo scopo sono :

  1. creare l’utente remoto che esegue il software
  2. creare il repo bare di git
  3. configurare l’hook, questo script dovrà stoppare il programma in esecuzione, aggiornare l’applicazione e far ripartire il servizio
  4. configurare il repo locale per il push

di seguito i passaggi nello specifico

Creazione dell’utente remoto

Con il comando :

$ useradd -m -d /home/<user> -r

aggiungere la propria chiave ssh pubblica al file /home/<user>/.ssh/authorized_keys

questo ultimo passo è importante per snellire il processo di deply con git, che in questo caso deve avvenire via ssh.

Git

Per creare il repo git ho usato il seguente comando:

$ mkdir -p /home/<user>/git/<project.git>
$ cd /home/<user>/git/<project.git>
$ git init --bare

Configurazione dell’hook

Creiamo il file di hook /home/<user>/git/<project.git>/hooks/post-receive

con il seguente contenuto :

GIT_REPO=/home/<user>/git/<project.git>
GIT_CLONE=/home/<user>/bin/
GIT_BRANCH=master

# fermo il servizio
sudo systemctl stop <service>

# rimuovo la vecchia codebase
rm -rf $GIT_CLONE

# installo la nuova versione
git clone $GIT_REPO $GIT_CLONE -b $GIT_BRANCH

# questo è un progetto python quindi installo le dipendenze
source /home/<user>/env/bin/activate
pip install -r /home/<user>/bin/requirements.txt

# si possono fare anche altre operazioni di setup

# riavvio il servizio
sudo systemctl start <service>

exit 0

Rendo lo scrip eseguibile:

chmod +x /home/<user>/git/<project.git>/hooks/post-receive

Fare push

Configuriamo il remote di deploy con questo comando:

$ git remote add deploy <user>@<device>:~/git/<project.git>

Da ora in avanti per deployare sul device si potra usare il comando :

$ git push deploy master

NB : per modificare il branch di deploy c’è la variabile apposita.