Git hook in docker container

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 10-09 22:24
In een docker container is een GIT hook actief van GrumPHP. Deze luistert naar de git commits en voert een aantal checks uit (unit test, linting, etc.) voordat de commit uitgevoerd wordt indien alle tests slagen.

Dit alles draait dus in een docker container en dit maakt het iets gecompliceerder.

Vanuit de host is ook git geinstalleerd en zou het ideaal zijn als ik niet in de container mijn git commits hoef uit te voeren om de git hook te activeren. Immers wil ik wel dat de git hook getriggerd wordt zodra ik een commit wil uitvoeren.

Nu heb ik een aantal opties:
- De git hook buiten de container installeren. Dit is echter geen optie want dat houdt in dat PHP/composer ook geinstalleerd moet worden op de host wat de hele container overbodig maakt.
- Een linux shim gebruiken zodat ik een alias kan maken die de git commit uitvoert vanuit de host naar de container. Dit kan, maar wordt al snel ingewikkelder bij het gebruik van meerdere containers
- Elke keer in de container de git commits uitvoeren. Hier moet ik elke keer de config aanpassen met naam en email en het pushen zal ook niet goed verlopen zonder SSH key etc. Dus niet geheel wenselijk

Dit heeft niet zozeer te maken met PHP o.i.d. maar kan gezien worden als een git hook binnen een docker container.

Zijn er nog andere manieren die het leven wat makkerlijker maken? :)

Beste antwoord (via ZeroXT op 03-04-2022 12:24)


  • danslo
  • Registratie: Januari 2003
  • Laatst online: 16:59
ZeroXT schreef op zaterdag 2 april 2022 @ 20:43:
- De git hook buiten de container installeren. Dit is echter geen optie want dat houdt in dat PHP/composer ook geinstalleerd moet worden op de host wat de hele container overbodig maakt.
Zie hier.

Je kan iets doen als het volgende:

code:
1
2
3
parameters:
    git_hook_variables:
        EXEC_GRUMPHP_COMMAND: 'docker-compose run php'


Vervolgens moet je wel "grumphp git:init" draaien om je hooks te hergenereren, waarna je checks voortaan in de container gebeuren. E.v.t. draai je dat commando in de container en trek je de hooks (in .git) naar de host.

Alle reacties


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • danslo
  • Registratie: Januari 2003
  • Laatst online: 16:59
ZeroXT schreef op zaterdag 2 april 2022 @ 20:43:
- De git hook buiten de container installeren. Dit is echter geen optie want dat houdt in dat PHP/composer ook geinstalleerd moet worden op de host wat de hele container overbodig maakt.
Zie hier.

Je kan iets doen als het volgende:

code:
1
2
3
parameters:
    git_hook_variables:
        EXEC_GRUMPHP_COMMAND: 'docker-compose run php'


Vervolgens moet je wel "grumphp git:init" draaien om je hooks te hergenereren, waarna je checks voortaan in de container gebeuren. E.v.t. draai je dat commando in de container en trek je de hooks (in .git) naar de host.

Acties:
  • 0 Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 10-09 22:24
@danslo bedankt, dit werkt! Ik begrijp alleen nog niet goed hoe dit kan werken.

Vanuit de host wordt een git commit gedaan. Hoe weet de container dat de host een git commit wil doen?

Acties:
  • +1 Henk 'm!

  • DaFeliX
  • Registratie: December 2002
  • Laatst online: 12:37

DaFeliX

Tnet Devver
ZeroXT schreef op zondag 3 april 2022 @ 12:26:
[...]
Vanuit de host wordt een git commit gedaan. Hoe weet de container dat de host een git commit wil doen?
Niet.

git op de host weet dat er een commit wordt gedaan, en triggert daarom een bepaald commando. Dat is in dit geval het commando "voer grumphp uit in docker".
De container hoeft daarvoor niets te weten, zelfs geen toegang te hebben tot de .git folder, hij voert gewoon een script uit. In sommige situaties heb je de .git folder wel nodig, als je bijv. alleen de files wil scannen die in staging staan; dan is het leesbaar hebben van die folder genoeg om te zien wat er in staging staat.
Doordat je in de container de working directory hebt gemount, heeft grumphp toegang tot alle files die hij wil scannen, en de .git folder mocht dat nodig zijn.

Einstein: Mijn vrouw begrijpt me niet