VulCode
Blog

Concourse: zmienne w pliku zadania są podstawiane przed parsowaniem

Zmienna w polu, które nie jest tekstem, na przykład memory: ((container_mem_limit)), kończyła się błędem walidacji, bo plik zadania był parsowany przed podstawieniem zmiennych. Zgłoszenie czekało od 2020 roku.

DualFroz - VulCode CEODualFroz - VulCode CEO1 min czytania
Concourse: zmienne w pliku zadania są podstawiane przed parsowaniem - DualFroz - VulCode CEO
Tytuł zmiany w repozytorium
Interpolate task file vars before parsing the file
Scalono
5.10.2026
Opisano tutaj
6.10.2026

Wpis powstał 1 dzień po scaleniu zmiany.

Concourse
Technologie:GoCI/CDYAML

Co nie działało

Concourse to otwarty system CI/CD, w którym zadania opisuje się w plikach YAML. W takim pliku można używać zmiennych w zapisie ((nazwa)), na przykład po to, żeby limit pamięci kontenera przychodził z konfiguracji potoku zamiast być wpisany na sztywno.

Kłopot pojawiał się w polach, które nie są tekstem. Plik zadania był najpierw parsowany do struktury, a zmienne podstawiano dopiero później. Przy memory: ((container_mem_limit)) parser widział tekst tam, gdzie oczekiwał liczby, i zadanie kończyło się błędem „cpu/memory limit must be an integer”. Zgłoszenie #5765 opisujące ten problem było otwarte od czerwca 2020 roku.

Co zmieniliśmy

Źródło konfiguracji z pliku potrafi teraz oddać surową treść pliku, zanim zostanie sparsowana. Zmienne są podstawiane w tej treści, a parsowanie odbywa się raz, już na wyniku. Ten wczesny przebieg działa dla każdego zadania z pliku, a nie tylko wtedy, gdy w kroku jest ustawione vars:. Przy okazji komunikat błędu podaje nazwę pliku, którego nie udało się sparsować, także po podstawieniu zmiennych.

Jak to sprawdziliśmy

Nowe testy podają plik zadania z cpu: ((container_cpu_limit)) i memory: ((container_mem_limit)) oraz zmienne 512 i 5gb, a potem sprawdzają, że limity są ustawione na 512 i 5 GiB. Drugi przypadek sprawdza, że plik, który po podstawieniu wciąż jest niepoprawny, daje błąd z jego nazwą.

Efekt

Zmianę scalono 5 października 2026. Zmienne w container_limits i innych polach liczbowych pliku zadania działają tak, jak opisuje dokumentacja.

System CI/CD oparty na kontenerach, napisany w Go.

Język
Go
Gwiazdki na GitHubie
7915

Te same wywołania przed zmianą i po niej

Przypadki z wpisu i z testu w pull requeście #9717: co powinno wyjść, co wychodziło przed poprawką i co wychodzi teraz.

Pole w pliku zadaniaPowinno daćPrzed zmianąPo zmianieWynik
Pole w pliku zadaniacpu: ((container_cpu_limit))zmienna: 512
Powinno dać512
Przed zmianącpu/memory limit must be an integer
Po zmianie512
Zgodne z oczekiwanym
Pole w pliku zadaniamemory: ((container_mem_limit))zmienna: 5gb
Powinno dać5 GiB
Przed zmianącpu/memory limit must be an integer
Po zmianie5 GiB
Zgodne z oczekiwanym

2 z 2 przypadków zgodnych z oczekiwanym

Co zmieniliśmy

Zmienne są podstawiane w surowej treści pliku, a parsowanie odbywa się raz, już na wyniku. Działa to dla każdego zadania z pliku, nie tylko z vars:.

Drugi przypadek testu

Plik, który po podstawieniu wciąż jest niepoprawny, kończy się błędem z nazwą tego pliku.

Czego nas to nauczyło

Kolejność kroków ma znaczenie: zmienne trzeba podstawić, zanim parser sprawdzi plik, bo inaczej odrzuci poprawną konfigurację.

Powiązane strony

Projekt, technologia i usługa, z którymi wiąże się ten wpis.

Potrzebujesz poprawki w swoim stosie?

Poprawiamy błędy także w bibliotekach i narzędziach, na których stoi Twój projekt. Opisz problem, a odpowiemy w godzinę.

Pytania o zmianę #9717

Gdzie jest zmiana, jak ją sprawdziliśmy i kto ją przyjął.