Warning: Undefined array key 1 in /DISK2/WWW/lipensky.cz/tomas/inc/auth.php on line 78 automatizace:jenkins [Tomas Lipensky - vedomostni koutek] Warning: Undefined array key "stylesheets" in /DISK2/WWW/lipensky.cz/tomas/inc/StyleUtils.php on line 102
Warning: Undefined array key -1 in /DISK2/WWW/lipensky.cz/tomas/inc/html.php on line 1458

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
automatizace:jenkins [2023/03/30 17:41]
tomas
automatizace:jenkins [2026/01/02 12:34] (current)
tomas [API]
Line 9: Line 9:
 [[http://www.slideshare.net/dstine4/jenkins-and-chef-infrastructure-ci-and-automated-deployment|Prezentace o Jenkinsovi]]\\ [[http://www.slideshare.net/dstine4/jenkins-and-chef-infrastructure-ci-and-automated-deployment|Prezentace o Jenkinsovi]]\\
  
 +==== Dokumentace ====
 +JENKINS_URL/env-vars.html ... popis preddefinovanych promennych\\
 +/queue/api/\\
 +/api\\
 +/script ... scriptovaci konzole\\
 +/jnlpJars/jenkins-cli.jar ... stáhne jenkins-cli.jar pro Jenkins CLI\\
 +
 +====Jenkins CLI====
 +java -jar jenkins-cli.jar -s http://jenkins-test.oskarmobil.cz/ -noCertificateCheck -http -auth user:password  groovy = <plugins.groovy\\
 ==== API ==== ==== API ====
 curl -u UZIVATEL:TOKEN -k https://SERVER/cesta\\ curl -u UZIVATEL:TOKEN -k https://SERVER/cesta\\
Line 25: Line 34:
 https://SERVER/job/SLOZKA/job/SLOZKA/job/deployer/457/consoleText ... výstup z konzole jobu 457 v textové formě\\ https://SERVER/job/SLOZKA/job/SLOZKA/job/deployer/457/consoleText ... výstup z konzole jobu 457 v textové formě\\
 https://SERVER/job/SLOZKA/job/SLOZKA/job/deployer/457/consoleFull ... výstup z konzole jobu 457 v HTML formě\\ https://SERVER/job/SLOZKA/job/SLOZKA/job/deployer/457/consoleFull ... výstup z konzole jobu 457 v HTML formě\\
 +https://SERVER/pluginManager/api/xml?depth=1&xpath=/*/*/shortName|/*/*/version&wrapper=plugins ... seznam pluginů a jejich verzí\\
 ==== Skripty Groovy ==== ==== Skripty Groovy ====
 [[https://groovy-lang.org/documentation.html|Groovy]] jazyk\\ [[https://groovy-lang.org/documentation.html|Groovy]] jazyk\\
-[[https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#using-environment-variables|Environment variables]] ... výchozí hodnoty prostředí Jenkinse\\+[[https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#using-environment-variables|Environment variables]] ... výchozí hodnoty prostředí Jenkinse, přistupuje se k nim přes ${env.WORKSPACE}\\
  
 === Kostra kódu === === Kostra kódu ===
 +kdekoliv může být definice proměnné, ne jen v environment sekci:
 +def skipPublishDefault = (BRANCH_NAME == 'hotfix') ? true : false ... podmíněná definice
 +
 <code> <code>
 @Library([path]) @Library([path])
Line 36: Line 48:
   agent none //   agent none //
   options {}   options {}
 +  triggers {}
   parameters {}   parameters {}
   environment {}   environment {}
   stages {   stages {
-    stage { +    stage {} 
-      step {} +    stage {} 
-    }+    post {}
   }   }
   post {}   post {}
 +}
 +</code>
 +
 +nebo když se nedefinuje akce souborem ale v UI:
 +
 +<code>
 +node {
 +  stage {}
 +  stage {}
 } }
 </code> </code>
  
 === sekce agent === === sekce agent ===
 +label "docker" || "linux" ... selekce agenta podle labelu\\
 +
 +any ... jakykoliv
 +
 +none ... žádný agent se nealokuje
 +
 +node {} ... jak label, ale umožňuje další možnosti, vice na [[https://www.jenkins.io/doc/book/pipeline/syntax/]]
 +
 +<code>docker {
 +image 'maven:1.2.3'
 +label 'moje'
 +args '-v /tmp'
 +registryUrl 'https://myregistry.com/'
 +registryCredentialsId 'myPredefinedCredentialsInJenkins'
 +}</code>
 +
 +dockerfile {} ... vice na [[https://www.jenkins.io/doc/book/pipeline/syntax/]]
 +
 +<code>kubernetes {
 +                            label "android-slave-dynamic"
 +                            defaultContainer "android-slave"
 +                            yaml libraryResource("agents/android-agent.yaml")
 +                        }</code>
 +
 +
 +=== tools ===
 +sekce v pipeline, nainstaluje pro běh na agentovi nástroj dané verze: maven, jdk, gradle
 +
 +=== sekce triggers ===
 +cron cron('H */4 * * 1-5') ... časové spouštění
 +
 +pollSCM('H */4 * * 1-5')
 +
 +upstream(upstreamProjects: 'job1,job2', threshold: hudson.model.Result.SUCCESS) ... když skončí specifikované joby specifikovaným tresholdem
 +
 +
 === sekce options === === sekce options ===
 +Parametry celkového běhu, komplet popis viz [[https://www.jenkins.io/doc/book/pipeline/syntax/]]
 +
 +disableConcurrentBuilds()\\
 +buildDiscarder(logRotator(numToKeepStr: '40', artifactNumToKeepStr: '40'))\\
 +timeout(time: 3, unit: 'HOURS')\\
 +timestamps ()\\
 +
 === sekce parameters === === sekce parameters ===
 +vstupní parametry pro běh pipeliny
 +
 +''%%string name: 'SERVICE_NAME', description: 'Service name.', trim: true%%'' ... textový parametr\\
 +''%%choice name: 'ENVIRONMENT', choices: ['dev', 'stg'], defaultValue: 'NotProvided', description: 'Target environment.'%%'' ... výběr\\
 +''%%booleanParam name: 'PIPELINE_REFRESH', description: """
 +OPTIONAL
 +Reload this pipeline from pipeline definition, parameters etc."""%%'' ... pravda, nepravda, popis na víc řádků\\
 +text(name: 'BIOGRAPHY') ... víceřádkový text\\
 +password(name: 'PASSWORD') ... heslo - skryje se v logu\\
 +
 === sekce environment === === sekce environment ===
-=== sekce stages ===+Proměnné, přistupuje se k nim přes ${TARGET} 
 + 
 +KLIC = 'hodnota'\\ 
 +SETTINGS_XML = credentials('maven_settings') ... mžnost použít i secret text\\ 
 + 
 +=== sekce stage === 
 +agent {} ... viz sekce agent\\ 
 +when {} ... podmínka, kdy step jede a jestli\\ 
 +environment {} ... viz sekce environment\\ 
 +options {} ... parametry pro stage, jako trřeba timeout, více na [[https://www.jenkins.io/doc/book/pipeline/syntax/]]\\ 
 +input {} ... uživatlský vstup\\ 
 +stages {} || parallel {} || matrix {} || steps {} ... obsahuje max. 1 z uvedených\\ 
 +try {} catch () {}\\ 
 +for (int i = 0; i < browsers.size(); ++i) { echo "${pole[i]} " }\\ 
 + 
 +=== sekce when === 
 +beforeAgent true\\ 
 +expression { !params.SPUSTIT && BRANCH ==~ /(dev|test|PR-.*)/ }\\ 
 + 
 +=== sekce steps === 
 +script {} ... umožnuje vnořit akce, včetně smyček atd.\\ 
 +if (sharedTools.shouldRun("build")) {} .. podmínka, provede akce v {} když je podmínka spněna\\ 
 +dir('android') {} ... provede akce v {} v adresáři android\\ 
 +script {} ... posloupnost akcí v {}\\ 
 +echo '' ... nativni Jenkins funkce pro echo\\ 
 +sh 'echo ahoj' ... shell skript\\ 
 + 
 +withCredentials() {} ... obsah {} se provede s kredencema načtenýma ze secretu, přiřazenýmá do proměnné\\ 
 +withCredentials([file(credentialsId: "AA${BB}", variable: 'VAR')]) { writeFile file: '.env.'+ ENV_TYPE.toLowerCase(), text: readFile(VAR) }\\ 
 +withCredentials([ string(credentialsId: 'AA', variable: 'BB'), string(credentialsId: 'CC', variable: 'DD') ]) { echo "${CC} ${DD}"} 
 +%%withCredentials([ usernamePassword(credentialsId: 'dxl-cz-github-user', usernameVariable: 'username', passwordVariable: 'password') ]) {sh 'git remote set-url origin "https://${username}:${password}@github.vodafone.com/VFCZ-DXL/${microserviceName}.git"' }%%\\ 
 +withNPM(npmrcConfig: 'npmrcs-cz') {} ... použije file npmrcs-cz a udělá z něj .npmrc\\ 
 +%%checkout([$class: 'GitSCM', branches: [[name: 'develop']], extensions: [[$class: 'CleanBeforeCheckout']],userRemoteConfigs: [[credentialsId: 'secret1',url: 'https://user@github.bbb.com/ccc/ddd.git']]])%%\\ 
 +withDockerRegistry([credentialsId: 'aaa', url: "https://REPOSITORY"]) ... provede docker login s kredencema\\ 
 + 
 +<code>configFileProvider([fileId:'conf_file', variable:'soubor']) { 
 +      script { 
 +        echo "Ctu soubor '${soubor}' ..."  
 +        servers = readJSON(file:soubor)  } }</code> 
 + 
 + 
 +=== sekce post === 
 +Je buď ve sekci pipelines, nebo steps, více viz [[https://www.jenkins.io/doc/book/pipeline/syntax/]]. Je to jako step, ale záleží na okolnostech: 
 + 
 +always {} ...vždy\\ 
 +changed {} ... jen když se změnil status od minulého běhu (success > fail např.)\\ 
 +fixed {} ... \\ 
 +regression {} ...\\ 
 +aborted {} ... jen, když se běh přeruší\\ 
 +success {} ... jen když vše bylo v pořádku\\ 
 +unstable {} ...\\ 
 +unsuccessful {} ...\\ 
 +cleanup {} ... poslední step, provede se po všech ostatních post krocích, ať dopadly jakkoli\\ 
 + 
 +=== Definice funkcí === 
 +def call(body) {def pipelineParams = [:] } ... definice funkce v knihovně. 1 soubor = jedna funkce, název funkce = název souboru, např. /vars/aaa.groovy, funkce aaa(parametr1=2), pipelineParams.parametr1 je vstupní parametr s hodnotou 2\\