Nivel: Avansat
Data ultimei modificări: 2014.09.01
Î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.
Î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 se face în cea mai mare măsură modificând fișierele
existente în directorul creat în urma clonării proiectului gitolite-admin.
Î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
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
Pentru mai multe detalii puteți citi documentația de pe site-ul oficial
sau la nevoie chiar cartea.