{"id":15613,"date":"2021-02-16T12:46:47","date_gmt":"2021-02-16T11:46:47","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/jenkins-introduction-to-pipelines\/"},"modified":"2021-02-16T12:46:47","modified_gmt":"2021-02-16T11:46:47","slug":"jenkins-introduction-to-pipelines","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/jenkins-introduction-to-pipelines\/","title":{"rendered":"JENKINS &#8211; Introduction to pipelines"},"content":{"rendered":"<p>Hi,<\/p>\n<p>We already know how to create a build on Jenkins using freestyle job, it&#8217;s a quick way to make a job, but what happened when we want to have complex tasks and workflow to trigger?<\/p>\n<h3>Freestyle job limitation<\/h3>\n<p>Indeed ,it&#8217;s still possible to chain these builds to get a sophisticated workflow,but freestyle jobs are limited by many ways :<br \/>\n-the builds will not survive a restart of Jenkins<br \/>\n-freestyle job is only based on GUI configuration and not as code<br \/>\n-it is also working on sequential steps and can not be resumed at a particular step of the build.<br \/>\nWe have an easier way to perform that workflow and to manage it from the beginning to the end :Using Pipelines<\/p>\n<h3>What is a pipeline?<\/h3>\n<p>A Pipeline is a user-defined model of a CD pipeline. A Pipeline\u2019s code defines your entire build process, which typically includes stages for building an application, testing it and then delivering it.<br \/>\nAlso, a pipeline block is a key part of Declarative Pipeline syntax.<\/p>\n<h3>Some vocabulary related to pipeline<\/h3>\n<p><strong>Jenkins file<\/strong><br \/>\nIt&#8217;s a text file written in Groovy language containing the code of all your workflow,it is stored into a SCM like GitHub for example and can be updated by many ways as using Jenkins master UI or directly from the SCM with a text editor. As it is centralized it allows developers an easy to access it to edit update and check it.<br \/>\n<strong>SCM<\/strong><br \/>\nSource code management,tracks changes of your code stored in a source code repository ,example git or mercurial,it allows you to store a Jenkinsfile and your code on it and to update it from one single point.<\/p>\n<h3>Pipeline structure components<\/h3>\n<div class=\"ulist\">\n<ul>\n<li>Pipeline is structured in sections, called <strong>stages<\/strong><\/li>\n<li>Each <strong>stage <\/strong>includes <strong>steps<\/strong><\/li>\n<li><strong>steps <\/strong>include the actual tests\/commands to run<\/li>\n<li>An <strong>agent <\/strong>defines where the programs and scripts execute<\/li>\n<\/ul>\n<\/div>\n<p><em><strong>Node<\/strong><\/em><br \/>\nA node is a machine which is part of the Jenkins environment and is capable of executing a Pipeline.<br \/>\nAlso, a node block is a key part of Scripted Pipeline syntax.<br \/>\n<em><strong>Stage<\/strong><\/em><br \/>\nA stage block defines a conceptually distinct subset of tasks performed through the entire Pipeline (e.g. &#8220;Build&#8221;, &#8220;Test&#8221; and &#8220;Deploy&#8221; stages), which is used by many plugins to visualize or present Jenkins Pipeline status\/progress.<br \/>\n<em><b>Step<\/b><\/em><br \/>\nA single task. Fundamentally, a step tells Jenkins what to do at a particular point in time (or &#8220;step&#8221; in the process). For example, to execute the shell command make use the sh step: sh &#8216;make&#8217;. When a plugin extends the Pipeline DSL, that typically means the plugin has implemented a new step<\/p>\n<h3>Two types of pipelines<\/h3>\n<ul>\n<li>Scripted pipeline: sequential execution, using Groovy expressions for flow control<\/li>\n<li>Declarative pipeline: uses a framework to control execution ( pre-defined commands to ease pipeline creation )<\/li>\n<\/ul>\n<h3>Scripted pipeline<\/h3>\n<p>The scripted pipeline is a traditional way of writing the Jenkins pipeline as code. Ideally, a Scripted pipeline is written in the Jenkins file on the web UI of Jenkins. Unlike the Declarative pipeline, the scripted pipeline strictly uses groovy based syntax. Since this, The scripted pipeline provides huge control over the script and can manipulate the flow of the script extensively. This helps developers to develop advance and complex pipelines as code.<\/p>\n<ul>\n<li>Executed serially, from top down<\/li>\n<li>Relies on Groovy expressions for flow control\n<div class=\"ulist\">\n<ul>\n<li>Requires extensive knowledge of Groovy syntax<\/li>\n<\/ul>\n<\/div>\n<\/li>\n<li>Very flexible and extensible\n<div class=\"ulist\">\n<ul>\n<li>Limitations are mostly Groovy limitations<\/li>\n<li>Power users with complex requirements may need it<\/li>\n<\/ul>\n<\/div>\n<\/li>\n<li>Novice users can easily mess up the syntax<\/li>\n<\/ul>\n<p><strong>pipeline as code syntax<\/strong> \/<strong>scripted Pipeline<\/strong><br \/>\nNote that the syntax of scripted pipeline is beginning by a &#8220;<strong>node<\/strong>&#8221; block<\/p>\n<pre class=\"CodeRay highlight nowrap\"><code class=\"language-groovy\" data-lang=\"groovy\">node {  \n    stage('Build') { \n        \/\/ \n    }\n    stage('Test') { \n        \/\/ \n    }\n    stage('Deploy') { \n        \/\/ \n    }\n}<\/code><\/pre>\n<h3>quick example using scripted pipeline skeleton<\/h3>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/SCRIPTEDPPLN1LOGEXMPL1-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-47444\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/SCRIPTEDPPLN1LOGEXMPL1-2.png\" alt=\"\" width=\"865\" height=\"346\" \/><\/a><\/p>\n<h3>how to check pipeline log execution<\/h3>\n<p><strong>scripted pipeline output<\/strong><\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/SCRIPTEDPPLN2LOG-output.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-47447\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/SCRIPTEDPPLN2LOG-output.png\" alt=\"\" width=\"703\" height=\"637\" \/><\/a><\/p>\n<p><strong>you can check each steps of the pipeline by clicking on the log tab<\/strong><br \/>\n<a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/SCRIPTEDPPLN1LOGG.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-47441\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/SCRIPTEDPPLN1LOGG.png\" alt=\"\" width=\"704\" height=\"453\" \/><\/a><br \/>\n<a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/SCRIPTEDPPLN2LOG-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-47488\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/SCRIPTEDPPLN2LOG-2.png\" alt=\"\" width=\"704\" height=\"432\" \/><\/a><\/p>\n<h3>Declarative pipeline<\/h3>\n<p>The Declarative pipeline is a new feature that is added to create the pipeline. The workflow is written in a Jenkins file which can be stored into a source code management system such as Git. Declarative pipelines role is to help developer to\u00a0 create simple and quick\u00a0 continuous delivery pipeline using a set of\u00a0 pre-defined commands<\/p>\n<div class=\"ulist\">\n<ul>\n<li>Stricter, pre-defined structure<\/li>\n<li>Execution can always be resumed after an interruption,<br \/>\nno matter what caused the interruption<\/li>\n<li>Requires only limited knowledge of Groovy syntax\n<div class=\"ulist\">\n<ul>\n<li>Using Blue Ocean simplifies the Pipeline creation process even more( will be a specific topic in next blogs )<\/li>\n<\/ul>\n<\/div>\n<\/li>\n<li>Encourages a declarative programming model<\/li>\n<li>Reduces the risk of syntax errors<\/li>\n<li>Use the <strong>script<\/strong> step to include bits of scripted code within a Declarative Pipeline only when you have needs that are beyond the capabilities of Declarative syntax<\/li>\n<\/ul>\n<\/div>\n<p><strong>declarative pipeline syntax<\/strong><br \/>\nNote that the syntax of declarative pipeline is beginning by a &#8220;<strong>pipeline<\/strong>&#8221; block<\/p>\n<div class=\"pipeline-block\">\n<div class=\"listingblock pipeline-declarative\">\n<div class=\"title\">Jenkinsfile (Declarative Pipeline)<\/div>\n<div class=\"content\">\n<pre class=\"CodeRay highlight nowrap\"><code class=\"language-groovy\" data-lang=\"groovy\">pipeline {\n    agent any <i class=\"conum\" data-value=\"1\"><\/i>\n    stages {\n        stage('Build') { <i class=\"conum\" data-value=\"2\"><\/i>\n            steps {\n                \/\/ <i class=\"conum\" data-value=\"3\"><\/i>\n            }\n        }\n        stage('Test') { <i class=\"conum\" data-value=\"4\"><\/i>\n            steps {\n                \/\/ <i class=\"conum\" data-value=\"5\"><\/i>\n            }\n        }\n        stage('Deploy') { <i class=\"conum\" data-value=\"6\"><\/i>\n            steps {\n                \/\/ <i class=\"conum\" data-value=\"7\"><\/i>\n            }\n        }\n    }\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p>You can store your Jenkinsfile with all your codes in SCM and call them in Jenkins master jobs (in next blog we will go deeper in this topic)<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/SCRIPTEDPPLGIT.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-47509\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/SCRIPTEDPPLGIT.png\" alt=\"\" width=\"894\" height=\"286\" \/><\/a><\/p>\n<p>Note that you can update the Jenkinsfile directly with a text editor in Github (for my case)<br \/>\n<strong><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/SCRIPTEDPPLjnkfle.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-47449\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/SCRIPTEDPPLjnkfle.png\" alt=\"\" width=\"743\" height=\"411\" \/><\/a><\/strong><\/p>\n<h3>Conclusion<\/h3>\n<p>Now we know the pipeline concept and the two types of pipeline that can be used , one needing more scripting skills and the other with pre-defined commands to ease the conception.<br \/>\nNext time we will focus on how to create a declarative pipeline using blue ocean<br \/>\nFeel free to check the dbi blogger site for more tips and tricks \ud83d\ude09 and also for Jenkins you have loads of info on Cloudbees site and on <a href=\"https:\/\/www.jenkins.io\/\">https:\/\/www.jenkins.io\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hi, We already know how to create a build on Jenkins using freestyle job, it&#8217;s a quick way to make a job, but what happened when we want to have complex tasks and workflow to trigger? Freestyle job limitation Indeed ,it&#8217;s still possible to chain these builds to get a sophisticated workflow,but freestyle jobs are [&hellip;]<\/p>\n","protected":false},"author":40,"featured_media":15620,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1320],"tags":[],"type_dbi":[],"class_list":["post-15613","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>JENKINS - Introduction to pipelines - dbi Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/jenkins-introduction-to-pipelines\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JENKINS - Introduction to pipelines\" \/>\n<meta property=\"og:description\" content=\"Hi, We already know how to create a build on Jenkins using freestyle job, it&#8217;s a quick way to make a job, but what happened when we want to have complex tasks and workflow to trigger? Freestyle job limitation Indeed ,it&#8217;s still possible to chain these builds to get a sophisticated workflow,but freestyle jobs are [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/jenkins-introduction-to-pipelines\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-16T11:46:47+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/PPLNN1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1887\" \/>\n\t<meta property=\"og:image:height\" content=\"824\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Middleware Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Middleware Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/jenkins-introduction-to-pipelines\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/jenkins-introduction-to-pipelines\\\/\"},\"author\":{\"name\":\"Middleware Team\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/8d8563acfc6e604cce6507f45bac0ea1\"},\"headline\":\"JENKINS &#8211; Introduction to pipelines\",\"datePublished\":\"2021-02-16T11:46:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/jenkins-introduction-to-pipelines\\\/\"},\"wordCount\":916,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/jenkins-introduction-to-pipelines\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/PPLNN1.png\",\"articleSection\":[\"DevOps\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/jenkins-introduction-to-pipelines\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/jenkins-introduction-to-pipelines\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/jenkins-introduction-to-pipelines\\\/\",\"name\":\"JENKINS - Introduction to pipelines - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/jenkins-introduction-to-pipelines\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/jenkins-introduction-to-pipelines\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/PPLNN1.png\",\"datePublished\":\"2021-02-16T11:46:47+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/8d8563acfc6e604cce6507f45bac0ea1\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/jenkins-introduction-to-pipelines\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/jenkins-introduction-to-pipelines\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/jenkins-introduction-to-pipelines\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/PPLNN1.png\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/PPLNN1.png\",\"width\":1887,\"height\":824},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/jenkins-introduction-to-pipelines\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JENKINS &#8211; Introduction to pipelines\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/8d8563acfc6e604cce6507f45bac0ea1\",\"name\":\"Middleware Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g\",\"caption\":\"Middleware Team\"},\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/middleware-team\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"JENKINS - Introduction to pipelines - dbi Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/jenkins-introduction-to-pipelines\/","og_locale":"en_US","og_type":"article","og_title":"JENKINS - Introduction to pipelines","og_description":"Hi, We already know how to create a build on Jenkins using freestyle job, it&#8217;s a quick way to make a job, but what happened when we want to have complex tasks and workflow to trigger? Freestyle job limitation Indeed ,it&#8217;s still possible to chain these builds to get a sophisticated workflow,but freestyle jobs are [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/jenkins-introduction-to-pipelines\/","og_site_name":"dbi Blog","article_published_time":"2021-02-16T11:46:47+00:00","og_image":[{"width":1887,"height":824,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/PPLNN1.png","type":"image\/png"}],"author":"Middleware Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Middleware Team","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/jenkins-introduction-to-pipelines\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/jenkins-introduction-to-pipelines\/"},"author":{"name":"Middleware Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1"},"headline":"JENKINS &#8211; Introduction to pipelines","datePublished":"2021-02-16T11:46:47+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/jenkins-introduction-to-pipelines\/"},"wordCount":916,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/jenkins-introduction-to-pipelines\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/PPLNN1.png","articleSection":["DevOps"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/jenkins-introduction-to-pipelines\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/jenkins-introduction-to-pipelines\/","url":"https:\/\/www.dbi-services.com\/blog\/jenkins-introduction-to-pipelines\/","name":"JENKINS - Introduction to pipelines - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/jenkins-introduction-to-pipelines\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/jenkins-introduction-to-pipelines\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/PPLNN1.png","datePublished":"2021-02-16T11:46:47+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/jenkins-introduction-to-pipelines\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/jenkins-introduction-to-pipelines\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/jenkins-introduction-to-pipelines\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/PPLNN1.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/PPLNN1.png","width":1887,"height":824},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/jenkins-introduction-to-pipelines\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"JENKINS &#8211; Introduction to pipelines"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1","name":"Middleware Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g","caption":"Middleware Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/middleware-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/15613","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/40"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=15613"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/15613\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/15620"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=15613"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=15613"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=15613"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=15613"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}