Zarchiwizuj artefakty w Jenkins

132

Czy ktoś mógłby mi wyjaśnić ideę artefaktów w procesie budowania?

Mam katalog obszaru roboczego, w którym pobieram kod, aby skompilować i uruchomić moje skrypty Ant itp. Na koniec, w moim przypadku, otrzymuję plik jar, który jest gotowy do zainstalowania. Czy to jest uważane za artefakt?

Gdzie mam powiedzieć mojemu skryptowi kompilacji, aby umieścić plik jar? W katalogu obszaru roboczego? Mój plik jar otrzymuje unikalną nazwę pliku w zależności od takich zmiennych, jak BUILD_IDi takie, jak mogę powiedzieć Jenkinsowi, który plik jar wybrać?

EDYCJA: OK, więc próbowałem zrobić coś takiego:

wprowadź opis obrazu tutaj

Ścieżka nie istnieje jeszcze w moim obszarze roboczym, ponieważ skrypt budujący ma ją utworzyć, i oczywiście plików .jari .propertiesnie ma, ponieważ nie zostały jeszcze wygenerowane. Dlaczego więc wyświetla mi się błąd? Wygląda na to, że czegoś mi brakuje.

Ponadto, czy Jenkins usuwa artefakty po każdej kompilacji (nie zarchiwizowane artefakty, wiem, że mogę nakazać mu je usunąć)? W przeciwnym razie dość szybko zablokuje dysk twardy.

Michał
źródło
12
Błąd, który otrzymujesz, najprawdopodobniej nie stanowi problemu - jeśli proces kompilacji się powiedzie, powinien zostać utworzony. Zapisz i wypróbuj to, ponieważ kilka zepsutych kompilacji podczas konfigurowania potoku jest całkowicie normalne. :)
Anders Lindahl
3
Nie bój się ostrzeżenia, jeśli artefakt zostanie wygenerowany po kompilacji, zostanie zarchiwizowany przez twoją konfigurację (chociaż jest ostrzeżenie na stronie konfiguracji).
Huang F. Lei

Odpowiedzi:

68

Twoje rozumienie jest poprawne, artefakt w sensie Jenkinsa jest wynikiem kompilacji - zamierzonym wynikiem procesu budowania.

Wspólna konwencja jest umieszczenie wyniku kompilacji do build, targetlub binkatalogu.

Archiwizator Jenkins może użyć globs ( target/*.jar), aby łatwo wybrać właściwy plik, nawet jeśli masz unikalną nazwę dla każdej kompilacji.

Anders Lindahl
źródło
@Andres dzięki, również, czy Jenkins usuwa artefakty po każdej kompilacji (nie zarchiwizowane artefakty, wiem, że mogę kazać mu je usunąć)? czy jestem za to odpowiedzialny myslef?
Michael
6
@michael: Musisz samodzielnie wyczyścić obszar roboczy, dobrą praktyką jest wyczyszczenie przynajmniej katalogu docelowego przed każdą kompilacją, aby upewnić się, że nie otrzymasz wyników wcześniejszej kompilacji.
Anders Lindahl
@Michael Możesz dodać „czysty” krok kompilacji. Np. Z sh 'mvn clean package'
Mavenem
@AndersLindahl - „powszechną konwencją jest umieszczenie wyniku kompilacji w katalogu build, target lub bin”. Masz na myśli katalog bin współdzielony przez wszystkie projekty? Jak mogę to zrobić? Czy jest to akcja post-build?
user3240688
@ user3240688 Nie, mam na myśli foldery docelowe dla poszczególnych projektów. Jeśli chcesz, aby artefakty z kilku zadań znajdowały się w jednym folderze współdzielonym, będziesz musiał opublikować je za pomocą na przykład jednej z wtyczek „Publikuj przez $ PROTOCOL”.
Anders Lindahl
11

Artefakt może być wynikiem procesu budowania. Ważne jest to, że nie ma znaczenia, na jakim kliencie został zbudowany, zostanie przeniesiony z obszaru roboczego z powrotem do mastera (serwera) i tam zapisany z linkiem do kompilacji. Zaletą jest to, że jest wersjonowany w ten sposób, wystarczy skonfigurować kopię zapasową na swoim serwerze głównym i że wszystkie artefakty są dostępne przez interfejs sieciowy, nawet jeśli wszyscy klienci kompilacji są w trybie offline.

Możliwe jest zdefiniowanie wyrażenia regularnego jako nazwy artefaktu. W moim przypadku spakowałem wszystkie pliki, które chciałem przechowywać w jednym pliku o stałej nazwie podczas kompilacji.

Matthias Alleweldt
źródło
3
„Możliwe jest zdefiniowanie wyrażenia regularnego jako nazwy artefaktu. W moim przypadku spakowałem wszystkie pliki”. Czy możesz to wyjaśnić? brzmi dokładnie to, czego chcę?
Chris Milburn
7

Czy Jenkins usuwa artefakty po każdej kompilacji? (nie zarchiwizowane artefakty, wiem, że mogę powiedzieć, żeby je usunąć)

Nie, Hudson / Jenkins samodzielnie nie czyści obszaru roboczego po kompilacji. W procesie kompilacji mogą występować akcje, które usuwają, zastępują lub przenoszą artefakty kompilacji z miejsca, w którym zostały pozostawione. W konfiguracji zadania w zaawansowanych opcjach projektu (które należy rozwinąć) dostępna jest opcja o nazwie „Wyczyść obszar roboczy przed budowaniem”, która wyczyści obszar roboczy na początku nowej kompilacji.

Codex24
źródło
1

W Jenkins 2.60.3 istnieje sposób na usunięcie artefaktów kompilacji (a nie zarchiwizowanych artefaktów) w celu zaoszczędzenia miejsca na dysku twardym maszyny kompilacji. W sekcji Ogólne zaznacz opcję „Odrzuć stare kompilacje” ze strategią „Rotacja dziennika”, a następnie przejdź do opcji zaawansowanych. Pojawią się jeszcze dwie opcje związane z zachowywaniem artefaktów kompilacji dla zadania na podstawie liczby dni lub kompilacji.

Ustawienia, które działają w moim przypadku, to wprowadzenie 1 dla „Maksymalna liczba kompilacji do zachowania z artefaktami”, a następnie wykonanie czynności po kompilacji w celu zarchiwizowania artefaktów. W ten sposób wszystkie artefakty ze wszystkich kompilacji zostaną zarchiwizowane, wszystkie informacje z kompilacji zostaną zapisane, ale tylko ostatnia kompilacja zachowa własne artefakty.

Odrzuć opcje starych kompilacji

Matt
źródło