Generator pliku Jenkinsfile
Wygeneruj gotowy plik Jenkinsfile (Groovy DSL) dla Jenkins CI/CD. Konfiguruj agenta, Docker, testy, wdrożenie i opcje pipeline bez pisania kodu.
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Styl
deklaratywny zalecany dla nowych pipeline-ów
Agent
Stage-y
Checkout, Build, Test
Limit czasu
timeout(time: N, unit: 'MINUTES')
// Generated by Toolsti Jenkinsfile Builder
// Pipeline: MyApp CI Pipeline
pipeline {
agent any
options {
buildDiscarder(logRotator(numToKeepStr: '30'))
timeout(time: 30, unit: 'MINUTES')
skipDefaultCheckout(true)
timestamps()
ansiColor('xterm')
disableConcurrentBuilds()
}
environment {
JAVA_TOOL_OPTIONS = '-Xmx1g'
MAVEN_OPTS = '-Dmaven.repo.local=.m2'
}
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Build') {
steps {
sh 'mvn -B -DskipTests package'
}
}
stage('Test') {
steps {
sh 'mvn -B test'
}
}
}
post {
always {
junit testResults: '**/target/surefire-reports/*.xml', allowEmptyResults: true
archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true, allowEmptyArchive: true
cleanWs()
}
}
}
| Element | Co generuje silnik |
|---|---|
| Deklaratywny | pipeline { agent → options → triggers → environment → stages → post }; opcje wg checkboxów: buildDiscarder(logRotator(numToKeepStr: '30')), timeout(time: 30, unit: 'MINUTES'), skipDefaultCheckout(true), timestamps(), ansiColor('xterm'), disableConcurrentBuilds() |
| Skryptowy | node('etykieta') { stage('...') { sh '...' } } — lżejszy szkielet Groovy: Checkout (checkout scm albo GitSCM z URL i gałęzią), Build, Test, Lint, Extra Steps; bez bloków options i post |
| Agent | any → agent any; etykieta → agent { label 'linux' }; docker → agent { docker { image 'maven:3.9...' args '...' reuseNode true } } — dokładnie te trzy warianty obsługuje formularz |
| Stage-y wg opcji | stałe: Checkout, Build; opcjonalne: Test (komenda testów), Lint (checkbox + komenda lint), Extra Steps (dodatkowe kroki), Docker Build (checkbox; przy push z withCredentials), Deploy (checkbox + komenda wdrożenia) |
| Przykładowy stage | stage('Build') { steps { sh 'mvn -B -DskipTests package' } } — komenda wieloliniowa trafia do bloku sh w potrójnych apostrofach (heredoc Groovy) |
| post { always } | junit testResults: '**/target/surefire-reports/*.xml', allowEmptyResults: true; archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true; cleanWs() przy włączonym czyszczeniu przestrzeni roboczej |
| Wyzwalacze i env | cron(wyzwalacz harmonogram) pojawia się tylko, gdy podasz wyrażenie cron; zmienne środowiskowe z pola env_vars trafiają do bloku environment (klucz = 'wartość') |
Jenkinsfile trafia do repozytorium — traktuj go jak kod: bez haseł i tokenów, przeglądany w pull requestach. Plik ma nazwę bez rozszerzenia i leży w katalogu głównym projektu albo w ścieżce wskazanej w zadaniu (Pipeline script from SCM).
Warto wiedzieć — CI/CD a sekrety
Sekrety poza plikiem
Jenkinsfile leży w repozytorium, więc każde hasło wpisane dosłownie (w env_vars, komendach czy Deploy) staje się tajemnicą firmową dla wszystkich czytających git. Poświadczenia trzymaj w Jenkins Credentials Store i wstrzykuj przez withCredentials — kod tego narzędzia przy pushu do Dockera generuje dokładnie ten wzorzec (credentialsId).
docker login bez śladu
Wygenerowany stage logowania używa echo "${DOCKER_PASS}" | docker login --password-stdin — hasło idzie strumieniem, a nie flagą -p, która zostaje w historii procesów i outputach ps. To samo dotyczy npm publish, helm registry i każdego CLI z flagą hasła.
Logi builda też wyciekają
Jenkins maskuje wartości wypisane w bloku withCredentials, ale już echo $MOJ_TOKEN spoza tego bloku trafia do konsoli builda wprost. Ogranicz widoczność logów (Project-based security), rotuj sekrety po incydencie i nie loguj pełnych komend z --verbose.
Higiena pipeline-u
buildDiscarder czyszczy stare buildy (domyślnie 30), timeout zabija zawieszone joby, disableConcurrentBuilds chroni przed równoległym deploym na ten sam serwer, a cleanWs() w post{always} nie przenosi artefaktów między buildami. Te cztery opcje to minimum porządku w CI.
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćBuilder pliku Jenkinsfile
Narzędzie online do generowania gotowych plików Jenkinsfile dla Jenkins CI/CD. Wystarczy wypełnić formularz — narzędzie tworzy poprawny, działający skrypt pipeline w formacie Groovy DSL, gotowy do umieszczenia w repozytorium.
Do czego służy
Builder pliku Jenkinsfile pozwala każdemu programiście i inżynierowi DevOps szybko wygenerować plik konfiguracyjny dla Jenkins bez konieczności ręcznego pisania składni Groovy DSL. Narzędzie obsługuje oba style pipeline — deklaratywny (zalecany przez Jenkins) oraz skryptowy. Możesz skonfigurować agenta (dowolny węzeł, węzeł z etykietą lub kontener Docker), etapy budowania, testowania, lintowania i wdrożenia, integrację z rejestrami Docker, zbieranie raportów JUnit i artefaktów, zmienne środowiskowe, harmonogram cron oraz opcje takie jak znaczniki czasu, kolory ANSI czy wyłączenie równoległych buildów.
Jak używać
1. Wpisz nazwę projektu i wybierz styl pipeline (deklaratywny lub skryptowy). 2. Skonfiguruj agenta — dowolny węzeł, węzeł z etykietą lub agent Docker z konkretnym obrazem. 3. Podaj komendy budowania, testowania (opcjonalnie) i lintowania (opcjonalnie). 4. W razie potrzeby włącz budowanie obrazu Docker i wdrożenie. 5. Kliknij „Przetwórz" — gotowy Jenkinsfile pojawi się w ciemnym edytorze po prawej stronie. Skopiuj go do schowka lub pobierz bezpośrednio jako plik Jenkinsfile i umieść w głównym katalogu repozytorium.
Jak działa generator Jenkinsfile
Generator nie analizuje repozytorium i nie łączy się z serwerem Jenkinsa. Działa w całości w przeglądarce: wartości z formularza trafiają do szablonu Groovy DSL, a wynik jest zwykłym tekstem. Nic nie jest wysyłane na żadną maszynę i nic nie jest wykonywane — wpisane komendy są wyłącznie przepisywane do pliku, a uruchomi je dopiero agent Jenkinsa po commicie do repozytorium.
Mechanizm sprowadza się do trzech kroków: odczyt pól, złożenie bloków i sformatowanie całości. Każde pole odpowiada konkretnej dyrektywie — agent, environment, options, triggers, stages, post. Puste pole nie tworzy bloku: jeśli nie podasz komendy testów, w pliku nie pojawi się żaden etap testowania, a jeśli nie zaznaczysz archiwizacji artefaktów, nie zobaczysz wywołania archiveArtifacts. Dzięki temu wynik nie zawiera pustych sekcji, które trzeba by usuwać ręcznie.
Drugi mechanizm to wybór stylu. W trybie deklaratywnym generator buduje szkielet pipeline { agent ... stages { stage { steps { sh '...' } } } } i domyka go blokiem post z sekcjami always, success i failure. W trybie skryptowym powstaje blok node { ... } z krokami opakowanymi w Groovy, a zamiast sekcji post stosuje się konstrukcję try/catch/finally. Generator pilnuje przy tym wcięć, cudzysłowów i kolejności bloków, bo w pipeline deklaratywnym kolejność sekcji nie jest dowolna, a błędne wcięcie to najczęstsza przyczyna komunikatu o nieoczekiwanym kroku.
Przykład: Jenkinsfile dla aplikacji Node.js krok po kroku
- Wpisz nazwę projektu, na przykład sklep-api, i pozostaw styl deklaratywny, czyli Declarative Pipeline. Nazwa posłuży do opisania pipeline'u w pliku.
- W sekcji agenta wybierz opcję Docker i podaj obraz node:alpine, żeby wszystkie kroki wykonywały się w kontenerze z Node.js, a nie na współdzielonym agencie z nieprzewidywalnym środowiskiem.
- Uzupełnij komendy: budowanie — npm ci, testy — npm test, lintowanie — npm run lint. Każda z nich trafi do osobnego etapu i zostanie wywołana krokiem sh.
- Zaznacz zbieranie raportów JUnit oraz archiwizację artefaktów, np. katalogu dist. Dodaj zmienną środowiskową NODE_ENV o wartości production i wpisz harmonogram cron w formacie Jenkinsa, na przykład H 2 * * 1-5.
- Włącz opcje timestamps(), ansiColor('xterm') i disableConcurrentBuilds(), żeby log miał znaczniki czasu, kolory w konsoli, a dwa buildy tej samej gałęzi nie nakładały się na siebie.
- Kliknij „Przetwórz”. W edytorze po prawej stronie pojawi się gotowy plik z blokiem pipeline, agentem Docker, trzema etapami i sekcją post. Skopiuj go do schowka i zapisz w katalogu głównym repozytorium pod nazwą Jenkinsfile, a następnie dodaj do kontroli wersji razem z resztą kodu.
Mapowanie pól formularza na dyrektywy Jenkinsfile
| Pole w formularzu | Dyrektywa w pliku | Kiedy się pojawia |
|---|---|---|
| Styl pipeline | pipeline { } albo node { } | Zawsze — decyduje o całej strukturze pliku |
| Agent | agent any, agent { label '...' } lub agent { docker { image '...' } } | Zawsze, na początku bloku pipeline |
| Komenda budowania | stage('Build') { steps { sh '...' } } | Gdy pole budowania nie jest puste |
| Komenda testów | stage('Test') oraz krok junit | Gdy podano komendę testów |
| Lintowanie | stage('Lint') { steps { sh '...' } } | Gdy podano komendę lintowania |
| Zmienne środowiskowe | environment { NAZWA = 'wartosc' } | Gdy dodano co najmniej jedną parę klucz–wartość |
| Harmonogram | triggers { cron('...') } w stylu deklaratywnym | Gdy wpisano wyrażenie cron |
| Opcje builda | options { timestamps(); ansiColor('xterm'); disableConcurrentBuilds() } | Dla każdej zaznaczonej opcji osobny wpis |
| Artefakty i obraz Docker | archiveArtifacts, docker build i docker push | Gdy włączono archiwizację lub budowanie obrazu |
Praktyczne wskazówki
- Trzymaj jeden etap na jedną odpowiedzialność — osobny stage dla budowania, testów i lintowania daje czytelny widok w interfejsie Jenkinsa i pozwala od razu zobaczyć, który krok padł.
- Nie wpisuj sekretów wprost do pliku — tokeny rejestru Docker, klucze wdrożeniowe i hasła trzymaj w Jenkins Credentials, a w Jenkinsfile odwołuj się do nich przez credentials(). Wygenerowany plik łatwo trafia do repozytorium, więc wszystko, co w nim zapiszesz, staje się publiczne dla osób z dostępem do kodu.
- Ustawiaj opcje na poziomie całego pipeline'u — znaczniki czasu, kolory ANSI i blokada równoległych buildów dotyczą całego uruchomienia, a nie pojedynczego etapu, dlatego należą do sekcji options, a nie steps.
- Nadaj plikowi standardową nazwę i miejsce — konwencja to plik Jenkinsfile w katalogu głównym repozytorium; wtedy konfiguracja joba typu pipeline z SCM nie wymaga podawania własnej ścieżki.
- Wersjonuj zmiany jak kod produkcyjny — modyfikacje Jenkinsfile wprowadzaj przez pull request i sprawdzaj na gałęzi testowej, zanim pójdą na gałąź główną.
Czego narzędzie nie zrobi
- Nie waliduje komend — polecenia są przepisywane dosłownie. Literówka w komendzie albo brak odpowiedniego skryptu w pliku konfiguracyjnym projektu ujawni się dopiero podczas builda na agencie.
- Nie sprawdza dostępnych wtyczek — agent Docker, zbieranie raportów JUnit, kolory ANSI i kroki rejestru obrazów wymagają odpowiednich wtyczek zainstalowanych na kontrolerze Jenkinsa. Generator nie ma wglądu w konfigurację serwera.
- Nie tworzy bibliotek współdzielonych ani logiki multibranch — wygenerowany plik to pojedynczy pipeline. Dyrektywy bibliotek, własne kroki i konfiguracja skanowania gałęzi pozostają po stronie joba i repozytorium.
- Nie zna realiów Twojego środowiska — etykiety węzłów, nazwy poświadczeń, ścieżki artefaktów, strefa czasowa Jenkinsa i nazwy rejestrów to wartości, których narzędzie nie zgadnie. Po wygenerowaniu pliku trzeba je dopasować ręcznie.
- Nie generuje pliku Dockerfile ani skryptów pomocniczych — jeśli pipeline buduje obraz, sam Dockerfile i konfiguracja aplikacji muszą już istnieć w repozytorium.
Najczęstsze pytania
Czym różni się pipeline deklaratywny od skryptowego?
Pipeline deklaratywny (Declarative Pipeline) to nowszy, zalecaný format z czytelną, ustrukturyzowaną składnią opartą na blokach pipeline { }. Obsługuje wbudowane opcje jak timeouty, wyzwalacze i sekcję post. Pipeline skryptowy (Scripted Pipeline) to starszy format oparty na bloku node { } z pełną swobodą Groovy — przydatny przy skomplikowanej logice warunkowej.
Czy wygenerowany Jenkinsfile od razu działa z moim projektem?
Tak — wygenerowany plik zawiera kompletną, poprawną składnię Groovy DSL. Wystarczy umieścić go w głównym katalogu repozytorium (jako plik o nazwie Jenkinsfile) i wskazać go w konfiguracji zadania Jenkins (Pipeline from SCM). Ewentualne dostosowania (np. konkretne komendy buildowania) podajesz bezpośrednio w formularzu.
Jak dodać zmienne środowiskowe do pipeline?
W polu „Zmienne środowiskowe" wpisz pary klucz=wartość, każdą w nowej linii, np. JAVA_TOOL_OPTIONS=-Xmx1g. Narzędzie automatycznie umieści je w sekcji environment { } pipeline, dostępne we wszystkich stage'ach.
Czy mogę używać agenta Docker?
Tak. Wybierz typ agenta „Agent Docker" i podaj nazwę obrazu (np. maven:3.9-eclipse-temurin-17 lub node:20-alpine). Opcjonalnie podaj dodatkowe argumenty Docker. Wygenerowany Jenkinsfile użyje bloku agent { docker { ... } }, a Jenkins automatycznie uruchomi build wewnątrz kontenera.
Czy wygenerowany plik musi nazywać się Jenkinsfile?
Nie musi, ale to domyślna konwencja Jenkinsa. W jobie typu pipeline z SCM można wskazać inną nazwę lub ścieżkę, natomiast trzymanie pliku o nazwie Jenkinsfile w katalogu głównym repozytorium upraszcza konfigurację i jest powszechnie stosowane.
Czy agent Docker w Jenkinsfile wymaga dodatkowej instalacji?
Tak. Potrzebna jest wtyczka Docker Pipeline oraz działający demon Docker dostępny dla agenta. Bez tego krok z agentem kontenerowym zakończy się błędem już na starcie builda.
Co oznacza litera H w harmonogramie cron?
H to skrót od hash — Jenkins rozkłada nim obciążenie, żeby wiele jobów nie startowało w tej samej sekundzie. Standardowy cron tego nie obsługuje, dlatego wyrażenie z H działa tylko w konfiguracji triggerów Jenkinsa.
Który styl pipeline wybrać — deklaratywny czy skryptowy?
Domyślnie deklaratywny, bo jest czytelniejszy, ma wbudowane sekcje post, triggers i options oraz lepiej znosi błędy składni. Styl skryptowy wybierz wtedy, gdy potrzebujesz pętli, warunków i własnej logiki w Groovy.
Czy mogę od razu użyć gotowego pliku na produkcji?
Traktuj go jako poprawny szkielet, nie jako gotową konfigurację. Sprawdź komendy, etykiety agentów, nazwy poświadczeń i ścieżki artefaktów, a całość przepuść najpierw przez build na gałęzi testowej.