Administrera Git repos i Gerrit Code Review

From Peters wiki
Jump to navigation Jump to search

Denna artikel beskriver hur man administrerar Git repos i Gerrit Code Review. Den är OS-neutral och bör även fungera för olika Linux distributioner. Det som skiljer alla olika system är hur man startar Gerrit tjänsten vid start. Det tar denna guide inte upp. Sök efter Gerrit paket för respektive system. Dessa brukar även innehålla startskript m.m. Denna guide tar inte heller upp själva granskningsprocessen i Gerrit. Utan vi kommer öppna upp för push m.m. direkt till master och andra brancher.

Gerrit kräver Java för att fungera.


Notering: Det är problematiskt att radera projekt, så välj rätt namn från början när du skapar projekt.


Installera Gerrit

Skapa en användare på systemet som heter gerrit. Logga in som gerrit och ladda ner senaste Gerrit releasen (i detta exempel gerrit-full-2.5.war). Installera Gerrit under en katalog som vi döper till review_site:

user $ java -jar gerrit-full-2.5.war init -d review_site

Vi kommer nu få svara på en massa installationsfrågor. Vi kommer välja att använda en PostgreSQL databas och autentisera via LDAP. Vill du snabbt komma igång att testa Gerrit, välj då istället en H2 databas och "autentisering" via development_become_any_account.

Skapa först PostgreSQL användaren och databasen:

user $ createuser -A -D -P -E -R gerrit
user $
createdb -E UTF-8 -O gerrit2 reviewdb
*** Gerrit Code Review 2.5
***

Create '/home/gerrit/review_site' [Y/n]? y

*** Git Repositories
***

Location of Git repositories   [git]:

*** SQL Database
***

Database server type           [H2/?]: postgresql
Server hostname                [localhost]: 
Server port                    [(POSTGRESQL default)]: 
Database name                  [reviewdb]: 
Database username              [gerrit]: 
gerrit's password              : 
              confirm password : 

*** User Authentication
***

Authentication method          [OPENID/?]: ldap
LDAP server                    [ldap://localhost]: 
LDAP username                  : cn=Manager,dc=example,dc=com
cn=Manager,dc=example,dc=com's password : 
              confirm password : 
Account BaseDN                 : ou=People,dc=example,dc=com
Group BaseDN                   [ou=People,dc=example,dc=com]: ou=Group,dc=example,dc=com

*** Email Delivery
***

SMTP server hostname           [localhost]:
SMTP server port               [(default)]:
SMTP encryption                [NONE/?]:
SMTP username                  :

*** Container Process
***

Run as                         [gerrit]:
Java runtime                   [/usr/local]:
Copy gerrit.war to /home/gerrit/review_site/bin/gerrit.war [Y/n]?
Copying gerrit.war to /home/gerrit/review_site/bin/gerrit.war

*** SSH Daemon
***

Listen on address              [*]:
Listen on port                 [29418]:

Gerrit Code Review is not shipped with Bouncy Castle Crypto v144
  If available, Gerrit can take advantage of features
  in the library, but will also function without it.
Download and install it now [Y/n]?
Downloading http://www.bouncycastle.org/download/bcprov-jdk16-144.jar ... OK
Checksum bcprov-jdk16-144.jar OK
Generating SSH host key ... rsa... dsa... done

*** HTTP Daemon
***

Behind reverse proxy           [y/N]?
Use SSL (https://)             [y/N]?
Listen on address              [*]:
Listen on port                 [8080]:

*** Plugins
***

Prompt to install core plugins [y/N]?

Initialized /home/gerrit/review_site
Executing /home/gerrit/review_site/bin/gerrit.sh start
Starting Gerrit Code Review: OK
Waiting for server to start ... OK
Opening browser ...

Verifiera att Gerrit är uppe genom att t.ex. starta en webbrowser och gå till http://hostname:8080.

Kompletterande konfigurering

Om du har problem vid login samt att namnen inte visas korrekt, lägg till följande rader i gerrit.config:

[gerrit]
        canonicalWebUrl = http://example.com:8080/
[ldap]
        accountFullName = cn

Skapa användare och projekt i Gerrit

Starta en webbrowser och gå till http://hostname:8080. Klicka på Become uppe till höger. Klicka på New Account under Register. Ange namn och epost-adress och ett unikt användarnamn. Gerrit använder SSH och nyckelpar, så för att kunna klona och pusha över SSH måste du ladda upp din publika SSH-nyckel. Om du inte har ett nyckelpar kan du skapa ett via kommandot ssh-keygen -t rsa. Din publika nyckel hamnar i filen ~/.ssh/id_rsa.pub. Det är hela innehållet i denna fil som du ska ladda upp till Gerrit.

Det första kontot du skapar när man kör med development_become_any_account blir även administratör i Gerrit.

Skapa ett HelloWorld projekt i Gerrit genom att klicka på Projects => Create New Project. Ange sedan följande:

Klicka sen på Create Project. Om man vill skapa flera projekt med samma rättigheter, utnyttjar man med fördel Gerrits stöd att projekt kan baseras på andra projekt. För att få möjlighet att skapa brancher och pusha direkt till master branchen m.m. gå till All-Projects och Access. Klicka på Edit och ändra så du har följande:


Notering: För att kunna tagga m.m. kommer det att behövas mer rättigheter.


Skapa projekt via kommandoraden

För att skapa ett projekt som heter linux, ärver rättigheter från ett projekt som heter private, har en tom initial commit och en beskrivning som är "Linux kernel configuration", kör kommandot:

user $ ssh -p 29418 <host> gerrit create-project --name linux --parent private --empty-commit --description "'Linux kernel configuration'"

Klona projekt och pusha ändring

Logga in som en användare som har ett konto i Gerrit och som har laddat upp sin publika nyckel. Klona sedan HelloWorld projektet:

Gå till repot och kör:

user $ cd HelloWorld
user $
touch README
user $
git add README
user $
git commit -m "Added README file"

Pusha nu tillbaka ändringarna till Gerrit och master branchen:

user $ git push origin master

Pusha en branch

Klona HelloWorld projektet och committa en ändring till en lokal branch som vi kallar test:

Gå till repot och kör:

user $ git checkout -b test
user $
touch main.c
user $
git add README
user $
git commit -m "Added main.c file"

Pusha nu ändringen och branchen till Gerrit:

user $ git push --set-upstream origin test
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 250 bytes, done.
Total 2 (delta 0), reused 0 (delta 0)
remote: Processing changes: refs: 1, done
To ssh://user@host:29418/HelloWorld.git
 * [new branch]      test -> test
Branch test set up to track remote branch test from origin.

Tack vare Create Reference rättigheten på refs/* får vi pusha upp brancher till Gerrit.

Pusha en tag

Klona HelloWorld projektet:

Gå till repot och kör:

user $ git tag v1
user $
git push --tags
Total 0 (delta 0), reused 0 (delta 0)
remote: Processing changes: refs: 1, done
To ssh://peter@192.168.0.115:29418/HelloWorld.git
 * [new tag]         v1 -> v1

Pusha en annotaterad tag

Taggen vi pushade i föregående kapitel, är en lättvikts tag. Den saknar information om vem och när man taggade. För att skapa en annoterad tag, kör kommandot:

user $ git tag -a -m "Annotated tag" v2
user $
git push --tags

Gerrit kommer nu vägra oss att pusha tagen till repot. Vi behöver lägga till följande rättighet:

När detta är gjort, kör om kommandot:

user $ git push --tags