Du hast recht, zu diesem Zeitpunkt kennen wir die Version nicht. Es scheint, dass das Basis-Image den aktuellen Version-Branch plus den „tests-passed“-Branch verwendet, wobei der Branch den Commit zum Zeitpunkt des Image-Builds enthält.
Würde die derzeitige Vorgehensweise nicht zu langsameren Neubuilds führen, selbst wenn der „tests-passed“-Branch verwendet wird?
Betrachte einfach folgende Anweisungen:
Im Basis-Image:
git clone --depth 1 https://github.com/discourse/discourse.git
cd discourse/
git remote set-branches --add origin tests-passed
In web.template.yml
git reset --hard
git clean -f
git remote set-branches --add origin master
git pull
...
Wenn git pull aufgerufen wird, wird das gesamte Repository gezogen, was mehrere Minuten dauern kann, da zuvor nur ein flaches Clone (shallow clone) durchgeführt wurde. Du kannst versuchen, die oben genannten Anweisungen lokal auszuführen und es selbst zu testen.
Ich sage nicht, dass es besser ist, das gesamte Repository im Basis-Image zu haben, aber der Code in web.template.yml wird bei jedem Neubuild ausgeführt, selbst wenn nur ein Plugin hinzugefügt oder eine Einstellung in app.yml geändert wurde. Was ich normalerweise in meinen (nicht-Discourse-)Projekten mache, ist, für jede neue Version ein neues Image zu erstellen. Das ist für dich jedoch möglicherweise nicht machbar (unter Berücksichtigung deiner aktuellen Vorgehensweise).
Hast du keine Zunahme der Neubuild-Zeit bemerkt? (Oder ist dieser Anstieg im Vergleich zur gesamten Neubuild-Zeit in den meisten Fällen nicht so groß?)
Update
Ich habe die oben genannten Schritte erneut getestet, und sie waren schnell. Ich vermute, ich habe beim ersten Versuch eine weitere Anweisung ausgeführt, die den Git-Baum verändert hat, und habe am Ende versucht, alles zu ziehen, als ich git pull ausgeführt habe.