среда, 8 апреля 2020 г.

Jenkins pipeline jobs

Помимо Freestyle задач, если pipeline, это код на груви. Главные преимущества - переносимость, возможность держать конфиги в системе контроля версий, сами pipelines можно прямо из гита вызывать, можно код положить в Jenkinsfile и передавать вместе с проектом.
Минусы - сложность освоения, зачастую совершенно невнятные ошибки, что раньше в вебе накликивалось за пол часа, теперь надо долго и вдумчиво писать.
Чуть добавляет сложности то, их несколько видов, и они не очень совместимы.
По синтаксису: scripted, declarative
Pipeline, multibranch pipeline

Intro
https://jenkins.io/doc/book/pipeline/getting-started/
https://github.com/jenkinsci/pipeline-plugin/blob/master/TUTORIAL.md

Next
https://jenkins.io/doc/book/pipeline/syntax/

2 models
https://jenkins.io/doc/pipeline/steps/pipeline-model-definition/

For plugins
https://jenkins.io/doc/pipeline/steps/

Очень достойные документы, где описано очень много полезного. post, when... Хотя бы по диагонали но прочитать.
https://www.blazemeter.com/blog/how-to-use-the-jenkins-scripted-pipeline/
https://www.blazemeter.com/blog/how-to-use-the-jenkins-declarative-pipeline/

Advanced:
https://www.cloudbees.com/blog/top-10-best-practices-jenkins-pipeline-plugin

PS
Раньше формат вызова плагинов был примерно таким
step([$class: 'ArtifactArchiver', artifacts: 'something'])
В новом синтаксисе (года с 2016) это гораздо читаемее и сокращается до
archiveArtifacts 'something'
Но. Не всегда. Например, в 2020 у плагина Mailer существует только такой формат вызова
step([$class: 'Mailer']): E-mail Notification
https://jenkins.io/doc/pipeline/steps/mailer/

Чуть больше про это
https://stackoverflow.com/questions/48797509/class-syntax-in-jenkins-scripted-dsl

PS2
When a recorder is run from a pipeline, it might set the build’s status (for example to unstable), but otherwise is likely to work intuitively. Running a notifier is trickier since normally a pipeline in progress has no status yet, unlike a freestyle project whose status is determined before the notifier is called. To help interoperate better with these, you can use the catchError step, or manually set a build status using currentBuild.result. See the help for the catchError step for examples.

https://github.com/jenkinsci/workflow-basic-steps-plugin/blob/master/src/main/resources/org/jenkinsci/plugins/workflow/steps/CatchErrorStep/help.html
catchError : This step is most useful when used in Declarative Pipeline or with the options to set the stage result or ignore build interruptions. Otherwise, consider using plain try-catch-finallyblocks.

Комментариев нет:

Отправить комментарий