Sync docs from v1.0.0.M7 to gh-pages

This commit is contained in:
Marcin Grzejszczak
2017-10-31 15:05:39 +01:00
parent 00c91e2f29
commit 72bff77e23
12 changed files with 182 additions and 180 deletions

View File

@@ -10,9 +10,11 @@ step and describe it in details.</p><div class="section"><div class="titlepage">
scripts are reused by both Concourse and Jenkins pipelines.</p><p>In the <code class="literal">concourse</code> folder you can find all the necessary scripts and setup to run Concourse demo.</p><p>In the <code class="literal">docs</code> section you have the whole documentation of the project.</p><p>In the <code class="literal">jenkins</code> folder you can find all the necessary scripts and setup to run Jenkins demo.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_how_to_use_it" href="#_how_to_use_it"></a>1.2&nbsp;How to use it?</h2></div></div></div><p>This repository can be treated as a template for your pipeline. We provide some opinionated
implementation that you can alter to suit your needs. The best approach to use it
to build your production projects would be to download the Spring Cloud Pipelines repository as ZIP, then
init a Git project there and modify it as you wish.</p><pre class="programlisting">$ curl -LOk https://github.com/spring-cloud/spring-cloud-pipelines/archive/v1.<span class="hl-number">0.0</span>.M6.zip
$ unzip v1.<span class="hl-number">0.0</span>.M6.zip
$ <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">cd</span> spring-cloud-pipelines-v1.<span class="hl-number">0.0</span>.M6
init a Git project there and modify it as you wish.</p><pre class="programlisting">$ <span xmlns:d="http://docbook.org/ns/docbook" class="hl-comment"># pass the branch (e.g. master) or a particular tag (e.g. v1.0.0.RELEASE)</span>
$ SC_PIPELINES_RELEASE=...
$ curl -LOk https://github.com/spring-cloud/spring-cloud-pipelines/archive/${SC_PIPELINES_RELEASE}.zip
$ unzip ${SC_PIPELINES_RELEASE}.zip
$ <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">cd</span> spring-cloud-pipelines-${SC_PIPELINES_RELEASE}
$ git init
$ <span xmlns:d="http://docbook.org/ns/docbook" class="hl-comment"># modify the pipelines to suit your needs</span>
$ git add .

View File

