În această a doua și ultima parte a seriei, vom analiza pluginul Jenkins Workflow ca o soluție pentru instalarea unor conducte mai complexe Jenkins.
Vom lua unde o parte din serie a rămas. În prima parte, Jeff Reifman te-a călăuzit prin înființarea unei instanțe Jenkins pe Oceanul Digital și creând prima dvs. construcție Jenkins. Dacă nu l-ați citit încă, vă recomand să faceți acest lucru înainte de a continua. E în regulă ... aștept. Pot fi foarte răbdătoare ...
... toți prinși? Grozav! Să o facem.
Jenkins Workflow este un plugin pentru Jenkins. Odată instalat, devine disponibil un nou tip de element: un "flux de lucru". Proiectele de flux de lucru pot fi utilizate în aceleași scopuri ca proiectele obișnuite "Freestyle" Jenkins, dar au și capacitatea de a orchestra sarcini mult mai mari care pot include mai multe proiecte și chiar să creeze și să gestioneze mai multe spații de lucru într-un singur flux de lucru. Mai mult, toate aceste gestionări pot fi organizate într-un script unic, în loc să se răspândească într-o colecție de configurații, proiecte și pași.
Înainte de a începe construirea fluxurilor de lucru, trebuie să instalați pluginul Jenkins Workflow. Din tabloul de bord Jenkins, faceți clic pe Gestionați Jenkins, atunci Gestionați pluginurile. Treceți la Disponibil și căutați "Workflow".
Bifați caseta pentru Plugin de flux de lucru, atunci Instalați fără a reporni.
Acum, aici este captura. Există mai multe pluginuri numite "Workflow Plugin", deci va trebui să repetați pașii de mai sus de mai multe ori. Alternativ, puteți face clic pe mai multe casete de selectare sau puteți instala pluginul Workflow Aggregator.
Odată ce "Workflow Plugin" nu mai apare în lista pluginurilor disponibile, atunci continuați și reporniți Jenkins navigând la /repornire
și făcând clic da.
Hai să ne umezi picioarele fluxului de lucru. Vom lua proiectul pe care l-a creat Jeff în prima parte și îl vom construi ca pe un flux de lucru.
Pentru a începe, mergeți la Tabloul de bord Jenkins și faceți clic pe Articol nou. Denumiți noul element "Test Shell (Workflow)" și selectați Fluxul de lucru tip.
Clic O.K pentru a crea noul proiect. Veți ateriza pe pagina de configurare a proiectului.
Veți observa că opțiunile de configurare diferă de proiectele standard Jenkins. Nu mai există opțiuni pentru a adăuga o repo GitHub, a crea pași sau a activa post-construirea. În schimb, este o nouă secțiune numită Fluxul de lucru.
În secțiunea flux de lucru există o casetă de text etichetate scenariu. Acesta este locul în care veți defini scriptul de flux de lucru pe care Jenkins îl va rula atunci când inițiază o construcție a proiectului.
"Ce tip de scenariu?". Întrebare excelentă. Plugin-ul Jenkins Workflow utilizează o limbă numită Groovy pentru scripturile sale. Groovy este un limbaj versatil de scripting pentru JVM. Nu vă faceți griji, nu aveți nevoie să cunoașteți Groovy sau Java pentru a face lucrurile să funcționeze - pluginul Jenkins Workflow utilizează un mic DSL pe lângă Groovy și este foarte ușor să combinați comenzi pentru a vă dezvolta fluxul de lucru al proiectului.
Mergeți mai departe și adăugați următoarele în caseta de script:
java nod git 'https://github.com/redhotvengeance/hello-jenkins.git' sh 'uptime'
Deci, ce se întâmplă aici?
În primul rând, deschidem o nodul
bloc. Nodurile sunt acolo unde se întâmplă acțiunile fluxului de lucru. Când alocați a nodul
, este creat un nou spațiu de lucru (un context / dosar). Toate codul în cadrul nodul
bloc execută în interiorul acelui spațiu de lucru. Acest lucru vă ajută să vă asigurați că pașii de construire nu se poluează reciproc.
Apoi rulam o comandă Git cu git "https://github.com/redhotvengeance/hello-jenkins.git"
. Această comandă clonează replica Git în spațiul nostru de lucru.
În cele din urmă, îi spunem Workflow să execute timpul de funcționare
shell comanda cu sh 'uptime'
.
Clic Salvați, și vei fi dus la pagina de destinație a proiectului. În meniul din stânga este un buton etichetat Construiți acum. Faceți clic pe acesta pentru a începe o construcție.
Odată ce construirea este completă, dați clic pe construiți # 1 găsite în Construiți istoria secțiune. Apoi apasa Consola de ieșire în meniul din stânga.
Aici putem vedea totul logat în timp ce execuția a fost executată. A început prin alocarea unui nod în spațiul de lucru "Testul Shell (Workflow)". Apoi a adus repo Git. În cele din urmă, a executat timpul de funcționare
shell script, care a tipărit statisticile serverului de uptime.
Si asta e! Acum am creat aceiași pași ca și configurarea normală a proiectului Jenkins în prima parte, cu excepția acestui moment ca un flux de lucru. Acum, să folosim aceleași concepte pentru a face ceva mai complex.
Înainte de a ne putea crea fluxul de lucru complex, avem nevoie de munca care va trece prin el. Proiect fals la salvare!
Deoarece deja folosim Groovy pentru a ne scrie scriptul fluxului de lucru, să folosim Gradle pentru proiectele noastre false. Gradle este un sistem de construcție care utilizează Groovy (surprinzător, știu!). Pentru a folosi Gradle, va trebui să o instalăm pe serverul nostru. SSH în serverul dvs. (verificați partea a doua a lui Jeff, dacă aveți nevoie să vă reîmprospătați memoria) și rulați:
shell sudo apt-get instala grală
Acolo ... e bine să mergem.
Vom folosi două repo-uri în noul nostru flux de lucru. Primul este constructorul. Proiectul constructorului nostru este foarte simplu - are un script de construcție Gradle în el cu următorul cod:
sarcina groovy createBuild << new File("built.txt").write("You cannot pass.\n")
Ce se întâmplă aici? Gradle funcționează executând "sarcini", iar scriptul de construire Gradle definește aceste sarcini. Am definit o sarcină numită createBuild
, și ceea ce face este să creați un fișier text numit built.txt
cu conținutul:
Nu puteți trece.
Asta e. (Ei bine, eu făcut spuneți că a fost simplu!)
Al doilea replica Git este ambalatorul nostru. Împachetatorul are, de asemenea, un script de construcție Gradle, însă este mai complex:
groovy task createPackage << String packageText = "I am a servant of the Secret Fire, wielder of the flame of Anor. You cannot pass. The dark fire will not avail you, flame of Udûn. Go back to the Shadow!" String builtText = new File('built.txt').text new File("package.txt").write(packageText + "\n\n" + builtText)
createPackage
De asemenea, sarcina creează un fișier text (numit package.txt
), dar se așteaptă să utilizeze conținutul built.txt
, care nu există în repo de ambalare. Dacă built.txt
a existat în repo, generat package.txt
ar conține:
Sunt un slujitor al Focului Secret, care se aprinde de flacăra lui Anor. Nu puteți trece. Focul întunecat nu te va folosi, flacăra lui Udûn. Du-te înapoi la Umbra!
Nu puteți trece.
Dacă built.txt
lipsește, a noastră createPackage
sarcina va arunca o eroare.
Deci, de fiecare dată când construim ambalatorul nostru, trebuie să executăm mai întâi constructorul nostru și să facem rezultatul built.txt
disponibil pentru ambalator, astfel încât să poată crea package.txt
.
Și exact asta vom face să facem un flux de lucru Jenkins!
Veniți la tabloul de bord Jenkins, faceți clic pe Articol nou, denumiți-l "Asamblare", selectați Fluxul de lucru, și faceți clic pe O.K.
Să începem scriptul. În primul rând, vom deschide o nodul
bloc, la fel ca înainte:
"nod java
“
Apoi, hai clona repo constructorul nostru:
java nod git 'https://github.com/redhotvengeance/jenkins-workflow-build.git'
Acum trebuie să executați scriptul de construire Gradle pentru a genera built.txt
fişier:
java nod git 'https://github.com/redhotvengeance/jenkins-workflow-build.git' sh 'grală createBuild'
În cele din urmă, hai să ne asigurăm că totul funcționează așa cum ne așteptăm. Vom adăuga o pisică
pentru a imprima conținutul built.txt
fişier:
nodul java git 'https://github.com/redhotvengeance/jenkins-workflow-build.git "sh' grab createBuild 'sh' cat ./built.txt '
Clic Salvați, și apoi începeți o construcție. Odată ce ați terminat, aruncați o privire la Consola de ieșire.
Excelent! Clonăm cu succes repo-ul, executându-l createBuild
și au confirmat că conținutul built.txt
este Nu puteți trece.
. Acum, la ambalator.
La fel ca și constructorul, trebuie să clonăm repo-ul nostru de ambalare. Să adăugăm codul de ambalare:
"nodul java git 'https://github.com/redhotvengeance/jenkins-workflow-build.git" sh' grab createBuild 'sh' cat ./built.txt '
nodul git 'https://github.com/redhotvengeance/jenkins-workflow-package.git' sh 'grala createPackage' sh 'cat ./package.txt' "
Deoarece nu am creat în mod explicit un spațiu de lucru nou, createPackage
sarcina va rula în același spațiu de lucru ca și createBuild
sarcină, ceea ce înseamnă că built.txt
fișier pe care ambalatorul îl așteaptă va fi disponibil.
Dă-i drumul și Salvați și Construiți acum, și apoi vizualizați Consola de ieșire.
Totul a fugit așa cum era de așteptat - constructorul nostru a fost clonat și a fugit, iar ambalatorul nostru a fost clonat și a fugit. Și dacă ne uităm la ieșire - acolo este! Balrogul lui Morgoth a fost pe deplin Gandalf.
Contrived? Cel mai sigur.
Dar un concept complex este într-adevăr doar o grămadă de concepte simple împrăștiate împreună. La suprafață, am adunat discursul lui Gandalf pe podul lui Khazad-dûm. Dar, într-adevăr, am luat rezultatul construirii unui proiect și l-am injectat în producția unui alt proiect.
Ce se întâmplă dacă în loc de dialogul lui Gandalf, ieșirile de execuție erau executabile din baze de coduri separate, care trebuie să fie asamblate împreună pentru software-ul pe care îl expediați? Ați folosi același flux de lucru pe care l-am creat aici: clonarea, construirea, copierea și ambalarea. Cu pluginul pentru flux de lucru Jenkins, tot ce a durat a fost câteva rânduri de Groovy. Și ca un bonus, totul este conținut într-un singur scenariu!
Există, de asemenea, alte instrumente disponibile pentru a ajuta la gestionarea și vizualizarea unui flux de lucru Jenkins. CloudBees oferă o funcție de vizualizare a fluxului de lucru pe platforma lor enterprise Jenkins.
Acest lucru numai zgârie suprafața a ceea ce se poate face cu plugin-ul Jenkins Workflow. Asigurați-vă că verificați linkurile aferente de mai jos pentru a afla mai multe.
Mult noroc ca lucrarea voastra sa curga!