2014-04-30 10 views
6

Jenkins URL artefakt pozwalają abstrahując „ostatniej udanej kompilacji”, tak że zamiastaliasingu URL Jenkins artefakt

http://myjenkins.local/job/MyJob/38/artifact/build/MyJob-v1.0.1.zip 

możemy powiedzieć

http://myjenkins.local/job/MyJob/lastSuccessfulBuild/artifact/build/MyJob-v1.0.1.zip 

Czy możliwe jest to abstrakcyjny dalej? Moje artefakty mają swój numer wersji w nazwie pliku, który może zmienić się z kompilacji na kompilację. Idealnie chciałabym mieć jakiś „alias” URL, który wygląda tak:

http://myjenkins.local/job/MyJob/lastSuccessfulBuild/artifact/build/MyJob-latest.zip 

MyJob-latest.zip będzie wówczas rozwiązania do MyJob-v1.0.1.zip.

Jeśli sam Jenkins nie może tego zrobić, być może istnieje wtyczka?

Odpowiedz

11

Nigdy nie widziałem takiej wtyczki, ale Jenkins ma już wbudowaną podobną funkcjonalność.

Możesz użyć /*zip*/filename.zip w swojej ścieżce artefaktów, gdzie filename jest cokolwiek wybierzesz. To zajmie wszystkie znalezione artefakty i pobrać je w na kartę SD (można skończyć z zamkiem wewnątrz zip, jeśli artefakt jest już plik zip)

W twoim przypadku, to będzie:
http://myjenkins.local/job/MyJob/lastSuccessfulBuild/artifact/build/*zip*/MyJob-latest.zip
To spowoduje wyświetlenie zawartości /artifact/build/ zwróconej w skompresowanym archiwum o nazwie MyJob-latest.zip. Zauważ, że jeśli masz więcej niż ten plik zip w tym katalogu, inne pliki również zostaną zwrócone.

Możesz używać symboli wieloznacznych na ścieżce. Pojedynczy * dla zwykłego symbolu wieloznacznego, podwójny ** za pomijanie dowolnej liczby poprzednich katalogów.

Na przykład, aby uzyskać dowolny plik, który zaczyna się MyJob, kończy się .zip i szukać go w dowolnym katalogu artefaktu, można użyć:

/lastSuccessfulBuild/artifact/**/MyJob*.zip/*zip*/MyJob-latest.zip

Edit:

Nie można zrobić czegoś takiego bez jakiejś postaci pojemnika (w tym przypadku zip). Z pojemnika, mówisz system:

  • uzyskać wszelkie ewentualne [nieokreślony COUNT] wieloznaczny mecz i umieszczenia w tym pojemniku, a następnie dać mi pojemnik. Jest to logiczne i możliwe, ponieważ istnieje tylko jeden pojedynczy kontener, bez względu na to, czy jest pusty, czy nie.

Ale nie można powiedzieć, że system:

  • dać mi link do konkretnego pojedynczego pliku, ale nie wiem który z nich lub ile istnieją. System nie może zagwarantować, że symbole wieloznaczne będą pasowały do ​​jednego, więcej niż jednego lub żadnego. Jest to po prostu niemożliwe z punktu widzenia logiki.

Jeśli potrzebujesz go do automatyzacji skryptów, możesz rozpakować suwak pierwszego poziomu i pozostawić go z pożądanym spakowanym artefaktem.

Jeśli potrzebujesz tego linku do kogoś innego, potrzebujesz alternatywnego rozwiązania.

Alternatywa 1:
Po twój build jest kompletna, należy wykonać krok po kompilacji, która będzie miała swój artefakt, i zmień jego nazwę na MyJob-latest.zip, ale tracą wersjonowanie w nazwie pliku. Możesz również wybrać kopiowanie zamiast zmieniać nazwę, ale kończysz z podwójnym miejscem do przechowywania tych artefaktów.

Alternatywa 2 (zalecany): jako działanie post-build, przesłać artefakt do centralnego repozytorium. Może to być Artifactory, a nawet zwykły SVN. Po przesłaniu nazwa zostanie zmieniona na MyJob-latest.zip, a poprzednia zostanie nadpisana. W ten sposób można mieć statyczny link, który zawsze będzie miał najnowszy artefakt z lastSuccessfulBuild

+0

Problem polega na tym, że nazwa artefaktu to 'MyJob-v1.1.0.zip'. Używanie 'MyJob - *. Zip' nie działa. :( – paleozogt

+0

Czy faktycznie masz więcej niż 1 plik w katalogu 'build'? Pierwszy podany wiersz będzie działał poprawnie, jeśli nie ma innych plików – Slav

+1

Po przejściu do'/artefakt' zobaczysz stronę z polem wprowadzania Wpisz '**/*. zip' i naciśnij klawisz Enter .To da ci jeden plik, który chcesz? – Slav

0

Jest faktycznie plugin przypisać aliasy budować już biegać, i znalazłem to bardzo przydatny: the Build Alias Setter Plugin.

Można go użyć na przykład do przypisania aliasu w postaci własnego numeru wersji dla kompilacji zamiast (lub raczej dodatkowo) do wewnętrznego numeru kompilacji przydzielonego przez firmę Jenkins. Zauważyłem, że zwykle jest najbardziej praktyczne używanie go w połączeniu z EnvInject plugin (lub twoim ulubionym wariantem): wyeksportowałbyś zmienną env (np. MY_VAR = xyz) z wartością do wersji docelowej lub monikera, a następnie użyj formularza ${ENV,var="myvar"} w konfiguracji "Alias ​​Token Macro", który wtyczka zapewnia w konfiguracji zadania.

Można go również użyć do przypisania aliasów w postaci "lastSuccesful", jeśli jest taka potrzeba, co pozwala rozróżnić różne typy pomyślnych (lub innych stanów) kompilacji.

Czekajcie na Ciebie! Możesz również użyć sztuczki /*zip*/ w połączeniu z ustawianiem aliasu.

Powiązane problemy