@@ -22,14 +22,14 @@ scripts without changing the whole pipeline.</p></div><div class="section"><div
contained them. To fix this, just remove the tags</p><pre class="programlisting">git tag -l | xargs -n <span class="hl-number">1</span> git push --delete origin</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_i_want_to_provide_a_different_jdk_version" href="#_i_want_to_provide_a_different_jdk_version"></a>10.8&nbsp;I want to provide a different JDK version</h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">by default we assume that you have jdk with id <code class="literal">jdk8</code> configured</li><li class="listitem">if you want a different one just override <code class="literal">JDK_VERSION</code> env var and point to the proper one</li></ul></div><div class="tip" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Tip"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="images/tip.png"></td><th align="left">Tip</th></tr><tr><td align="left" valign="top"><p>The docker image comes in with Java installed at <code class="literal">/usr/lib/jvm/java-8-openjdk-amd64</code>.
You can go to <code class="literal">Global Tools</code> and create a JDK with <code class="literal">jdk8</code> id and JAVA_HOME
pointing to <code class="literal">/usr/lib/jvm/java-8-openjdk-amd64</code></p></td></tr></table></div><p>To change the default one just follow these steps:</p><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e5076" href="#d0e5076"></a><p class="title"><b>Figure&nbsp;10.1.&nbsp;Click 'Manage Jenkins'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/manage_jenkins.png" alt="manage jenkins"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e5087" href="#d0e5087"></a><p class="title"><b>Figure&nbsp;10.2.&nbsp;Click 'Global Tool'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/global_tool.png" alt="global tool"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e5098" href="#d0e5098"></a><p class="title"><b>Figure&nbsp;10.3.&nbsp;Click 'JDK Installations'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/jdk_installation.png" alt="jdk installation"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e5109" href="#d0e5109"></a><p class="title"><b>Figure&nbsp;10.4.&nbsp;Fill out JDK Installation with path to your JDK</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/jdk.png" alt="jdk"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e5040" href="#d0e5040"></a><p class="title"><b>Figure&nbsp;10.1.&nbsp;Click 'Manage Jenkins'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/manage_jenkins.png" alt="manage jenkins"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e5051" href="#d0e5051"></a><p class="title"><b>Figure&nbsp;10.2.&nbsp;Click 'Global Tool'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/global_tool.png" alt="global tool"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e5062" href="#d0e5062"></a><p class="title"><b>Figure&nbsp;10.3.&nbsp;Click 'JDK Installations'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/jdk_installation.png" alt="jdk installation"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e5073" href="#d0e5073"></a><p class="title"><b>Figure&nbsp;10.4.&nbsp;Fill out JDK Installation with path to your JDK</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/jdk.png" alt="jdk"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><p>And that&#8217;s it!</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="groovy-token-macro" href="#groovy-token-macro"></a>10.9&nbsp;Enable Groovy Token Macro Processing</h2></div></div></div><p>With scripted that but if you needed to this manually then this is how to do it:</p><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e5129" href="#d0e5129"></a><p class="title"><b>Figure&nbsp;10.5.&nbsp;Click 'Manage Jenkins'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/manage_jenkins.png" alt="manage jenkins"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e5140" href="#d0e5140"></a><p class="title"><b>Figure&nbsp;10.6.&nbsp;Click 'Configure System'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/configure_system.png" alt="configure system"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e5151" href="#d0e5151"></a><p class="title"><b>Figure&nbsp;10.7.&nbsp;Click 'Allow token macro processing'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/groovy_token.png" alt="groovy token"></div></div></div><br class="figure-break"></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_i_want_deployment_to_stage_and_prod_be_automatic" href="#_i_want_deployment_to_stage_and_prod_be_automatic"></a>10.10&nbsp;I want deployment to stage and prod be automatic</h2></div></div></div><p>No problem, just set the property / env var to true</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><code class="literal">AUTO_DEPLOY_TO_STAGE</code> to automatically deploy to stage</li><li class="listitem"><code class="literal">AUTO_DEPLOY_TO_PROD</code> to automatically deploy to prod</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_i_don_t_want_to_test_api_compativility" href="#_i_don_t_want_to_test_api_compativility"></a>10.11&nbsp;I don&#8217;t want to test API compativility</h2></div></div></div><p>No problem, just set the <code class="literal">API_COMPATIBILITY_STEP_REQUIRED</code> env variable
&nbsp;</p><div class="figure"><a name="d0e5093" href="#d0e5093"></a><p class="title"><b>Figure&nbsp;10.5.&nbsp;Click 'Manage Jenkins'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/manage_jenkins.png" alt="manage jenkins"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e5104" href="#d0e5104"></a><p class="title"><b>Figure&nbsp;10.6.&nbsp;Click 'Configure System'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/configure_system.png" alt="configure system"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e5115" href="#d0e5115"></a><p class="title"><b>Figure&nbsp;10.7.&nbsp;Click 'Allow token macro processing'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/groovy_token.png" alt="groovy token"></div></div></div><br class="figure-break"></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_i_want_deployment_to_stage_and_prod_be_automatic" href="#_i_want_deployment_to_stage_and_prod_be_automatic"></a>10.10&nbsp;I want deployment to stage and prod be automatic</h2></div></div></div><p>No problem, just set the property / env var to true</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><code class="literal">AUTO_DEPLOY_TO_STAGE</code> to automatically deploy to stage</li><li class="listitem"><code class="literal">AUTO_DEPLOY_TO_PROD</code> to automatically deploy to prod</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_i_don_t_want_to_test_api_compativility" href="#_i_don_t_want_to_test_api_compativility"></a>10.11&nbsp;I don&#8217;t want to test API compativility</h2></div></div></div><p>No problem, just set the <code class="literal">API_COMPATIBILITY_STEP_REQUIRED</code> env variable
to <code class="literal">false</code> and rerun the seed (you can pick it from the seed
job&#8217;s properties too).</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_i_can_t_tag_the_repo" href="#_i_can_t_tag_the_repo"></a>10.12&nbsp;I can&#8217;t tag the repo!</h2></div></div></div><p>When you get sth like this:</p><pre class="programlisting"><span class="hl-number">19</span>:<span class="hl-number">01</span>:<span class="hl-number">44</span> stderr: remote: Invalid username or password.
<span class="hl-number">19</span>:<span class="hl-number">01</span>:<span class="hl-number">44</span> fatal: Authentication failed <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">for</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">'https://github.com/marcingrzejszczak/github-webhook/'</span>

View File

@@ -59,15 +59,15 @@ of Java installation and the others to another one.</p></td></tr></table></div><
you&#8217;d have to go to <code class="literal">Configure</code> of the build step and modify the Git name / email.
If you want to set it globally you&#8217;ll have to remove the section from the build
step and follow these steps to set it globally.</p><p>You can set Git email / user globally like this:</p><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2641" href="#d0e2641"></a><p class="title"><b>Figure&nbsp;7.1.&nbsp;Click 'Manage Jenkins'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/manage_jenkins.png" alt="manage jenkins"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2652" href="#d0e2652"></a><p class="title"><b>Figure&nbsp;7.2.&nbsp;Click 'Configure System'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/configure_system.png" alt="configure system"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2663" href="#d0e2663"></a><p class="title"><b>Figure&nbsp;7.3.&nbsp;Fill out Git user information</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/git.png" alt="git"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2605" href="#d0e2605"></a><p class="title"><b>Figure&nbsp;7.1.&nbsp;Click 'Manage Jenkins'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/manage_jenkins.png" alt="manage jenkins"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2616" href="#d0e2616"></a><p class="title"><b>Figure&nbsp;7.2.&nbsp;Click 'Configure System'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/configure_system.png" alt="configure system"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2627" href="#d0e2627"></a><p class="title"><b>Figure&nbsp;7.3.&nbsp;Fill out Git user information</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/git.png" alt="git"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="jenkins-credentials-github" href="#jenkins-credentials-github"></a>Add Jenkins credentials for GitHub</h4></div></div></div><p><a name="jenkins-credentials" href="#jenkins-credentials"></a> The scripts will need to access the credential in order to tag the repo.</p><p>You have to set credentials with id: <code class="literal">git</code>.</p><p>Below you can find instructions on how to set a credential (e.g. for Cloud Foundry <code class="literal">cf-test</code> credential but
remember to provide the one with id <code class="literal">git</code>).</p><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2695" href="#d0e2695"></a><p class="title"><b>Figure&nbsp;7.4.&nbsp;Click 'Credentials, System'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/credentials_system.png" alt="credentials system"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2706" href="#d0e2706"></a><p class="title"><b>Figure&nbsp;7.5.&nbsp;Click 'Global Credentials'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/credentials_global.png" alt="credentials global"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2717" href="#d0e2717"></a><p class="title"><b>Figure&nbsp;7.6.&nbsp;Click 'Add credentials'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/credentials_add.png" alt="credentials add"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2728" href="#d0e2728"></a><p class="title"><b>Figure&nbsp;7.7.&nbsp;Fill out the user / password and provide the <code class="literal">git</code> credential ID (in this example <code class="literal">cf-test</code>)</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/credentials_example.png" alt="credentials example"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2659" href="#d0e2659"></a><p class="title"><b>Figure&nbsp;7.4.&nbsp;Click 'Credentials, System'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/credentials_system.png" alt="credentials system"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2670" href="#d0e2670"></a><p class="title"><b>Figure&nbsp;7.5.&nbsp;Click 'Global Credentials'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/credentials_global.png" alt="credentials global"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2681" href="#d0e2681"></a><p class="title"><b>Figure&nbsp;7.6.&nbsp;Click 'Add credentials'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/credentials_add.png" alt="credentials add"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2692" href="#d0e2692"></a><p class="title"><b>Figure&nbsp;7.7.&nbsp;Fill out the user / password and provide the <code class="literal">git</code> credential ID (in this example <code class="literal">cf-test</code>)</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/credentials_example.png" alt="credentials example"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_testing_jenkins_scripts" href="#_testing_jenkins_scripts"></a>7.3&nbsp;Testing Jenkins scripts</h2></div></div></div><p><code class="literal">./gradlew clean build</code></p><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="images/warning.png"></td><th align="left">Warning</th></tr><tr><td align="left" valign="top"><p>The ran test only checks if your scripts compile.</p></td></tr></table></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_how_to_work_with_jenkins_job_dsl_plugin" href="#_how_to_work_with_jenkins_job_dsl_plugin"></a>7.4&nbsp;How to work with Jenkins Job DSL plugin</h2></div></div></div><p>Check out the <a class="link" href="https://github.com/jenkinsci/job-dsl-plugin/wiki/Tutorial---Using-the-Jenkins-Job-DSL" target="_top">tutorial</a>.
Provide the link to this repository in your Jenkins installation.</p><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="images/warning.png"></td><th align="left">Warning</th></tr><tr><td align="left" valign="top"><p>Remember that views can be overridden that&#8217;s why the suggestion is to contain in one script all the logic needed to build a view
for a single project (check out that <code class="literal">spring_cloud_views.groovy</code> is building all the <code class="literal">spring-cloud</code> views).</p></td></tr></table></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_docker_image" href="#_docker_image"></a>7.5&nbsp;Docker Image</h2></div></div></div><p>If you would like to run the pre-configured Jenkins image somewhere other than your local machine, we

View File

