/ / Tworzenie skryptu potokowego jenkinsa - jenkins, jenkins-workflow, jenkins-pipeline

Utwórz skrypt skryptu resusable jenkins - jenkins, jenkins-workflow, jenkins-pipeline

Rozważam ostatnio użycie skryptu potokowego Jenkinsa, jedno pytanie brzmi, że nie wymyśliłem inteligentnego sposobu na stworzenie wewnętrznego kodu narzędzi wielokrotnego użytku, wyobraź sobie, mam wspólną funkcję helloworld które będą używane przez wiele zadań związanych z potokami, więc mam nadzieję stworzyć utils.jar może wstrzyknąć go do ścieżki klasy pracy.

Zauważam, że Jenkins ma podobną koncepcję z globalna biblioteka, ale moje obawy dotyczące tej wtyczki:

Ponieważ jest to wtyczka, musimyzainstaluj / zaktualizuj go za pomocą menedżera wtyczek jenkins, a następnie może wymagać ponownego uruchomienia, aby zastosować zmianę, to nie jest to, co chcę zobaczyć, ponieważ utils może się zmienić, dodaj zawsze, mamy nadzieję, że będzie dostępny natychmiast.

Po drugie, jest to oficjalna wspólna biblioteka jenkins, nie chcę (lub nie będą nas stosować) umieścić prywatny kod w repozytorium jenkins.

Czy masz jakiś dobry pomysł?

Odpowiedzi:

27 dla odpowiedzi nr 1

The Wspólne biblioteki (docs) pozwala na zrobienie Twój kod dostępny dla wszystkich skryptów rurociągów. Nie musisz budować wtyczki do tego i nie musisz ponownie uruchamiać Jenkinsa.

Na przykład. to jest moja Biblioteka i to plik Jenkinsfile to nazywa tę wspólną funkcję.


EDIT (luty 2017): Dostęp do biblioteki można uzyskać za pośrednictwem wewnętrznego serwera Git firmy Jenkins lub za pomocą innych środków (np. Przez szefa kuchni) na serwerze workflow-lib/ katalog w Jenkins katalog domowy użytkownika. (wciąż możliwe, ale bardzo nieuchwytne).

Globalną bibliotekę można skonfigurować za pomocą następujących środków:

  • na @Library("github.com/...") adnotacja w Jenkinsfile wskazując adres URL udostępnionej repo biblioteki.
  • skonfigurowany na poziomie folderu zadań Jenkins.
  • skonfigurowany w konfiguracji Jenkinsa jako biblioteka globalna, z tą zaletą, że kod jest zaufany, tj. nie podlega bezpieczeństwu skryptów.

Mieszanką pierwszej i ostatniej metody byłaby nieobciążona biblioteka współużytkowana, która jest następnie żądana tylko przy użyciu jej nazwy w Jenkinsfile: @Library("mysharedlib").


8 dla odpowiedzi № 2

W zależności od tego, jak często planujesz ponowne użycie kodu, możesz także załadować funkcję (lub zestaw funkcji) jako część innego potoku.

{
// ...your pipeline code...

git "http://urlToYourGit/projectContainingYourScript"
pipeline = load "global-functions.groovy"
pipeline.helloworld()    // Call one of your defined function

// ...some other pipeline code...
}

To rozwiązanie może wydawać się nieco kłopotliwew porównaniu do StephenKinga, ale to, co lubię w tym rozwiązaniu, to to, że moje globalne funkcje są zobowiązane do Gita i każdy może je łatwo modyfikować bez (prawie) jakiejkolwiek wiedzy o Jenkinsie, tylko podstawy Groovy.

W skrypcie Groovy jesteś loading, upewnij się, że dodasz return this na samym końcu. Umożliwi to późniejsze wykonywanie połączeń. W przeciwnym razie po ustawieniu pipeline = load global-functions.groovy, zmienna zostanie ustawiona na null.


1 dla odpowiedzi nr 3

Oto rozwiązanie, którego obecnie używamy w celu ponownego użycia kodu Jenkinsfile:

node {

curl_cmd = "curl -H "Accept: application/vnd.github.v3.raw" -H "Authorization: token ${env.GITHUB_TOKEN}" https://raw.githubusercontent.com/example/foobar/master/shared/Jenkinsfile > Jenkinsfile.t
sh "${curl_cmd}"
load "Jenkinsfile.tmp"

}

Mogę być trochę brzydki, ale działa niezawodnie, a ponadto pozwala nam wstawić kod specyficzny dla repozytorium przed lub po współdzielonym kodzie.