Ten sam kod na jednym branchu się wysypuje, a na innych przechodzi

0

Niestety nie mam kogo spytać w pracy. Mój zespół nie wie, a w CI/CD dzieją się takie cuda, że szkoda gadać. Często kiedy o coś ich pytam próbują zrobić ze mnie durnia i przekręcają kota ogonem co opisywałem już w moim innym wątku.

Mam branch główny develop. Był na nim błąd w unit testach i pipeline się wywalał na unit testach na poleceniu mvn -U clean install. Błąd brzmiał NoClassDefFoundError: Could not initialize class org.mockito.Mockito i był spowodowany tworzeniem mocka w ciele @BeforeAll bez adnotacji nad klasą@Extensions(MockitoExtension.class) .
Scheckoutowałem go do brancha fix, zrobiłem poprawkę. Lokalnie mvn -U clean install śmiga. PR z tą poprawką się zbudował tam też mvn -U clean install śmiga, więc zmergowałem to do develop. A develop dalej się wywala na mvn -U clean install jakby nie widział tej zmiany i rzuca starym błędem, choć w logach pluje, że zapina się niby na ten nowy commit.

Nastepnie stworzyłem nowego brancha dummy z develop i dodając 1 pustą linię wystawiłem nowego PR. Buduje się bez błędów, mvn -U clean install śmiga.

Legenda:
czerwony: pipeline fail
zielony: pipeline pass
image.png

Jedyne co mi przychodzi do głowy to albo jenkins coś sobie cachuje albo joby do odpalania pipelinów dla PR i dla developa używają różnych artifactory. Java i maven ten sam, nic innego do tych unitów niepotrzebne.
Jakieś pomysły?

0

jenkins coś sobie cachuje

Z opisu tak właśnie wynika że tu leży przyczyna. Pokaż adekwatny log Jenkinsa

1

Dla developa może być inny flow zdefiniowany niż dla feature branchy

1

Moze w inne miejsce jest pakowany artefakt? (np czesto w inne miejsce ida artefakty z branchow a a w inne z maina).

Druga rzecz -> moze macie synchronizacje Jenkinsa z repo na ktora trzeba poczekac? (pracowalem przy systemie gdzie labo czekalo sie 10 minut na auto sync, albo bralo jeden commit do tylu :P)

1

A co sądzicie o tym? Widzicie tu jakieś zagrożenie ze strony wielowątkowości? Mogą być jakieś wyścigi? Może jak na develop jest inny procesor czy inny sysytem operacyjny to w innej kolejności coś odpala?
Błąd wywala się na mo = new MyObject(mio); i mówi, że ten mock MyInnerObject się nie initializuje.

@ExtendWith(MockitoExtension.class)
@TestInstance(TestInance.Lifecycle.PER_CLASS) // po to żeby metoda oznaczona adnotacją @BeforeAll nie musiała być statyczna
class Test {

MyObject mo;

@BeforeAll
void setUp {
    MyInnerObject mio = mock(MyInnerObject.class);
    mo = new MyObject(mio);
}

@BeforeEach
void setUp {
    reset(mio);
}

@Test
void should...

}
wojtekxtx napisał(a):

jenkins coś sobie cachuje

Z opisu tak właśnie wynika że tu leży przyczyna. Pokaż adekwatny log Jenkinsa

spróbuję coś sklecić, nie chcę wrzucać kodu ani zbyt wielu szczegółów.

1

problem rozwiązany, nie znam szczegółów. Coś było nie tak z nazwami folderów workspace multi branczy w jenkinsie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1