@@ -1,16 +1,16 @@
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>2.&nbsp;Opinionated implementation</title><link rel="stylesheet" type="text/css" href="css/manual-multipage.css"><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" href="multi_spring-cloud-pipelines.html" title="Spring Cloud Pipelines"><link rel="up" href="multi_spring-cloud-pipelines.html" title="Spring Cloud Pipelines"><link rel="prev" href="multi__introduction.html" title="1.&nbsp;Introduction"><link rel="next" href="multi__project_opinions.html" title="3.&nbsp;Project opinions"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.&nbsp;Opinionated implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="multi__introduction.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="multi__project_opinions.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="_opinionated_implementation" href="#_opinionated_implementation"></a>2.&nbsp;Opinionated implementation</h1></div></div></div><p>For the demo purposes we&#8217;re providing Docker Compose setup with Artifactory and Concourse / Jenkins tools.
Regardless of the picked CD application for the pipeline to pass one needs either</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><span class="strong"><strong>[CLOUD FOUNDRY]</strong></span> a Cloud Foundry instance (for example <a class="link" href="https://run.pivotal.io/" target="_top">Pivotal Web Services</a> or <a class="link" href="https://pivotal.io/pcf-dev" target="_top">PCF Dev</a>)</li><li class="listitem"><span class="strong"><strong>[KUBERNETES]</strong></span> a Kubernetes cluster (for example <a class="link" href="https://github.com/kubernetes/minikube" target="_top">Minikube</a>)</li><li class="listitem">the infrastructure applications deployed to the JAR hosting application (for the demo we&#8217;re providing Artifactory).</li><li class="listitem"><code class="literal">Eureka</code> for Service Discovery</li><li class="listitem"><code class="literal">Stub Runner Boot</code> for running Spring Cloud Contract stubs.</li></ul></div><div class="tip" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Tip"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="images/tip.png"></td><th align="left">Tip</th></tr><tr><td align="left" valign="top"><p>In the demos we&#8217;re showing you how to first build the <code class="literal">github-webhook</code> project. That&#8217;s because
Regardless of the picked CD application for the pipeline to pass one needs either</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">a Cloud Foundry instance (for example <a class="link" href="https://run.pivotal.io/" target="_top">Pivotal Web Services</a> or <a class="link" href="https://pivotal.io/pcf-dev" target="_top">PCF Dev</a>)</li><li class="listitem">a Kubernetes cluster (for example <a class="link" href="https://github.com/kubernetes/minikube" target="_top">Minikube</a>)</li><li class="listitem">the infrastructure applications deployed to the JAR hosting application (for the demo we&#8217;re providing Artifactory).</li><li class="listitem"><code class="literal">Eureka</code> for Service Discovery</li><li class="listitem"><code class="literal">Stub Runner Boot</code> for running Spring Cloud Contract stubs.</li></ul></div><div class="tip" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Tip"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="images/tip.png"></td><th align="left">Tip</th></tr><tr><td align="left" valign="top"><p>In the demos we&#8217;re showing you how to first build the <code class="literal">github-webhook</code> project. That&#8217;s because
the <code class="literal">github-analytics</code> needs the stubs of <code class="literal">github-webhook</code> to pass the tests. Below you&#8217;ll find
references to <code class="literal">github-analytics</code> project since it contains more interesting pieces as far as testing
is concerned.</p></td></tr></table></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_build" href="#_build"></a>2.1&nbsp;Build</h2></div></div></div><div class="figure"><a name="d0e491" href="#d0e491"></a><p class="title"><b>Figure&nbsp;2.1.&nbsp;Build and upload artifacts</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/intro/build.png" alt="build"></div></div></div><br class="figure-break"><p>In this step we&#8217;re generating a version of the pipeline, next we&#8217;re
running unit, integration and contract tests. Finally we&#8217;re:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">publishing a fat jar of the application</li><li class="listitem">publishing a Spring Cloud Contract jar containing stubs of the application</li><li class="listitem"><span class="strong"><strong>[KUBERNETES]</strong></span> uploading a Docker image of the application</li></ul></div><p>During this phase we&#8217;re executing a <code class="literal">Maven</code> build using Maven Wrapper or a <code class="literal">Gradle</code> build using Gradle Wrapper
is concerned.</p></td></tr></table></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_build" href="#_build"></a>2.1&nbsp;Build</h2></div></div></div><div class="figure"><a name="d0e487" href="#d0e487"></a><p class="title"><b>Figure&nbsp;2.1.&nbsp;Build and upload artifacts</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/intro/build.png" alt="build"></div></div></div><br class="figure-break"><p>In this step we&#8217;re generating a version of the pipeline, next we&#8217;re
running unit, integration and contract tests. Finally we&#8217;re:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">publishing a fat jar of the application</li><li class="listitem">publishing a Spring Cloud Contract jar containing stubs of the application</li><li class="listitem">for Kubernetes - uploading a Docker image of the application</li></ul></div><p>During this phase we&#8217;re executing a <code class="literal">Maven</code> build using Maven Wrapper or a <code class="literal">Gradle</code> build using Gradle Wrapper
, with unit and integration tests. We&#8217;re also <span class="strong"><strong>tagging</strong></span> the repository with <code class="literal">dev/${version}</code> format. That way in each
subsequent step of the pipeline we&#8217;re able to retrieve the tagged version. Also we know
exactly which version of the pipeline corresponds to which Git hash.</p><p>Once the artifact got built we&#8217;re running API compatibility check.</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">we&#8217;re searching for the latest production deployment</li><li class="listitem">we&#8217;re retrieving the contracts that were used by that deployment</li><li class="listitem">from the contracts we&#8217;re generating API tests to see if the current implementation
is fulfilling the HTTP / messaging contracts that the current production deployment
has defined (we&#8217;re checking backward compatibility of the API)</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_test" href="#_test"></a>2.2&nbsp;Test</h2></div></div></div><div class="figure"><a name="d0e543" href="#d0e543"></a><p class="title"><b>Figure&nbsp;2.2.&nbsp;Smoke test and rollback test on test environment</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/intro/test.png" alt="test"></div></div></div><br class="figure-break"><p>Here we&#8217;re</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">starting a RabbitMQ service in PaaS</li><li class="listitem">deploying <code class="literal">Eureka</code> infrastructure application to PaaS</li><li class="listitem">downloading the fat jar from Nexus and we&#8217;re uploading it to PaaS. We want the application
has defined (we&#8217;re checking backward compatibility of the API)</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_test" href="#_test"></a>2.2&nbsp;Test</h2></div></div></div><div class="figure"><a name="d0e537" href="#d0e537"></a><p class="title"><b>Figure&nbsp;2.2.&nbsp;Smoke test and rollback test on test environment</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/intro/test.png" alt="test"></div></div></div><br class="figure-break"><p>Here we&#8217;re</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">starting a RabbitMQ service in PaaS</li><li class="listitem">deploying <code class="literal">Eureka</code> infrastructure application to PaaS</li><li class="listitem">downloading the fat jar from Nexus and we&#8217;re uploading it to PaaS. We want the application
to run in isolation (be surrounded by stubs).</li></ul></div><div class="tip" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Tip"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="images/tip.png"></td><th align="left">Tip</th></tr><tr><td align="left" valign="top"><p>Currently due to port constraints in Cloud Foundry
we cannot run multiple stubbed HTTP services in the cloud so to fix this issue we&#8217;re running
the application with <code class="literal">smoke</code> Spring profile on which you can stub out all HTTP calls to return
@@ -30,12 +30,12 @@ release (we&#8217;re checking out the tag), we&#8217;re downloading the appropri
or Docker image for Kubernetes) and we&#8217;re uploading
it to PaaS. <span class="strong"><strong>IMPORTANT</strong></span> the <span class="emphasis"><em>old</em></span> artifact is running against the <span class="strong"><strong>NEW</strong></span> version of the database.</li><li class="listitem">we&#8217;re running the <span class="emphasis"><em>old</em></span> <code class="literal">smoke</code> tests against the freshly deployed application surrounded by stubs.
If those tests pass then we have a high probability that the application is backwards compatible</li><li class="listitem">the default behaviour is that after all of those steps the user can manually click to deploy the
application to a stage environment</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_stage" href="#_stage"></a>2.3&nbsp;Stage</h2></div></div></div><div class="figure"><a name="d0e640" href="#d0e640"></a><p class="title"><b>Figure&nbsp;2.3.&nbsp;End to end tests on stage environment</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/intro/stage.png" alt="stage"></div></div></div><br class="figure-break"><p>Here we&#8217;re</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">starting a RabbitMQ service in PaaS</li><li class="listitem">deploying <code class="literal">Eureka</code> infrastructure application to PaaS</li><li class="listitem">downloading the artifact (either JAR for Cloud Foundry or Docker image for Kubernetes)
application to a stage environment</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_stage" href="#_stage"></a>2.3&nbsp;Stage</h2></div></div></div><div class="figure"><a name="d0e634" href="#d0e634"></a><p class="title"><b>Figure&nbsp;2.3.&nbsp;End to end tests on stage environment</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/intro/stage.png" alt="stage"></div></div></div><br class="figure-break"><p>Here we&#8217;re</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">starting a RabbitMQ service in PaaS</li><li class="listitem">deploying <code class="literal">Eureka</code> infrastructure application to PaaS</li><li class="listitem">downloading the artifact (either JAR for Cloud Foundry or Docker image for Kubernetes)
from and we&#8217;re uploading it to PaaS.</li></ul></div><p>Next we have a manual step in which:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">from the checked out code we&#8217;re running the tests available under the <code class="literal">e2e</code> profile. In the
case of <code class="literal">GitHub Analytics</code> application we&#8217;re sending a HTTP message to GitHub Analytic&#8217;s endpoint. Then we&#8217;re checking if
the received message count has increased.</li></ul></div><p>The step is manual by default due to the fact that stage environment is often shared between
teams and some preparations on databases / infrastructure have to take place before running the tests.
Ideally these step should be fully automatic.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_prod" href="#_prod"></a>2.4&nbsp;Prod</h2></div></div></div><div class="figure"><a name="d0e681" href="#d0e681"></a><p class="title"><b>Figure&nbsp;2.4.&nbsp;Deployment to production</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/intro/prod.png" alt="prod"></div></div></div><br class="figure-break"><p>The step to deploy to production is manual but ideally it should be automatic.</p><div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Important"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="images/important.png"></td><th align="left">Important</th></tr><tr><td align="left" valign="top"><p>This step does deployment to production. On production you would assume
Ideally these step should be fully automatic.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_prod" href="#_prod"></a>2.4&nbsp;Prod</h2></div></div></div><div class="figure"><a name="d0e675" href="#d0e675"></a><p class="title"><b>Figure&nbsp;2.4.&nbsp;Deployment to production</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/intro/prod.png" alt="prod"></div></div></div><br class="figure-break"><p>The step to deploy to production is manual but ideally it should be automatic.</p><div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Important"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="images/important.png"></td><th align="left">Important</th></tr><tr><td align="left" valign="top"><p>This step does deployment to production. On production you would assume
that you have the infrastructure running. That&#8217;s why before you run this step you
must execute a script that will provision the services on the production environment.
For <code class="literal">Cloud Foundry</code> just call <code class="literal">tools/cf-helper.sh setup-prod-infra</code> and

View File

@@ -2,14 +2,14 @@
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>12.&nbsp;The demo setup (Cloud Foundry)</title><link rel="stylesheet" type="text/css" href="css/manual-multipage.css"><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" href="multi_spring-cloud-pipelines.html" title="Spring Cloud Pipelines"><link rel="up" href="multi_spring-cloud-pipelines.html" title="Spring Cloud Pipelines"><link rel="prev" href="multi__kubernetes_setup.html" title="11.&nbsp;Kubernetes setup"><link rel="next" href="multi__the_demo_setup_kubernetes.html" title="13.&nbsp;The demo setup (Kubernetes)"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">12.&nbsp;The demo setup (Cloud Foundry)</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="multi__kubernetes_setup.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="multi__the_demo_setup_kubernetes.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="_the_demo_setup_cloud_foundry" href="#_the_demo_setup_cloud_foundry"></a>12.&nbsp;The demo setup (Cloud Foundry)</h1></div></div></div><p>The demo uses 2 applications. <a class="link" href="https://github.com/spring-cloud-samples/github-webhook/" target="_top">Github Webhook</a>
and <a class="link" href="https://github.com/spring-cloud-samples/github-analytics/" target="_top">Github analytics code</a>. Below you can
see an image of how these application communicate with each other.</p><div class="figure"><a name="d0e5518" href="#d0e5518"></a><p class="title"><b>Figure&nbsp;12.1.&nbsp;Github Webhook listens to HTTP calls and sends a message to Github Analytics</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/demo/demo.png" alt="demo"></div></div></div><br class="figure-break"><p>&nbsp;
see an image of how these application communicate with each other.</p><div class="figure"><a name="d0e5482" href="#d0e5482"></a><p class="title"><b>Figure&nbsp;12.1.&nbsp;Github Webhook listens to HTTP calls and sends a message to Github Analytics</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/demo/demo.png" alt="demo"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><p>For the demo scenario we have two applications. <code class="literal">Github Analytics</code> and <code class="literal">Github Webhook</code>.
Let&#8217;s imagine a case where Github is emitting events via HTTP. <code class="literal">Github Webhook</code> has
an API that could register to such hooks and receive those messages. Once this happens
<code class="literal">Github Webhook</code> sends a message by RabbitMQ to a channel. <code class="literal">Github Analytics</code> is
listening to those messages and stores them in a MySQL database.</p><div class="figure"><a name="d0e5546" href="#d0e5546"></a><p class="title"><b>Figure&nbsp;12.2.&nbsp;Github Analytics exposes metrics that are polled by Prometheus</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/demo/demo_metrics.png" alt="demo metrics"></div></div></div><br class="figure-break"><p>&nbsp;
listening to those messages and stores them in a MySQL database.</p><div class="figure"><a name="d0e5510" href="#d0e5510"></a><p class="title"><b>Figure&nbsp;12.2.&nbsp;Github Analytics exposes metrics that are polled by Prometheus</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/demo/demo_metrics.png" alt="demo metrics"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><p><code class="literal">Github Analytics</code> has its KPIs (Key Performance Indicators) monitored. In the case
of that application the KPI is number of issues.</p><div class="figure"><a name="d0e5561" href="#d0e5561"></a><p class="title"><b>Figure&nbsp;12.3.&nbsp;Grafana alerts Slack over Prometheus metrics</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/demo/demo_alerting.png" alt="demo alerting"></div></div></div><br class="figure-break"><p>&nbsp;
of that application the KPI is number of issues.</p><div class="figure"><a name="d0e5525" href="#d0e5525"></a><p class="title"><b>Figure&nbsp;12.3.&nbsp;Grafana alerts Slack over Prometheus metrics</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/demo/demo_alerting.png" alt="demo alerting"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><p>Let&#8217;s assume that if we go below the threshold of X issues then an alert should be
sent to Slack.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_deploying_production_applications_to_pcf_dev" href="#_deploying_production_applications_to_pcf_dev"></a>12.1&nbsp;Deploying production applications to PCF Dev</h2></div></div></div><p>In the real world scenario we wouldn&#8217;t want to automatically provision services like
RabbitMQ, MySQL or Eureka each time we deploy a new application to production. Typically

View File

@@ -2,14 +2,14 @@
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>13.&nbsp;The demo setup (Kubernetes)</title><link rel="stylesheet" type="text/css" href="css/manual-multipage.css"><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" href="multi_spring-cloud-pipelines.html" title="Spring Cloud Pipelines"><link rel="up" href="multi_spring-cloud-pipelines.html" title="Spring Cloud Pipelines"><link rel="prev" href="multi__the_demo_setup_cloud_foundry.html" title="12.&nbsp;The demo setup (Cloud Foundry)"><link rel="next" href="multi__building_the_project.html" title="14.&nbsp;Building the project"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">13.&nbsp;The demo setup (Kubernetes)</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="multi__the_demo_setup_cloud_foundry.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="multi__building_the_project.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="_the_demo_setup_kubernetes" href="#_the_demo_setup_kubernetes"></a>13.&nbsp;The demo setup (Kubernetes)</h1></div></div></div><p>The demo uses 2 applications. <a class="link" href="https://github.com/spring-cloud-samples/github-webhook-kubernetes/" target="_top">Github Webhook</a>
and <a class="link" href="https://github.com/spring-cloud-samples/github-analytics-kubernetes/" target="_top">Github analytics code</a>. Below you can
see an image of how these application communicate with each other.</p><div class="figure"><a name="d0e5682" href="#d0e5682"></a><p class="title"><b>Figure&nbsp;13.1.&nbsp;Github Webhook listens to HTTP calls and sends a message to Github Analytics</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/demo/demo.png" alt="demo"></div></div></div><br class="figure-break"><p>&nbsp;
see an image of how these application communicate with each other.</p><div class="figure"><a name="d0e5646" href="#d0e5646"></a><p class="title"><b>Figure&nbsp;13.1.&nbsp;Github Webhook listens to HTTP calls and sends a message to Github Analytics</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/demo/demo.png" alt="demo"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><p>For the demo scenario we have two applications. <code class="literal">Github Analytics</code> and <code class="literal">Github Webhook</code>.
Let&#8217;s imagine a case where Github is emitting events via HTTP. <code class="literal">Github Webhook</code> has
an API that could register to such hooks and receive those messages. Once this happens
<code class="literal">Github Webhook</code> sends a message by RabbitMQ to a channel. <code class="literal">Github Analytics</code> is
listening to those messages and stores them in a MySQL database.</p><div class="figure"><a name="d0e5710" href="#d0e5710"></a><p class="title"><b>Figure&nbsp;13.2.&nbsp;Github Analytics exposes metrics that are polled by Prometheus</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/demo/demo_metrics.png" alt="demo metrics"></div></div></div><br class="figure-break"><p>&nbsp;
listening to those messages and stores them in a MySQL database.</p><div class="figure"><a name="d0e5674" href="#d0e5674"></a><p class="title"><b>Figure&nbsp;13.2.&nbsp;Github Analytics exposes metrics that are polled by Prometheus</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/demo/demo_metrics.png" alt="demo metrics"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><p><code class="literal">Github Analytics</code> has its KPIs (Key Performance Indicators) monitored. In the case
of that application the KPI is number of issues.</p><div class="figure"><a name="d0e5725" href="#d0e5725"></a><p class="title"><b>Figure&nbsp;13.3.&nbsp;Grafana alerts Slack over Prometheus metrics</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/demo/demo_alerting.png" alt="demo alerting"></div></div></div><br class="figure-break"><p>&nbsp;
of that application the KPI is number of issues.</p><div class="figure"><a name="d0e5689" href="#d0e5689"></a><p class="title"><b>Figure&nbsp;13.3.&nbsp;Grafana alerts Slack over Prometheus metrics</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/demo/demo_alerting.png" alt="demo alerting"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><p>Let&#8217;s assume that if we go below the threshold of X issues then an alert should be
sent to Slack.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_deploying_production_applications_to_minikube" href="#_deploying_production_applications_to_minikube"></a>13.1&nbsp;Deploying production applications to Minikube</h2></div></div></div><p>In the real world scenario we wouldn&#8217;t want to automatically provision services like
RabbitMQ, MySQL or Eureka each time we deploy a new application to production. Typically

File diff suppressed because one or more lines are too long

View File

@@ -34,7 +34,7 @@ Congratulations. You have just deployed JFrog Artifactory Pro!
Default credential <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">for</span> Artifactory:
user: admin
password: password</pre><p>Next, we need to set up the repositories.</p><p>First, access the Artifactory URL and log in with
user, <code class="literal">admin</code> and <code class="literal">password</code> password.</p><div class="figure"><a name="d0e2013" href="#d0e2013"></a><p class="title"><b>Figure&nbsp;5.1.&nbsp;Click on the <code class="literal">Quick Setup</code></b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/concourse/artifactory_quick_setup.png" alt="artifactory quick setup"></div></div></div><br class="figure-break"><p>Then, click on the Maven setup and click <code class="literal">Create</code>.</p><div class="figure"><a name="d0e2029" href="#d0e2029"></a><p class="title"><b>Figure&nbsp;5.2.&nbsp;Create the <code class="literal">Maven</code> Repository</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/concourse/artifactory_maven_repo.png" alt="artifactory maven repo"></div></div></div><br class="figure-break"></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="concourse-pipeline-fly-k8s" href="#concourse-pipeline-fly-k8s"></a>5.2.2&nbsp;Setup the <code class="literal">fly</code> CLI</h3></div></div></div><p><a name="fly" href="#fly"></a> If you go to Concourse website you should see sth like this:</p><p>&nbsp;
user, <code class="literal">admin</code> and <code class="literal">password</code> password.</p><div class="figure"><a name="d0e1977" href="#d0e1977"></a><p class="title"><b>Figure&nbsp;5.1.&nbsp;Click on the <code class="literal">Quick Setup</code></b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/concourse/artifactory_quick_setup.png" alt="artifactory quick setup"></div></div></div><br class="figure-break"><p>Then, click on the Maven setup and click <code class="literal">Create</code>.</p><div class="figure"><a name="d0e1993" href="#d0e1993"></a><p class="title"><b>Figure&nbsp;5.2.&nbsp;Create the <code class="literal">Maven</code> Repository</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/concourse/artifactory_maven_repo.png" alt="artifactory maven repo"></div></div></div><br class="figure-break"></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="concourse-pipeline-fly-k8s" href="#concourse-pipeline-fly-k8s"></a>5.2.2&nbsp;Setup the <code class="literal">fly</code> CLI</h3></div></div></div><p><a name="fly" href="#fly"></a> If you go to Concourse website you should see sth like this:</p><p>&nbsp;
&nbsp;</p><div class="informalfigure"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/concourse/running_concourse.png" alt="running concourse"></div></div><p>&nbsp;
&nbsp;</p><p>You can click one of the icons (depending on your OS) to download <code class="literal">fly</code>, which is the Concourse CLI. Once you&#8217;ve downloaded that (and maybe added to your PATH) you can run:</p><pre class="programlisting">fly --version</pre><p>If <code class="literal">fly</code> is properly installed then it should print out the version.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="concourse-pipeline-credentials-k8s" href="#concourse-pipeline-credentials-k8s"></a>5.2.3&nbsp;Setup your <code class="literal">credentials.yml</code></h3></div></div></div><p>There is a sample credentials file called <code class="literal">credentials-sample-k8s.yml</code>
prepared for <code class="literal">k8s</code>. You can use it as a base for your <code class="literal">credentials.yml</code>.</p><p>To allow the Concourse worker&#8217;s spawned container to connect to
@@ -43,13 +43,13 @@ auth token.</p><p>To get the contents of CA for GCE just execute</p><pre class="
$ <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">echo</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"Visit http://127.0.0.1:8080 to use Concourse"</span>
$ kubectl port-forward --namespace default $POD_NAME <span class="hl-number">8080</span>:<span class="hl-number">8080</span>
Visit http://<span class="hl-number">127.0</span>.<span class="hl-number">0.1</span>:<span class="hl-number">8080</span> to use Concourse</pre><p>Log in (e.g. for Concourse running at <code class="literal">127.0.0.1</code> - if you don&#8217;t provide any value then <code class="literal">localhost</code> is assumed). If you execute this script (it assumes that either <code class="literal">fly</code> is on your <code class="literal">PATH</code> or it&#8217;s in the same folder as the script is):</p><pre class="programlisting">$ fly -t k8s login -c http://localhost:<span class="hl-number">8080</span> -u concourse -p concourse</pre><p>Next run the command to create the pipeline.</p><pre class="programlisting">$ ./set_pipeline.sh github-webhook k8s credentials-k8s.yml</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="concourse-pipeline-run-k8s" href="#concourse-pipeline-run-k8s"></a>5.2.5&nbsp;Run the <code class="literal">github-webhook</code> pipeline</h3></div></div></div><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2144" href="#d0e2144"></a><p class="title"><b>Figure&nbsp;5.3.&nbsp;Click <code class="literal">Login</code></b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/concourse/concourse_login.png" alt="concourse login"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2157" href="#d0e2157"></a><p class="title"><b>Figure&nbsp;5.4.&nbsp;Pick <code class="literal">main</code> team</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/concourse/concourse_team_main.png" alt="concourse team main"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2171" href="#d0e2171"></a><p class="title"><b>Figure&nbsp;5.5.&nbsp;Log in with <code class="literal">concourse</code> user and <code class="literal">concourse</code> password</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/concourse/concourse_user_pass.png" alt="concourse user pass"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2188" href="#d0e2188"></a><p class="title"><b>Figure&nbsp;5.6.&nbsp;Your screen should look more or less like this</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/concourse/concourse_pipeline.png" alt="concourse pipeline"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2199" href="#d0e2199"></a><p class="title"><b>Figure&nbsp;5.7.&nbsp;Unpause the pipeline by clicking in the top lefr corner and then clicking the <code class="literal">play</code> button</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/concourse/start_pipeline.png" alt="start pipeline"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2213" href="#d0e2213"></a><p class="title"><b>Figure&nbsp;5.8.&nbsp;Click 'generate-version'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/concourse/generate_version.png" alt="generate version"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2224" href="#d0e2224"></a><p class="title"><b>Figure&nbsp;5.9.&nbsp;Click <code class="literal">+</code> sign to start a new build</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/concourse/run_pipeline.png" alt="run pipeline"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2238" href="#d0e2238"></a><p class="title"><b>Figure&nbsp;5.10.&nbsp;The job is pending</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/concourse/concourse_pending.png" alt="concourse pending"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2249" href="#d0e2249"></a><p class="title"><b>Figure&nbsp;5.11.&nbsp;Job is pending in the main screen</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/concourse/job_running.png" alt="job running"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2260" href="#d0e2260"></a><p class="title"><b>Figure&nbsp;5.12.&nbsp;Job is running in the main screen</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/concourse/running_pipeline.png" alt="running pipeline"></div></div></div><br class="figure-break"></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="multi_concourse-pipeline-cf.html">Prev</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="multi_concourse-faq.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">4.&nbsp;Concourse Pipeline (Cloud Foundry)&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="multi_spring-cloud-pipelines.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;6.&nbsp;Concourse FAQ</td></tr></table></div></body></html>
&nbsp;</p><div class="figure"><a name="d0e2108" href="#d0e2108"></a><p class="title"><b>Figure&nbsp;5.3.&nbsp;Click <code class="literal">Login</code></b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/concourse/concourse_login.png" alt="concourse login"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2121" href="#d0e2121"></a><p class="title"><b>Figure&nbsp;5.4.&nbsp;Pick <code class="literal">main</code> team</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/concourse/concourse_team_main.png" alt="concourse team main"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2135" href="#d0e2135"></a><p class="title"><b>Figure&nbsp;5.5.&nbsp;Log in with <code class="literal">concourse</code> user and <code class="literal">concourse</code> password</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/concourse/concourse_user_pass.png" alt="concourse user pass"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2152" href="#d0e2152"></a><p class="title"><b>Figure&nbsp;5.6.&nbsp;Your screen should look more or less like this</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/concourse/concourse_pipeline.png" alt="concourse pipeline"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2163" href="#d0e2163"></a><p class="title"><b>Figure&nbsp;5.7.&nbsp;Unpause the pipeline by clicking in the top lefr corner and then clicking the <code class="literal">play</code> button</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/concourse/start_pipeline.png" alt="start pipeline"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2177" href="#d0e2177"></a><p class="title"><b>Figure&nbsp;5.8.&nbsp;Click 'generate-version'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/concourse/generate_version.png" alt="generate version"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2188" href="#d0e2188"></a><p class="title"><b>Figure&nbsp;5.9.&nbsp;Click <code class="literal">+</code> sign to start a new build</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/concourse/run_pipeline.png" alt="run pipeline"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2202" href="#d0e2202"></a><p class="title"><b>Figure&nbsp;5.10.&nbsp;The job is pending</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/concourse/concourse_pending.png" alt="concourse pending"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2213" href="#d0e2213"></a><p class="title"><b>Figure&nbsp;5.11.&nbsp;Job is pending in the main screen</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/concourse/job_running.png" alt="job running"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2224" href="#d0e2224"></a><p class="title"><b>Figure&nbsp;5.12.&nbsp;Job is running in the main screen</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/concourse/running_pipeline.png" alt="running pipeline"></div></div></div><br class="figure-break"></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="multi_concourse-pipeline-cf.html">Prev</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="multi_concourse-faq.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">4.&nbsp;Concourse Pipeline (Cloud Foundry)&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="multi_spring-cloud-pipelines.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;6.&nbsp;Concourse FAQ</td></tr></table></div></body></html>

View File

@@ -32,35 +32,35 @@ has all the properties options, but you can delete most of it. If you
set the properties as global env variables you have to remove them from the
seed.</p><p>Anyways, to run the demo just provide in the <code class="literal">REPOS</code> var the comma separated
list of URLs of the 2 aforementioned forks of <code class="literal">github-webhook</code> and `github-analytics'.</p><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2979" href="#d0e2979"></a><p class="title"><b>Figure&nbsp;8.1.&nbsp;Click the 'jenkins-pipeline-seed-cf' job for Cloud Foundry and <code class="literal">jenkins-pipeline-seed-k8s</code> for Kubernetes</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/seed_click.png" alt="seed click"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2993" href="#d0e2993"></a><p class="title"><b>Figure&nbsp;8.2.&nbsp;Click the 'Build with parameters'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/seed_run.png" alt="seed run"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3004" href="#d0e3004"></a><p class="title"><b>Figure&nbsp;8.3.&nbsp;The <code class="literal">REPOS</code> parameter should already contain your forked repos (you&#8217;ll have more properties than the ones in the screenshot)</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/seed.png" alt="seed"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3018" href="#d0e3018"></a><p class="title"><b>Figure&nbsp;8.4.&nbsp;This is how the results of seed should look like</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/seed_built.png" alt="seed built"></div></div></div><br class="figure-break"></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="jenkins-pipeline-cf" href="#jenkins-pipeline-cf"></a>8.1.5&nbsp;Run the <code class="literal">github-webhook</code> pipeline</h3></div></div></div><p>We already create the seed job for you but you&#8217;ll have to run it. When you do
&nbsp;</p><div class="figure"><a name="d0e2943" href="#d0e2943"></a><p class="title"><b>Figure&nbsp;8.1.&nbsp;Click the 'jenkins-pipeline-seed-cf' job for Cloud Foundry and <code class="literal">jenkins-pipeline-seed-k8s</code> for Kubernetes</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/seed_click.png" alt="seed click"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2957" href="#d0e2957"></a><p class="title"><b>Figure&nbsp;8.2.&nbsp;Click the 'Build with parameters'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/seed_run.png" alt="seed run"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2968" href="#d0e2968"></a><p class="title"><b>Figure&nbsp;8.3.&nbsp;The <code class="literal">REPOS</code> parameter should already contain your forked repos (you&#8217;ll have more properties than the ones in the screenshot)</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/seed.png" alt="seed"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e2982" href="#d0e2982"></a><p class="title"><b>Figure&nbsp;8.4.&nbsp;This is how the results of seed should look like</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/seed_built.png" alt="seed built"></div></div></div><br class="figure-break"></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="jenkins-pipeline-cf" href="#jenkins-pipeline-cf"></a>8.1.5&nbsp;Run the <code class="literal">github-webhook</code> pipeline</h3></div></div></div><p>We already create the seed job for you but you&#8217;ll have to run it. When you do
run it you have to provide some properties. By default we create a seed that
has all the properties options, but you can delete most of it. If you
set the properties as global env variables you have to remove them from the
seed.</p><p>Anyways, to run the demo just provide in the <code class="literal">REPOS</code> var the comma separated
list of URLs of the 2 aforementioned forks of <code class="literal">github-webhook</code> and <code class="literal">github-analytics</code>.</p><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3048" href="#d0e3048"></a><p class="title"><b>Figure&nbsp;8.5.&nbsp;Click the 'github-webhook' view</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/seed_views.png" alt="seed views"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3059" href="#d0e3059"></a><p class="title"><b>Figure&nbsp;8.6.&nbsp;Run the pipeline</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/pipeline_run.png" alt="pipeline run"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3012" href="#d0e3012"></a><p class="title"><b>Figure&nbsp;8.5.&nbsp;Click the 'github-webhook' view</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/seed_views.png" alt="seed views"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3023" href="#d0e3023"></a><p class="title"><b>Figure&nbsp;8.6.&nbsp;Run the pipeline</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/pipeline_run.png" alt="pipeline run"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Important"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="images/important.png"></td><th align="left">Important</th></tr><tr><td align="left" valign="top"><p>If your build fails on the <span class="strong"><strong>deploy previous version to stage</strong></span> due to missing jar,
that means that you&#8217;ve forgotten to clear the tags in your repo. Typically that&#8217;s due to the fact that
you&#8217;ve removed the Artifactory volume with deployed JAR whereas a tag in the repo is still pointing there.
<a class="link" href="">Check out this section on how to remove the tag.</a></p></td></tr></table></div><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3080" href="#d0e3080"></a><p class="title"><b>Figure&nbsp;8.7.&nbsp;Click the manual step to go to stage (remember about killing the apps on test env). To do this click the <span class="strong">ARROW</span> next to the job name</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/pipeline_manual.png" alt="pipeline manual"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3044" href="#d0e3044"></a><p class="title"><b>Figure&nbsp;8.7.&nbsp;Click the manual step to go to stage (remember about killing the apps on test env). To do this click the <span class="strong">ARROW</span> next to the job name</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/pipeline_manual.png" alt="pipeline manual"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Important"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="images/important.png"></td><th align="left">Important</th></tr><tr><td align="left" valign="top"><p>Most likely you will run out of memory so when reaching the stage
environment it&#8217;s good to kill all apps on test. <a class="link" href="">Check out the FAQ section for more details</a>!</p></td></tr></table></div><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3102" href="#d0e3102"></a><p class="title"><b>Figure&nbsp;8.8.&nbsp;The full pipeline should look like this</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/pipeline_finished.png" alt="pipeline finished"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3066" href="#d0e3066"></a><p class="title"><b>Figure&nbsp;8.8.&nbsp;The full pipeline should look like this</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/pipeline_finished.png" alt="pipeline finished"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="declarative-pipeline-cf" href="#declarative-pipeline-cf"></a>8.2&nbsp;Declarative pipeline &amp; Blue Ocean</h2></div></div></div><p>You can also use the <a class="link" href="https://jenkins.io/doc/book/pipeline/syntax/" target="_top">declarative pipeline</a> approach with the
<a class="link" href="https://jenkins.io/projects/blueocean/" target="_top">Blue Ocean UI</a>. Here is a step by step guide to run a pipeline via
this approach.</p><p>The Blue Ocean UI is available under the <code class="literal">blue/</code> URL. E.g. for Docker Machine based setup <code class="literal"><a class="link" href="http://192.168.99.100:8080/blue" target="_top">http://192.168.99.100:8080/blue</a></code>.</p><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3135" href="#d0e3135"></a><p class="title"><b>Figure&nbsp;8.9.&nbsp;Open Blue Ocean UI and click on <code class="literal">github-webhook-declarative-pipeline</code></b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_1.png" alt="blue 1"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3148" href="#d0e3148"></a><p class="title"><b>Figure&nbsp;8.10.&nbsp;Your first run will look like this. Click <code class="literal">Run</code> button</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_2.png" alt="blue 2"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3162" href="#d0e3162"></a><p class="title"><b>Figure&nbsp;8.11.&nbsp;Enter parameters required for the build and click <code class="literal">run</code></b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_3.png" alt="blue 3"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3175" href="#d0e3175"></a><p class="title"><b>Figure&nbsp;8.12.&nbsp;A list of pipelines will be shown. Click your first run.</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_4.png" alt="blue 4"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3186" href="#d0e3186"></a><p class="title"><b>Figure&nbsp;8.13.&nbsp;State if you want to go to production or not and click <code class="literal">Proceed</code></b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_5.png" alt="blue 5"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3199" href="#d0e3199"></a><p class="title"><b>Figure&nbsp;8.14.&nbsp;The build is in progress&#8230;&#8203;</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_6.png" alt="blue 6"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3210" href="#d0e3210"></a><p class="title"><b>Figure&nbsp;8.15.&nbsp;The pipeline is done!</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_7.png" alt="blue 7"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3099" href="#d0e3099"></a><p class="title"><b>Figure&nbsp;8.9.&nbsp;Open Blue Ocean UI and click on <code class="literal">github-webhook-declarative-pipeline</code></b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_1.png" alt="blue 1"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3112" href="#d0e3112"></a><p class="title"><b>Figure&nbsp;8.10.&nbsp;Your first run will look like this. Click <code class="literal">Run</code> button</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_2.png" alt="blue 2"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3126" href="#d0e3126"></a><p class="title"><b>Figure&nbsp;8.11.&nbsp;Enter parameters required for the build and click <code class="literal">run</code></b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_3.png" alt="blue 3"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3139" href="#d0e3139"></a><p class="title"><b>Figure&nbsp;8.12.&nbsp;A list of pipelines will be shown. Click your first run.</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_4.png" alt="blue 4"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3150" href="#d0e3150"></a><p class="title"><b>Figure&nbsp;8.13.&nbsp;State if you want to go to production or not and click <code class="literal">Proceed</code></b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_5.png" alt="blue 5"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3163" href="#d0e3163"></a><p class="title"><b>Figure&nbsp;8.14.&nbsp;The build is in progress&#8230;&#8203;</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_6.png" alt="blue 6"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3174" href="#d0e3174"></a><p class="title"><b>Figure&nbsp;8.15.&nbsp;The pipeline is done!</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_7.png" alt="blue 7"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Important"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="images/important.png"></td><th align="left">Important</th></tr><tr><td align="left" valign="top"><p>There is no possibility of restarting pipeline from specific stage, after failure. Please
check out this <a class="link" href="https://issues.jenkins-ci.org/browse/JENKINS-33846" target="_top">issue</a> for more information</p></td></tr></table></div><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="images/warning.png"></td><th align="left">Warning</th></tr><tr><td align="left" valign="top"><p>Currently there is no way to introduce manual steps in a performant way. Jenkins is
blocking an executor when manual step is required. That means that you&#8217;ll run out of executors

View File

@@ -24,35 +24,35 @@ has all the properties options, but you can delete most of it. If you
set the properties as global env variables you have to remove them from the
seed.</p><p>Anyways, to run the demo just provide in the <code class="literal">REPOS</code> var the comma separated
list of URLs of the 2 aforementioned forks of <code class="literal">github-webhook</code> and `github-analytics'.</p><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3782" href="#d0e3782"></a><p class="title"><b>Figure&nbsp;9.1.&nbsp;Click the 'jenkins-pipeline-seed-cf' job for Cloud Foundry and <code class="literal">jenkins-pipeline-seed-k8s</code> for Kubernetes</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/seed_click.png" alt="seed click"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3796" href="#d0e3796"></a><p class="title"><b>Figure&nbsp;9.2.&nbsp;Click the 'Build with parameters'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/seed_run.png" alt="seed run"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3807" href="#d0e3807"></a><p class="title"><b>Figure&nbsp;9.3.&nbsp;The <code class="literal">REPOS</code> parameter should already contain your forked repos (you&#8217;ll have more properties than the ones in the screenshot)</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/seed.png" alt="seed"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3821" href="#d0e3821"></a><p class="title"><b>Figure&nbsp;9.4.&nbsp;This is how the results of seed should look like</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/seed_built.png" alt="seed built"></div></div></div><br class="figure-break"></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="jenkins-pipeline-k8s" href="#jenkins-pipeline-k8s"></a>9.1.4&nbsp;Run the <code class="literal">github-webhook</code> pipeline</h3></div></div></div><p>We already create the seed job for you but you&#8217;ll have to run it. When you do
&nbsp;</p><div class="figure"><a name="d0e3746" href="#d0e3746"></a><p class="title"><b>Figure&nbsp;9.1.&nbsp;Click the 'jenkins-pipeline-seed-cf' job for Cloud Foundry and <code class="literal">jenkins-pipeline-seed-k8s</code> for Kubernetes</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/seed_click.png" alt="seed click"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3760" href="#d0e3760"></a><p class="title"><b>Figure&nbsp;9.2.&nbsp;Click the 'Build with parameters'</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/seed_run.png" alt="seed run"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3771" href="#d0e3771"></a><p class="title"><b>Figure&nbsp;9.3.&nbsp;The <code class="literal">REPOS</code> parameter should already contain your forked repos (you&#8217;ll have more properties than the ones in the screenshot)</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/seed.png" alt="seed"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3785" href="#d0e3785"></a><p class="title"><b>Figure&nbsp;9.4.&nbsp;This is how the results of seed should look like</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/seed_built.png" alt="seed built"></div></div></div><br class="figure-break"></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="jenkins-pipeline-k8s" href="#jenkins-pipeline-k8s"></a>9.1.4&nbsp;Run the <code class="literal">github-webhook</code> pipeline</h3></div></div></div><p>We already create the seed job for you but you&#8217;ll have to run it. When you do
run it you have to provide some properties. By default we create a seed that
has all the properties options, but you can delete most of it. If you
set the properties as global env variables you have to remove them from the
seed.</p><p>Anyways, to run the demo just provide in the <code class="literal">REPOS</code> var the comma separated
list of URLs of the 2 aforementioned forks of <code class="literal">github-webhook</code> and <code class="literal">github-analytics</code>.</p><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3851" href="#d0e3851"></a><p class="title"><b>Figure&nbsp;9.5.&nbsp;Click the 'github-webhook' view</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/seed_views.png" alt="seed views"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3862" href="#d0e3862"></a><p class="title"><b>Figure&nbsp;9.6.&nbsp;Run the pipeline</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/pipeline_run.png" alt="pipeline run"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3815" href="#d0e3815"></a><p class="title"><b>Figure&nbsp;9.5.&nbsp;Click the 'github-webhook' view</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/seed_views.png" alt="seed views"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3826" href="#d0e3826"></a><p class="title"><b>Figure&nbsp;9.6.&nbsp;Run the pipeline</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/pipeline_run.png" alt="pipeline run"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Important"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="images/important.png"></td><th align="left">Important</th></tr><tr><td align="left" valign="top"><p>If your build fails on the <span class="strong"><strong>deploy previous version to stage</strong></span> due to missing jar,
that means that you&#8217;ve forgotten to clear the tags in your repo. Typically that&#8217;s due to the fact that
you&#8217;ve removed the Artifactory volume with deployed JAR whereas a tag in the repo is still pointing there.
<a class="link" href="">Check out this section on how to remove the tag.</a></p></td></tr></table></div><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3883" href="#d0e3883"></a><p class="title"><b>Figure&nbsp;9.7.&nbsp;Click the manual step to go to stage (remember about killing the apps on test env). To do this click the <span class="strong">ARROW</span> next to the job name</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/pipeline_manual.png" alt="pipeline manual"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3847" href="#d0e3847"></a><p class="title"><b>Figure&nbsp;9.7.&nbsp;Click the manual step to go to stage (remember about killing the apps on test env). To do this click the <span class="strong">ARROW</span> next to the job name</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/pipeline_manual.png" alt="pipeline manual"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Important"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="images/important.png"></td><th align="left">Important</th></tr><tr><td align="left" valign="top"><p>Most likely you will run out of memory so when reaching the stage
environment it&#8217;s good to kill all apps on test. <a class="link" href="">Check out the FAQ section for more details</a>!</p></td></tr></table></div><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3905" href="#d0e3905"></a><p class="title"><b>Figure&nbsp;9.8.&nbsp;The full pipeline should look like this</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/pipeline_finished.png" alt="pipeline finished"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3869" href="#d0e3869"></a><p class="title"><b>Figure&nbsp;9.8.&nbsp;The full pipeline should look like this</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/pipeline_finished.png" alt="pipeline finished"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="declarative-pipeline-k8s" href="#declarative-pipeline-k8s"></a>9.2&nbsp;Declarative pipeline &amp; Blue Ocean</h2></div></div></div><p>You can also use the <a class="link" href="https://jenkins.io/doc/book/pipeline/syntax/" target="_top">declarative pipeline</a> approach with the
<a class="link" href="https://jenkins.io/projects/blueocean/" target="_top">Blue Ocean UI</a>. Here is a step by step guide to run a pipeline via
this approach.</p><p>The Blue Ocean UI is available under the <code class="literal">blue/</code> URL. E.g. for Docker Machine based setup <code class="literal"><a class="link" href="http://192.168.99.100:8080/blue" target="_top">http://192.168.99.100:8080/blue</a></code>.</p><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3938" href="#d0e3938"></a><p class="title"><b>Figure&nbsp;9.9.&nbsp;Open Blue Ocean UI and click on <code class="literal">github-webhook-declarative-pipeline</code></b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_1.png" alt="blue 1"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3951" href="#d0e3951"></a><p class="title"><b>Figure&nbsp;9.10.&nbsp;Your first run will look like this. Click <code class="literal">Run</code> button</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_2.png" alt="blue 2"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3965" href="#d0e3965"></a><p class="title"><b>Figure&nbsp;9.11.&nbsp;Enter parameters required for the build and click <code class="literal">run</code></b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_3.png" alt="blue 3"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3978" href="#d0e3978"></a><p class="title"><b>Figure&nbsp;9.12.&nbsp;A list of pipelines will be shown. Click your first run.</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_4.png" alt="blue 4"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3989" href="#d0e3989"></a><p class="title"><b>Figure&nbsp;9.13.&nbsp;State if you want to go to production or not and click <code class="literal">Proceed</code></b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_5.png" alt="blue 5"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e4002" href="#d0e4002"></a><p class="title"><b>Figure&nbsp;9.14.&nbsp;The build is in progress&#8230;&#8203;</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_6.png" alt="blue 6"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e4013" href="#d0e4013"></a><p class="title"><b>Figure&nbsp;9.15.&nbsp;The pipeline is done!</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_7.png" alt="blue 7"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3902" href="#d0e3902"></a><p class="title"><b>Figure&nbsp;9.9.&nbsp;Open Blue Ocean UI and click on <code class="literal">github-webhook-declarative-pipeline</code></b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_1.png" alt="blue 1"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3915" href="#d0e3915"></a><p class="title"><b>Figure&nbsp;9.10.&nbsp;Your first run will look like this. Click <code class="literal">Run</code> button</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_2.png" alt="blue 2"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3929" href="#d0e3929"></a><p class="title"><b>Figure&nbsp;9.11.&nbsp;Enter parameters required for the build and click <code class="literal">run</code></b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_3.png" alt="blue 3"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3942" href="#d0e3942"></a><p class="title"><b>Figure&nbsp;9.12.&nbsp;A list of pipelines will be shown. Click your first run.</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_4.png" alt="blue 4"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3953" href="#d0e3953"></a><p class="title"><b>Figure&nbsp;9.13.&nbsp;State if you want to go to production or not and click <code class="literal">Proceed</code></b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_5.png" alt="blue 5"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3966" href="#d0e3966"></a><p class="title"><b>Figure&nbsp;9.14.&nbsp;The build is in progress&#8230;&#8203;</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_6.png" alt="blue 6"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="figure"><a name="d0e3977" href="#d0e3977"></a><p class="title"><b>Figure&nbsp;9.15.&nbsp;The pipeline is done!</b></p><div class="figure-contents"><div class="mediaobject"><img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-pipelines/master/docs-sources/src/main/asciidoc/images/jenkins/blue_7.png" alt="blue 7"></div></div></div><br class="figure-break"><p>&nbsp;
&nbsp;</p><div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Important"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="images/important.png"></td><th align="left">Important</th></tr><tr><td align="left" valign="top"><p>There is no possibility of restarting pipeline from specific stage, after failure. Please
check out this <a class="link" href="https://issues.jenkins-ci.org/browse/JENKINS-33846" target="_top">issue</a> for more information</p></td></tr></table></div><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="images/warning.png"></td><th align="left">Warning</th></tr><tr><td align="left" valign="top"><p>Currently there is no way to introduce manual steps in a performant way. Jenkins is
blocking an executor when manual step is required. That means that you&#8217;ll run out of executors

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long