Proiect GitRepo

În acest proiect voi pune la punct toate elementele necesare instalării și administării unui sistem de mentenanță a proiectelor cu ajutorul Git. Voi presupune că știți cum se folosește Git că aveți Docker instalat, că aveți acces root și că ați reușit să creați deja imaginea șablon, descrisă în articol. Restul instalărilor și configurărilor for fi făcute în interiorul containerului docker și nu necesită altă pregătire prealabilă.

Personal folosesc cu succes acest mod de lucru cu proiectele git după ce anterior am încercat multe alte variante, inclusiv variante comerciale gen GitHub.

Într-un director nou, să-i spunem gitrepo, creăm fișierul Dockerfile cu următorul conținut:

FROM base
MAINTAINER Cosmin L. Neagu <cosmin@rohost.com>

# Install gitolite & dependencies
ENV DEBIAN_FRONTEND noninteractive 
RUN apt-get install -y git && \
    adduser --system --group --shell /bin/bash git && \
    cp /root/.ssh/authorized_keys /home/git/admin.pub && \
    cd /home/git; su git -c "mkdir -p bin" && \
    cd /home/git; su git -c "git clone git://github.com/sitaramc/gitolite" && \
    cd /home/git; su git -c "gitolite/install -ln" && \
    cd /home/git; su git -c "bin/gitolite setup -pk admin.pub"

Mai apoi se execută comanda de build și cea de execuție:

# se crează imaginea gitrepo
docker build -t="gitrepo" .

# se execută o instanță de gitrepo
docker run -d -p 127.0.0.1:222:22 gitrepo

În acest moment ar trebui să avem o instanță Docker cu Gitolite instalat și complet funcțional. Cheia SSH folosită la imaginea base va fi și cheia de administrare pentru serviciul de git.

Folosirea serverului de Git

În primul rând, pentru a ne fi mai ușor pe viitor, vom configura SSH-ul cu un Host astfel, în ~/.ssh/config adăugăm:

Host git
    User git
    HostName 127.0.0.1
    Port 222
    RequestTTY no

Odată adăugate aceste linii, în loc să folosim ssh -T git@127.0.0.1 -p 222 putem folosi simplu comanda ssh git. Mai mult, dacă pe viitor se schimbă IP-ul, user-ul, port-ul sau apar alte modificări trebuie doar să modificăm config-ul de SSH.

# listează proiectele la care am access
ssh git

# clonează proiectul de administrare
# de unde se fac toate setătile
git clone git:gitolite-admin

Clonarea proiectului gitolite-admin duce la crearea unui director cu același nume. Aici, directorul keydir va conține cheile SSH ale utilizatorilor ce vor avea acces la proiectele git. În directorul conf, fișierul gitolite.conf va conține toate proiectele git, setările și drepturile necesare. Exemplele de mai jos reprezintă doar unul dintre posibilele scenarii de lucru.

Configurarea și procedura de lucru

Configurarea se face în cea mai mare măsură modificând fișierele existente în directorul creat în urma clonării proiectului gitolite-admin.

Crearea unui user/proiect nou

În primul pas se adauga următoarele linii în fișierul conf/gitolite.conf după care, salvăm în git modificarea făcută și o trimitem către Gitosis. La sfârșit, după clonarea noului proiect îl vom putea folosi ca orice alt repo git.

repo TEST1
    RW+     =   admin
# salvează în git modificarile făcute
git commit -a -m"New repo: TEST1"

# trimite modificările locale către Gitosis
git push

# listăm proiectele existente pentru a confirma apariția TEST1
ssh git

# clonăm noul proiect TEST1 (nu în interiorul proiectului gitosis-admin :)
git clone git:TEST1
Transferul unui git repo de pe GitHub

Dacă în loc de un proiect nou dorim să preluăm un proiect existent de pe GitHub de exemplu putem folosi următorii pași. Într-un final, proiectul importat va putea fi regăsit pe serverul nostru sub noul nume, TEST1. Atenție: TEST1 trebuie să existe înainte de a putea fi folosit și poate fi creat conform pașilor de mai sus.

# clonăm proiectul dorit dacă nu-l avem deja
git clone https://github.com/fabric/fabric.git

# setăm remote-ul către Gitosis-ul nostru
cd fabric
git remote add gitolite git:TEST1

# inițializează remote-ul cu branch-ul master
git push gitolite master

# push all branches
git push gitolite --all

# push all tags
git push gitolite --tags

# proiectul importat poate găsit sub numele TEST1
git clone git:TEST1

Diverse

Pentru mai multe detalii puteți citi documentația de pe site-ul oficial sau la nevoie chiar cartea.

Conținutul acestui site reflectă interesele și preferințele autorilor.