Vo všeobecnosti je považované za dobrú “best practice” vytvárať a načítať pipeline skript z iného zdroja, ktorý môžete použiť pomocou verziovacieho systému (VCS). Komplexný pipeline skript je ťažkopádne písať a udržiavať v rámci rozhrania UI Jenkins-u.
Používanie Jenkinsfile v rámci repozitára prináša niekoľko výhod:
Groovy skript môže obsahovať funkcie (napríklad def test(type) {
), podmienené kroky/testy, cykly, try/catch/finally bloky, premenné (pomocou príkazu def def premenna = hodnota
) a podobne.
#!groovy
node {
try {
stage('Checkout') {
checkout([
$class: 'GitSCM',
branches: [[name: '*/master']],
browser: [
$class: 'BitbucketWeb',
repoUrl: 'https://bitbucket.org/user/project'
],
doGenerateSubmoduleConfigurations: false,
userRemoteConfigs: [[
credentialsId: 'jenkins',
url: 'git@bitbucket.org:user/project.git'
]]
])
}
stage('Lint') {
sh "find . -type f -name '*.php' -exec php -l {} ; | grep -v \"No syntax errors detected\""
}
stage('Test') {
parallel(
'resultUnit': {
junit 'tests/_output/*.xml'
},
'resultHtml': {
publishHTML([
allowMissing: false,
alwaysLinkToLastBuild: true,
keepAll: false,
reportDir: 'tests/_output/',
reportFiles: 'report.html',
reportName: 'HTML Report'
])
}
)
}
stage('Results') {
echo "Success"
step([$class: 'WsCleanup'])
}
} catch (e) {
currentBuild.result = "FAILED"
throw e
}
}
node {
Vačšina úloh v rámci pipeline skriptu je vykonávaná v kontexte jedného alebo viacerých blokov node.
Vykonáva dve veci:
Pokiaľ máte nakonfigurovaného iného agent-a môžete ho vynútiť tým že zadáte parameter príkazu node, napríklad: node('nazovagenta') {
v inom prípade sa použije hlavný master agent.
Stage je krok, ktorý výtvára podmnožinu v rámci pipeline, napríklad: “Checkout”, “Test”, “Deploy”… Tento krok využívajú mnohé doplnky na vizualizáciu alebo na prezentáciu statusu prípadne postupu.
Paralelizmus vykonáva súčasne veľa práce s prostriedkami, ktoré má k dispozícii.
Dôvody prečo a kedy používať paralelizmus pri spúšťaní:
step([$class: 'WsCleanup'])
Step je úloha na spustenie, ktorá vraví Jenkinsu, čo sa má vykonať.
Napríklad, spustenie shell príkazu sa vykonáva sh([script: 'echo hello'])
, prípadne, skrátena verzia sh 'echo hello'
. Príkaz step([$class: 'WsCleanup'])
vyčistí pracovný priestor vykonávaného job-u.
Na rozdiel od “jednoduchého” používania príkazov git
je príkaz checkout(
všeobecnejší krok špecifikujúci akúkoľvek zložitú konfiguráciu podporovanú doplnom Git.