<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CDS Archives - OVHcloud Blog</title>
	<atom:link href="https://blog.ovhcloud.com/tag/cds/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.ovhcloud.com/tag/cds/</link>
	<description>Innovation for Freedom</description>
	<lastBuildDate>Tue, 01 Mar 2022 15:49:38 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://blog.ovhcloud.com/wp-content/uploads/2019/07/cropped-cropped-nouveau-logo-ovh-rebranding-32x32.gif</url>
	<title>CDS Archives - OVHcloud Blog</title>
	<link>https://blog.ovhcloud.com/tag/cds/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Continuous Delivery and Deployment Workflows with CDS</title>
		<link>https://blog.ovhcloud.com/continuous-delivery-and-deployment-workflows-with-cds/</link>
		
		<dc:creator><![CDATA[Yvonnick Esnault]]></dc:creator>
		<pubDate>Fri, 01 Mar 2019 12:38:13 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[CDS]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Industrialization]]></category>
		<guid isPermaLink="false">https://blog.ovh.com/fr/blog/?p=14718</guid>

					<description><![CDATA[The CDS Workflow is a key feature of OVH CI/CD Platform. This structuring choice to add an additional concept above CI/CD pipelines and jobs is definitely an essential feature after more than three years of intense use.

Before going further on the explanation of a CDS workflow, we will make some reminders about the concepts of pipelines and jobs. Those concepts are based on the reference book 8 Principles of Continuous Delivery.<img src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fcontinuous-delivery-and-deployment-workflows-with-cds%2F&amp;action_name=Continuous%20Delivery%20and%20Deployment%20Workflows%20with%20CDS&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[
<p>The CDS Workflow is a key feature of the OVH CI/CD Platform. This structural choice adds an additional concept above&nbsp;CI/CD&nbsp;pipelines and jobs, and after&nbsp;more than three years of intensive use, is definitely an essential feature.</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img fetchpriority="high" decoding="async" src="https://www.ovh.com/blog/wp-content/uploads/2019/02/DE383951-7D79-4320-BB30-5EAE0F8186E5-1024x354.jpeg" alt="Continuous Delivery and Deployment Workflows with CDS" class="wp-image-14861" width="768" height="266" srcset="https://blog.ovhcloud.com/wp-content/uploads/2019/02/DE383951-7D79-4320-BB30-5EAE0F8186E5-1024x354.jpeg 1024w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/DE383951-7D79-4320-BB30-5EAE0F8186E5-300x104.jpeg 300w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/DE383951-7D79-4320-BB30-5EAE0F8186E5-768x266.jpeg 768w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/DE383951-7D79-4320-BB30-5EAE0F8186E5-1200x415.jpeg 1200w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/DE383951-7D79-4320-BB30-5EAE0F8186E5.jpeg 1529w" sizes="(max-width: 768px) 100vw, 768px" /></figure></div>



<p>Before delving into a full explanation of CDS workflows, let&#8217;s review some of the key concepts behind pipelines and jobs.&nbsp;Those concepts are drawn from the reference book,&nbsp;<a href="https://devopsnet.com/2011/08/04/continuous-delivery/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">8 Principles of Continuous Delivery</a></p>



<h3 class="wp-block-heading"><span class="TextRun SCXW16074631" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW16074631">The basic element: “The job”</span></span><span class="EOP SCXW16074631" data-ccp-props="{&quot;335559738&quot;:40}">&nbsp;</span></h3>



<p><span class="TextRun SCXW21425026" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW21425026">A job is composed of steps, which will be run sequentially. A&nbsp;</span></span><span class="TextRun SCXW21425026" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW21425026">j</span></span><span class="TextRun SCXW21425026" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW21425026">ob is executed in a dedicated workspace (i.e. filesystem). A new workspace is assigned for each new run of a job.</span></span></p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img decoding="async" src="/blog/wp-content/uploads/2019/02/1C6F2AC3-2321-4BC2-B449-DE3EA8FC1BCE.png" alt="CDS Job" class="wp-image-14858" width="512" height="444" srcset="https://blog.ovhcloud.com/wp-content/uploads/2019/02/1C6F2AC3-2321-4BC2-B449-DE3EA8FC1BCE.png 1276w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/1C6F2AC3-2321-4BC2-B449-DE3EA8FC1BCE-300x259.png 300w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/1C6F2AC3-2321-4BC2-B449-DE3EA8FC1BCE-768x664.png 768w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/1C6F2AC3-2321-4BC2-B449-DE3EA8FC1BCE-1024x885.png 1024w" sizes="(max-width: 512px) 100vw, 512px" /></figure></div>



<p><span class="TextRun SCXW266219635" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW266219635">A</span></span><span class="TextRun SCXW266219635" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW266219635">&nbsp;standard build job looks like this</span></span><span class="TextRun SCXW266219635" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW266219635">:</span></span><span class="EOP SCXW266219635" data-ccp-props="{}">&nbsp;</span></p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img decoding="async" src="/blog/wp-content/uploads/2019/02/60B4A0FC-A0CA-44E2-9E06-79E94258DC6D.png" alt="CDS build job" class="wp-image-14859" width="447" height="373" srcset="https://blog.ovhcloud.com/wp-content/uploads/2019/02/60B4A0FC-A0CA-44E2-9E06-79E94258DC6D.png 1156w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/60B4A0FC-A0CA-44E2-9E06-79E94258DC6D-300x250.png 300w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/60B4A0FC-A0CA-44E2-9E06-79E94258DC6D-768x640.png 768w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/60B4A0FC-A0CA-44E2-9E06-79E94258DC6D-1024x853.png 1024w" sizes="(max-width: 447px) 100vw, 447px" /></figure></div>



<p>You can use &#8220;built-in&#8221; actions, such as&nbsp;checkoutApplication, script,&nbsp;jUnit, artifact upload/download.</p>



<ul class="wp-block-list"><li>The&nbsp;<b><i>c</i></b><b><i>heckoutApplication</i></b>&nbsp;action clones&nbsp;your Git repository</li><li data-listid="1" data-aria-posinset="2" data-aria-level="1">The <b><i>Script</i></b>&nbsp;action executes your build command as “make build”</li><li data-listid="1" data-aria-posinset="1" data-aria-level="1">The&nbsp;<b><i>artifactUpload</i></b>&nbsp;action uploads&nbsp;previously-built binaries</li><li data-listid="1" data-aria-posinset="2" data-aria-level="1">The <b><i>jUnit</i></b>&nbsp;action parses a given Junit-formatted XML file to extract its test results</li></ul>



<h3 class="wp-block-heading"><span class="TextRun SCXW173436166" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW173436166">A pipeline: How to orchestrate your jobs with stages</span></span></h3>



<p><span class="TextRun SCXW221416392" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW221416392">W</span></span><span class="TextRun SCXW221416392" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW221416392">ith CDS, a pipeline is not a job&nbsp;</span></span><span class="TextRun SCXW221416392" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW221416392">flow</span></span><span class="TextRun SCXW221416392" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW221416392">. A&nbsp;</span></span><span class="TextRun SCXW221416392" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW221416392">pipeline</span></span><span class="TextRun SCXW221416392" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW221416392">&nbsp;is a sequence of stages, each of which contains&nbsp;</span></span><span class="TextRun SCXW221416392" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW221416392">one</span></span><span class="TextRun SCXW221416392" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW221416392">&nbsp;or more jobs</span></span><span class="TextRun SCXW221416392" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW221416392">.</span></span></p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img loading="lazy" decoding="async" src="https://www.ovh.com/blog/wp-content/uploads/2019/02/69F07485-71CE-49F9-9DCF-CD866B709D64-1024x847.png" alt="CDS Pipeline" class="wp-image-14857" width="512" height="424" srcset="https://blog.ovhcloud.com/wp-content/uploads/2019/02/69F07485-71CE-49F9-9DCF-CD866B709D64-1024x847.png 1024w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/69F07485-71CE-49F9-9DCF-CD866B709D64-300x248.png 300w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/69F07485-71CE-49F9-9DCF-CD866B709D64-768x635.png 768w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/69F07485-71CE-49F9-9DCF-CD866B709D64-1200x992.png 1200w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/69F07485-71CE-49F9-9DCF-CD866B709D64.png 1364w" sizes="auto, (max-width: 512px) 100vw, 512px" /></figure></div>



<p>A &nbsp;<b>Stage&nbsp;</b> is a&nbsp;<strong>set of jobs that will be run in parallel</strong>. Stages are executed sequentially, if the previous stage is successful.<span data-ccp-props="{&quot;134233117&quot;:true,&quot;134233118&quot;:true}">&nbsp;</span></p>



<p>Let&#8217;s take a real-life use case: the pipeline that built CDS. This pipeline has four stages:<span data-ccp-props="{&quot;134233117&quot;:true,&quot;134233118&quot;:true}">&nbsp;</span></p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="885" height="520" src="/blog/wp-content/uploads/2019/02/cds_blog_art2_pipeline_cds.png" alt="" class="wp-image-14721" srcset="https://blog.ovhcloud.com/wp-content/uploads/2019/02/cds_blog_art2_pipeline_cds.png 885w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/cds_blog_art2_pipeline_cds-300x176.png 300w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/cds_blog_art2_pipeline_cds-768x451.png 768w" sizes="auto, (max-width: 885px) 100vw, 885px" /></figure></div>



<ul class="wp-block-list"><li data-listid="2" data-aria-posinset="0" data-aria-level="1">The “Build Minimal” stage is launched for all Git&nbsp;branches. The main goal of this stage is to compile the&nbsp;Linux version of CDS binaries.<span data-ccp-props="{&quot;134233117&quot;:true,&quot;134233118&quot;:true}">&nbsp;</span></li><li data-listid="2" data-aria-posinset="0" data-aria-level="1">The “Build other&nbsp;os/arch” stage is&nbsp;<i>only&nbsp;</i>launched on the master branch. This stage compiles all&nbsp;&nbsp;binaries supported by the os/arch:&nbsp;linux,&nbsp;openbsd,&nbsp;freebsd,&nbsp;darwin, windows&nbsp;– 386, amd64 and arm.&nbsp;<span data-ccp-props="{&quot;134233117&quot;:true,&quot;134233118&quot;:true}">&nbsp;</span></li><li data-listid="2" data-aria-posinset="0" data-aria-level="1">The “Package” stage is launched for all Git&nbsp;branches. This stage prepares the docker image and Debian package.</li><li data-listid="2" data-aria-posinset="0" data-aria-level="1">Finally, the “Publish” stage is launched, whatever the&nbsp;Git&nbsp;branch.<span data-ccp-props="{&quot;134233117&quot;:true,&quot;134233118&quot;:true}">&nbsp;</span></li></ul>



<p>Most tasks are executed in parallel, whenever possible. This results in very fast feedback, so we will quickly know if the compilation&nbsp;is&nbsp;OK or not.<span data-ccp-props="{&quot;134233117&quot;:true,&quot;134233118&quot;:true}">&nbsp;</span></p>



<h3 class="wp-block-heading"><span class="TextRun SCXW40418950" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW40418950">CDS Workflows: How to orchestrate your pipelines</span></span></h3>



<p>The workflow concept is a key feature, and widely considered a native, manageable and feature-rich entity in CDS.&nbsp;A CDS Workflow&nbsp;allows you to chain pipelines with manual or automatic gates, using conditional branching.&nbsp;A workflow can be stored as code, designed on CDS UI, or both, depending on what best suits you.<span data-ccp-props="{&quot;134233117&quot;:true,&quot;134233118&quot;:true}">&nbsp;</span></p>



<p>Let’s take an example. One workflow for building and deploying three micro-services:&nbsp;<span data-ccp-props="{&quot;134233117&quot;:true,&quot;134233118&quot;:true}">&nbsp;</span></p>



<ul class="wp-block-list"><li data-listid="2" data-aria-posinset="0" data-aria-level="1">Build each micro-service<span data-ccp-props="{&quot;134233117&quot;:true,&quot;134233118&quot;:true}">&nbsp;</span></li><li data-listid="2" data-aria-posinset="0" data-aria-level="1">Deploy them in preproduction<span data-ccp-props="{&quot;134233117&quot;:true,&quot;134233118&quot;:true}">&nbsp;</span></li><li data-listid="2" data-aria-posinset="0" data-aria-level="1">Run integration tests on preproduction environment<span data-ccp-props="{&quot;134233117&quot;:true,&quot;134233118&quot;:true}">&nbsp;</span></li><li data-listid="2" data-aria-posinset="0" data-aria-level="1">Deploy them in production, then re-run integration tests in production</li></ul>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="885" height="198" src="/blog/wp-content/uploads/2019/02/cds_blog_art2_workflow.png" alt="" class="wp-image-14728" srcset="https://blog.ovhcloud.com/wp-content/uploads/2019/02/cds_blog_art2_workflow.png 885w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/cds_blog_art2_workflow-300x67.png 300w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/cds_blog_art2_workflow-768x172.png 768w" sizes="auto, (max-width: 885px) 100vw, 885px" /></figure></div>



<p>For the building part, there is only one pipeline to manage, which is used three times in the workflow with a different application/environment context each time.&nbsp;This is called the “pipeline context”.<span data-ccp-props="{&quot;134233117&quot;:true,&quot;134233118&quot;:true}">&nbsp;</span></p>



<p>Any conditional branching against the workflow (e.g.“automatic deployment on the staging environment, only if the current Git branch is master”) can be executed through a “run conditional” set on the pipeline.<span data-ccp-props="{}">&nbsp;</span></p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="885" height="528" src="/blog/wp-content/uploads/2019/02/cds_blog_art2_run_conditions.png" alt="" class="wp-image-14723" srcset="https://blog.ovhcloud.com/wp-content/uploads/2019/02/cds_blog_art2_run_conditions.png 885w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/cds_blog_art2_run_conditions-300x179.png 300w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/cds_blog_art2_run_conditions-768x458.png 768w" sizes="auto, (max-width: 885px) 100vw, 885px" /></figure></div>



<p><span class="TextRun SCXW249992857" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW249992857">Let&#8217;s look at a &nbsp;a real use case</span></span><span class="TextRun SCXW249992857" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW249992857">.&nbsp;</span></span><span class="TextRun SCXW249992857" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW249992857">This is the workflow that builds, tests and deploys CDS in production at OVH</span></span><span class="TextRun SCXW249992857" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW249992857">&nbsp;</span></span><span class="TextRun SCXW249992857" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW249992857">(</span></span><em><span class="TextRun SCXW249992857" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW249992857">yes, CDS builds and deploys itself!</span></span></em><span class="TextRun SCXW249992857" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW249992857">):</span></span></p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="885" height="446" src="/blog/wp-content/uploads/2019/02/cds_blog_art2_workflow_cds.png" alt="" class="wp-image-14724" srcset="https://blog.ovhcloud.com/wp-content/uploads/2019/02/cds_blog_art2_workflow_cds.png 885w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/cds_blog_art2_workflow_cds-300x151.png 300w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/cds_blog_art2_workflow_cds-768x387.png 768w" sizes="auto, (max-width: 885px) 100vw, 885px" /></figure></div>



<ol class="wp-block-list"><li data-listid="3" data-aria-posinset="1" data-aria-level="1">For each Git commit, the workflow is triggered<span data-ccp-props="{&quot;134233117&quot;:true,&quot;134233118&quot;:true}">&nbsp;</span></li><li data-listid="3" data-aria-posinset="1" data-aria-level="1">The UI is&nbsp;packaged, all binaries are prepared, and the docker images are built. The “UT” job launches the unit tests. The&nbsp;job “IT” job installs CDS in an ephemeral environment and launches the&nbsp;integration tests&nbsp;on it. Part 2 is&nbsp;automatically triggered&nbsp;on all Git commits.&nbsp;<span data-ccp-props="{&quot;134233117&quot;:true,&quot;134233118&quot;:true}">&nbsp;</span></li><li data-listid="3" data-aria-posinset="1" data-aria-level="1">Part 3 deploys&nbsp;CDS on our preproduction environment, then launches the&nbsp;integration&nbsp;tests on it.&nbsp;It is started automatically when the current branch is the master branch.<span data-ccp-props="{&quot;134233117&quot;:true,&quot;134233118&quot;:true}">&nbsp;</span></li><li data-listid="3" data-aria-posinset="1" data-aria-level="1">Last but not least, part 4 deploys&nbsp;CDS on our production environment.<span data-ccp-props="{&quot;134233117&quot;:true,&quot;134233118&quot;:true}">&nbsp;</span></li></ol>



<p><span class="TextRun SCXW65390992" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW65390992">I</span></span><span class="TextRun SCXW65390992" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW65390992">f there is a failure on a pipeline, it may look like this:</span></span></p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="885" height="298" src="/blog/wp-content/uploads/2019/02/cds_blog_art2_workflow_failed.png" alt="" class="wp-image-14725" srcset="https://blog.ovhcloud.com/wp-content/uploads/2019/02/cds_blog_art2_workflow_failed.png 885w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/cds_blog_art2_workflow_failed-300x101.png 300w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/cds_blog_art2_workflow_failed-768x259.png 768w" sizes="auto, (max-width: 885px) 100vw, 885px" /></figure></div>



<p><span class="TextRun SCXW149395370" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW149395370">The same kind of workflow is used for&nbsp;</span></span><span class="TextRun SCXW149395370" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW149395370">building</span></span><span class="TextRun SCXW149395370" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW149395370">&nbsp;and deplo</span></span><span class="TextRun SCXW149395370" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW149395370">ying</span></span><span class="TextRun SCXW149395370" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW149395370">&nbsp;the Prescience Proje</span></span><span class="TextRun SCXW149395370" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW149395370">c</span></span><span class="TextRun SCXW149395370" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW149395370">t (</span></span><a class="Hyperlink SCXW149395370" href="https://labs.ovh.com/machine-learning-platform" target="_blank" rel="noopener noreferrer" data-wpel-link="exclude"><span class="TextRun Underlined SCXW149395370" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW149395370">https://labs.ovh.com/machine-learning-platform</span></span></a><span class="TextRun SCXW149395370" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW149395370">):</span></span></p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="885" height="616" src="/blog/wp-content/uploads/2019/02/cds_blog_art2_workflow_prescience.png" alt="" class="wp-image-14726" srcset="https://blog.ovhcloud.com/wp-content/uploads/2019/02/cds_blog_art2_workflow_prescience.png 885w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/cds_blog_art2_workflow_prescience-300x209.png 300w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/cds_blog_art2_workflow_prescience-768x535.png 768w" sizes="auto, (max-width: 885px) 100vw, 885px" /></figure></div>



<p><span class="TextRun SCXW181015173" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW181015173">But of course, you&#8217;re not limited to the most complex tasks with CDS Workflows! These two examples demonstrate the fact that workflows allow to build and deploy a coherent set of micro-services</span></span><span class="TextRun SCXW181015173" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW181015173">. I</span></span><span class="TextRun SCXW181015173" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW181015173">f you have simpler needs, your workflows are, of course, simpler.</span></span></p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="300" height="204" src="/blog/wp-content/uploads/2019/02/cds_blog_art2_workflow_simple-300x204.png" alt="" class="wp-image-14727" srcset="https://blog.ovhcloud.com/wp-content/uploads/2019/02/cds_blog_art2_workflow_simple-300x204.png 300w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/cds_blog_art2_workflow_simple-768x522.png 768w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/cds_blog_art2_workflow_simple.png 856w" sizes="auto, (max-width: 300px) 100vw, 300px" /></figure></div>



<p>Pipeline reusability allows you to easily maintain the technical parts of the build, tests and deployments, even if you have hundreds of&nbsp;applications.<span data-ccp-props="{}">&nbsp;</span>If hundreds of applications share the same kind of workflows, you can leverage the maintainability of the workflow templates. We will talk more about this in a future post.</p>



<h3 class="wp-block-heading"><span class="TextRun SCXW112993533" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW112993533">M</span></span><span class="TextRun SCXW112993533" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW112993533">uch more than&nbsp;</span></span><span class="TextRun SCXW112993533" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW112993533">“P</span></span><span class="TextRun SCXW112993533" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW112993533">ipeline as&nbsp;</span></span><span class="TextRun SCXW112993533" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW112993533">C</span></span><span class="TextRun SCXW112993533" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW112993533">ode</span></span><span class="TextRun SCXW112993533" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW112993533">”&#8230;</span></span><span class="TextRun SCXW112993533" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW112993533">&nbsp;</span></span><span class="TextRun SCXW112993533" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW112993533">“Workflow as Code”</span></span></h3>



<p>There is no compromise with CDS. Some users prefer to draw the workflows by the&nbsp;web UI, others prefer to write&nbsp;yaml&nbsp;code. CDS lets you do both!<span data-ccp-props="{&quot;134233117&quot;:true,&quot;134233118&quot;:true}">&nbsp;</span></p>



<p>There are two ways to store workflows: either in the CDS&nbsp;database&nbsp;or on your Git repository&nbsp;with your source code. We call this “Workflow as Code”<span data-ccp-props="{&quot;134233117&quot;:true,&quot;134233118&quot;:true}">.</span></p>



<p>This makes it possible to have a workflow on a given branch, and then develop it on another branch. CDS will instantiate the workflow&nbsp;on the fly, based on the&nbsp;yaml&nbsp;code present on the current branch.</p>



<p><span class="TextRun SCXW158005539" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW158005539">CDS is OVH open-source software, and can be found on&nbsp;</span></span><a class="Hyperlink SCXW158005539" href="https://github.com/ovh/cds" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external"><span class="TextRun Underlined SCXW158005539" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW158005539">https://github.com/ovh/cds</span></span></a>,<span class="TextRun SCXW158005539" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW158005539">&nbsp;with documentation on&nbsp;</span></span><a class="Hyperlink SCXW158005539" href="https://ovh.github.io/cds" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external"><span class="TextRun Underlined SCXW158005539" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW158005539">https://ovh.github.io/cds</span></span></a><span class="TextRun SCXW158005539" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW158005539">.&nbsp;</span></span></p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="300" height="150" src="/blog/wp-content/uploads/2019/02/cds-header-300x150.jpg" alt="CDS" class="wp-image-14628" srcset="https://blog.ovhcloud.com/wp-content/uploads/2019/02/cds-header-300x150.jpg 300w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/cds-header-768x384.jpg 768w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/cds-header.jpg 800w" sizes="auto, (max-width: 300px) 100vw, 300px" /></figure></div>



<p>Previous Posts:<span data-ccp-props="{}">&nbsp;</span></p>



<ul class="wp-block-list"><li data-listid="2" data-aria-posinset="0" data-aria-level="1">CDS Introduction:&nbsp;<a href="https://www.ovh.com/fr/blog/how-does-ovh-manage-the-ci-cd-at-scale/" data-wpel-link="exclude">https://www.ovh.com/fr/blog/how-does-ovh-manage-the-ci-cd-at-scale/</a>&nbsp;<span data-ccp-props="{&quot;134233279&quot;:true}">&nbsp;</span></li><li data-listid="2" data-aria-posinset="0" data-aria-level="1">DataBuzzWord&nbsp;Podcast (French):&nbsp;<a href="https://www.ovh.com/fr/blog/understanding-ci-cd-for-big-data-and-machine-learning/" data-wpel-link="exclude">https://www.ovh.com/fr/blog/understanding-ci-cd-for-big-data-and-machine-learning/</a>&nbsp;&nbsp;<span data-ccp-props="{&quot;134233279&quot;:true}">&nbsp;</span></li></ul>



<p><span data-ccp-props="{}">&nbsp;</span></p>
<img loading="lazy" decoding="async" src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fcontinuous-delivery-and-deployment-workflows-with-cds%2F&amp;action_name=Continuous%20Delivery%20and%20Deployment%20Workflows%20with%20CDS&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How does OVH manage the CI/CD at scale?</title>
		<link>https://blog.ovhcloud.com/how-does-ovh-manage-the-ci-cd-at-scale/</link>
		
		<dc:creator><![CDATA[Yvonnick Esnault]]></dc:creator>
		<pubDate>Thu, 14 Feb 2019 15:22:39 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[CDS]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Industrialization]]></category>
		<guid isPermaLink="false">https://blog.ovh.com/fr/blog/?p=14461</guid>

					<description><![CDATA[From git commit to production, the delivery process is the set of steps that take place to deliver your service to your customers. Continuous Integration and Continuous Delivery – CI/CD - are practices based on the Agile Values which aim to automate this process as much as possible.



The Continuous Delivery Team @OVH has a mission: to help the OVH developers to industrialize and automate their delivery process. The CD team is here to advocate CI/CD best practices and maintain the ecosystem tools, with a maximum focus on as-a-service solutions.



The central point of this ecosystem is a tool built in-house at OVH, named CDS.
CDS is an OVH opensource software, you will find it on https://github.com/ovh/cds with documentation on https://ovh.github.io/cds.<img src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fhow-does-ovh-manage-the-ci-cd-at-scale%2F&amp;action_name=How%20does%20OVH%20manage%20the%20CI%2FCD%20at%20scale%3F&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[<p><i>The delivery process is the set of steps &#8211; from git commit to production &#8211; that takes place to deliver your service to your customers. Drawing on agile values, Continuous Integration and Continuous Delivery (CI/CD ) are practices that aim to automate this process as much as possible.</i></p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-14529" src="/blog/wp-content/uploads/2019/02/FE68B6A7-7885-4C60-8FF4-B929005EEF96-300x56.png" alt="From git to production" width="512" height="97" /></p>
<p><i>The Continuous Delivery Team at OVH has one fundamental mission: to help the OVH developers industrialise and automate their delivery processes. The CD team is here to advocate CI/CD best practices and maintain our ecosystem tools, with the maximum focus on as-a-service solutions.</i></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-14512" src="/blog/wp-content/uploads/2019/02/CE25CF9F-9489-4B9D-B123-FE4FD613EF85-297x300.png" alt="CDS" width="297" height="300" srcset="https://blog.ovhcloud.com/wp-content/uploads/2019/02/CE25CF9F-9489-4B9D-B123-FE4FD613EF85-297x300.png 297w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/CE25CF9F-9489-4B9D-B123-FE4FD613EF85-768x775.png 768w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/CE25CF9F-9489-4B9D-B123-FE4FD613EF85.png 793w" sizes="auto, (max-width: 297px) 100vw, 297px" /></p>
<p><i>The centre of this ecosystem is a tool called CDS, developed in-house at OVH.</i><br />
<i>CDS is an open-source software solution that can be found at </i><a style="font-style: italic;" href="https://github.com/ovh/cds" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">https://github.com/ovh/cds,</a><i> with documentation at </i><a style="font-style: italic;" href="https://ovh.github.io/cds" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">https://ovh.github.io/cds</a><i>.</i></p>
<p>CDS is the third generation of CI/CD tools at OVH, following two previous solutions, that were based on Bash, Jenkins, Gitlab and Bamboo. It is the end-result of 12 years&#8217; experience in the field of CI/CD. Familiar with most of the standard tools of the industry, we found that none completely matched our expectations regarding the four key aspects we identified. That is what CDS tries to solve.</p>
<p>These four aspects are:</p>
<h3><strong>Elastic</strong></h3>
<p>CDS resources/workers are <strong>launched on demand</strong>, to guarantee low waiting times for users, with no over-consumption of idle resources.</p>
<h3><strong>Extensible</strong></h3>
<p>In CDS, any kind of action (Kubernetes and OpenStack deployments, pushing to Kafka, testing for CVEs…) can be captured in <strong>high-level plugins</strong>, to be used as <strong>building blocks</strong> by users. These plugins are straightforward to write and use, so it&#8217;s easy to meet the most exotic needs in an effective and stress-free way.</p>
<h3><strong>Flexible, but easy</strong></h3>
<p>CDS can run <strong>complex workflows</strong>, with all sorts of intermediary steps, including build, test, deploy 1/10/100, manual or automatic gates, rollback, conditional branches… These workflows can be <strong>stored as code</strong> in the git repository. CDS provides basic <strong>workflow templates</strong> for the Core team&#8217;s most common scenarios, in order to ease the adoption process. This way, building a functional CI/CD chain from nothing can be quick and easy.</p>
<h3><strong>Self-service</strong></h3>
<p>Finally, a key aspect is the idea of<strong> self-service</strong>. Once a CDS project is created by users, they are completely autonomous within that space, with the freedom to manage pipelines, delegate access rights etc. All users are free to customise their space as they see fit, and build on what is provided out-of-the-box. Personalising workflow templates, plugins, running build and tests on custom VM flavors or custom hardware… all this can be done without any intervention from the CDS administrators.</p>
<h3><strong>CI/CD in 2018 &#8211; Five million workers!</strong></h3>
<ul>
<li>About 5.7M workers started and deleted on demand.</li>
<li>3.7M containers</li>
<li>2M Virtual Machines</li>
</ul>
<h3>How is it possible?</h3>
<p>One of the initial CDS objectives at OVH was to build and deploy 150 applications as a container in less than seven minutes. This has been a reality since 2015. So what&#8217;s the secret? Auto-Scale on Demand!</p>
<p>With this approach, you can have hundreds of worker models that CDS will launch via hatcheries whenever necessary.</p>
<p><figure id="attachment_14542" aria-describedby="caption-attachment-14542" style="width: 512px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-14542" src="/blog/wp-content/uploads/2019/02/DA5984F5-6B7D-48B4-840E-6D7F3F590A35-300x76.png" alt="CDS Hatchery" width="512" height="130" srcset="https://blog.ovhcloud.com/wp-content/uploads/2019/02/DA5984F5-6B7D-48B4-840E-6D7F3F590A35-300x76.png 300w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/DA5984F5-6B7D-48B4-840E-6D7F3F590A35-768x194.png 768w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/DA5984F5-6B7D-48B4-840E-6D7F3F590A35.png 885w" sizes="auto, (max-width: 512px) 100vw, 512px" /><figcaption id="caption-attachment-14542" class="wp-caption-text">CDS Hatchery</figcaption></figure></p>
<p>&nbsp;</p>
<p>A hatchery is like an incubator: it gives birth to the CDS workers and maintains the power of life and death over them.</p>
<p><figure id="attachment_14546" aria-describedby="caption-attachment-14546" style="width: 512px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-14546" src="/blog/wp-content/uploads/2019/02/IMG_0052-300x206.png" alt="CDS Hatcheries - Worker @Scale" width="512" height="352" srcset="https://blog.ovhcloud.com/wp-content/uploads/2019/02/IMG_0052-300x206.png 300w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/IMG_0052-768x528.png 768w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/IMG_0052.png 885w" sizes="auto, (max-width: 512px) 100vw, 512px" /><figcaption id="caption-attachment-14546" class="wp-caption-text">CDS Hatcheries &#8211; Worker @Scale</figcaption></figure></p>
<p>&nbsp;</p>
<p>Each hatchery is dedicated to an orchestrator. Furthermore, one CDS Instance can create workers over many cloud platforms:<br />
&#8211; The <strong>Kubernetes</strong> hatchery starts workers in pods<br />
&#8211; The <strong>OpenStack</strong> hatchery starts virtual machines<br />
&#8211; The <strong>Swarm</strong> hatchery starts docker containers<br />
&#8211; The <strong>Marathon</strong> hatchery starts docker containers<br />
&#8211; The <strong>VSphere</strong> hatchery start virtual machines<br />
&#8211; The <strong>local</strong> hatchery starts process on a host</p>
<p><figure id="attachment_14548" aria-describedby="caption-attachment-14548" style="width: 512px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-14548" src="/blog/wp-content/uploads/2019/02/IMG_0053-300x87.png" alt="CDS Hatcheries" width="512" height="148" srcset="https://blog.ovhcloud.com/wp-content/uploads/2019/02/IMG_0053-300x87.png 300w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/IMG_0053-768x222.png 768w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/IMG_0053.png 885w" sizes="auto, (max-width: 512px) 100vw, 512px" /><figcaption id="caption-attachment-14548" class="wp-caption-text">CDS Hatcheries</figcaption></figure></p>
<h3>What&#8217;s next?</h3>
<p>This is all just a <strong>preview of CDS</strong>&#8230; we have lots more to tell you about! The CI/CD tool offers a wide range of features that we will explore in depth in our <strong>upcoming articles</strong>. We promise, before 2019 is done, you will not look at your CI/CD tool the same way again&#8230;<img loading="lazy" decoding="async" src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fhow-does-ovh-manage-the-ci-cd-at-scale%2F&amp;action_name=How%20does%20OVH%20manage%20the%20CI%2FCD%20at%20scale%3F&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" /></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Understanding CI/CD for Big Data and Machine Learning</title>
		<link>https://blog.ovhcloud.com/understanding-ci-cd-for-big-data-and-machine-learning/</link>
		
		<dc:creator><![CDATA[Yvonnick Esnault]]></dc:creator>
		<pubDate>Thu, 14 Feb 2019 12:28:36 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Big Data]]></category>
		<category><![CDATA[CDS]]></category>
		<category><![CDATA[DataBuzzWord]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[Machine learning]]></category>
		<category><![CDATA[OpenStack]]></category>
		<category><![CDATA[Podcast]]></category>
		<guid isPermaLink="false">https://blog.ovh.com/fr/blog/?p=14588</guid>

					<description><![CDATA[This week, the OVH Integration and Continuous Deployment team was invited to the&#160;DataBuzzWord&#160;podcast. Together, we explored the topic of continuous deployment in the context of machine learning and big data.&#160;We also discussed continuous deployment for environments like&#160;Kubernetes, Docker, OpenStack and&#160;VMware VSphere. If you missed it, or would like to review everything that was discussed, you [&#8230;]<img src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Funderstanding-ci-cd-for-big-data-and-machine-learning%2F&amp;action_name=Understanding%20CI%2FCD%20for%20Big%20Data%20and%20Machine%20Learning&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[
<p>This week, the OVH Integration and Continuous Deployment team was invited to the&nbsp;<a href="https://www.spreaker.com/show/2072727" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">DataBuzzWord</a>&nbsp;podcast.</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="297" height="300" src="/blog/wp-content/uploads/2019/02/CE25CF9F-9489-4B9D-B123-FE4FD613EF85-297x300.png" alt="CDS" class="wp-image-14512" srcset="https://blog.ovhcloud.com/wp-content/uploads/2019/02/CE25CF9F-9489-4B9D-B123-FE4FD613EF85-297x300.png 297w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/CE25CF9F-9489-4B9D-B123-FE4FD613EF85-768x775.png 768w, https://blog.ovhcloud.com/wp-content/uploads/2019/02/CE25CF9F-9489-4B9D-B123-FE4FD613EF85.png 793w" sizes="auto, (max-width: 297px) 100vw, 297px" /></figure></div>



<p>Together, we explored the topic of continuous deployment in the context of machine learning and big data.&nbsp;We also discussed continuous deployment for environments like&nbsp;<a href="https://www.ovh.com/fr/blog/?s=kubernetes" data-wpel-link="exclude">Kubernetes</a>, Docker, OpenStack and&nbsp;<a href="https://www.ovh.com/fr/blog/?s=vmware" data-wpel-link="exclude">VMware VSphere</a>.</p>



<p>If you missed it, or would like to review everything that was discussed, you can&nbsp;<a href="https://www.spreaker.com/show/2072727" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">listen to it again here</a>. We hope to return soon, to continue sharing our passion for testing, integration and continuous deployment.</p>



<p>Although the podcast was recorded in French, starting from tomorrow, we&#8217;ll be delving further into the key points of our discussion in a series of articles on this blog.</p>


<div class="lazyblock-youtube-gdpr-compliant-ZRXyrv wp-block-lazyblock-youtube-gdpr-compliant"><script type="module">
  import 'https://blog.ovhcloud.com/wp-content/assets/ovhcloud-gdrp-compliant-embedding-widgets/src/ovhcloud-gdrp-compliant-spreaker.js';
</script>
      
      <ovhcloud-gdrp-compliant-spreaker
          spreaker="17021384"
          debug></ovhcloud-gdrp-compliant-spreaker> 

</div>


<p>Find CDS on GitHub:</p>



<ul class="wp-block-list"><li><a href="https://github.com/ovh/cds" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">https://github.com/ovh/cds</a></li></ul>



<p>&#8230;. and follow us on Twitter:</p>



<ul class="wp-block-list"><li><a href="https://twitter.com/yesnault" rel="nofollow external noopener noreferrer" data-wpel-link="external" target="_blank">https://twitter.com/yesnault</a></li><li><a href="https://twitter.com/francoissamin" rel="nofollow external noopener noreferrer" data-wpel-link="external" target="_blank">https://twitter.com/francoissamin</a></li></ul>



<p>Come chat about these subjects with us on our Gitter channel:&nbsp;<a href="https://gitter.im/ovh-cds/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">https://gitter.im/ovh-cds/</a></p>
<img loading="lazy" decoding="async" src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Funderstanding-ci-cd-for-big-data-and-machine-learning%2F&amp;action_name=Understanding%20CI%2FCD%20for%20Big%20Data%20and%20Machine%20Learning&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
