1838 lines
120 KiB
HTML
1838 lines
120 KiB
HTML
<!DOCTYPE html><html dir="ltr" lang="en" class="initial"> <head><meta charset="utf-8"><title>Safe Schema Updates - Near-zero Downtime Database Deployments | Octopus blog</title><meta name="robots" content="max-image-preview:large, index, follow"><meta name="keywords"><meta name="description" content="This post discusses how we can only deploy often if we can do it without disruption."><link rel="preconnect" href="https://octopus.com" crossorigin><link rel="preload" as="image" href="/blog/i/x/cover/near-zero-downtime-database-deployments.png" imagesrcset="/blog/i/600/cover/near-zero-downtime-database-deployments.webp 600w, /blog/i/1000/cover/near-zero-downtime-database-deployments.webp 750w" imagesizes="(min-width: 1680px) 1000px, (min-width: 940px) calc(71.81vw - 192px), calc(100vw - 32px)" fetchpriority="high"><link rel="stylesheet" href="https://octopus.com/octopus-public/assets/pu-vars.css"><link rel="stylesheet" href="https://octopus.com/octopus-public/assets/navbar-pu-styles.css"><link rel="stylesheet" href="https://octopus.com/octopus-public/assets/footer-pu-styles.css" media="print" onload="this.media='all';this.onload=null"><link rel="stylesheet" href="https://octopus.com/octopus-public/assets/marketo-pu-styles.css" media="print" onload="this.media='all';this.onload=null"><noscript><link rel="stylesheet" href="https://octopus.com/octopus-public/assets/footer-pu-styles.css"><link rel="stylesheet" href="https://octopus.com/octopus-public/assets/marketo-pu-styles.css"></noscript><link rel="stylesheet" href="/blog/css/vars.css"><link rel="stylesheet" href="/blog/css/main.css"><meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#311e3e"><link rel="canonical" href="https://octopus.com/blog/safe-schema-updates-7-near-zero-downtime-deployments"><link rel="alternate" type="application/atom+xml" title="Octopus blog" href="/blog/feed.xml"><link rel="alternate" href="/blog/sitemap.xml" type="application/rss+xml"><link rel="shortcut icon" href="/blog/icons/favicon.ico" type="image/x-icon"><link rel="apple-touch-icon" href="/blog/icons/apple-touch-icon.png"><meta property="og:type" content="website"><meta property="og:url" content="https://octopus.com/blog/safe-schema-updates-7-near-zero-downtime-deployments"><meta property="og:title" content="Safe schema updates - Near-zero downtime database deployments"><meta property="og:description" content="This post discusses how we can only deploy often if we can do it without disruption."><meta property="og:image" content="https://octopus.com/blog/img/cover/near-zero-downtime-database-deployments.png"><meta property="og:image:alt" content="Man sitting with open laptop, in front of cityscape in the background and 24hr icon. Below are icons of 2 people deploying to a web server."><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Safe schema updates - Near-zero downtime database deployments"><meta name="twitter:description" content="This post discusses how we can only deploy often if we can do it without disruption."><meta name="twitter:image" content="https://octopus.com/blog/img/cover/near-zero-downtime-database-deployments.png"><meta name="twitter:image:alt" content="Man sitting with open laptop, in front of cityscape in the background and 24hr icon. Below are icons of 2 people deploying to a web server."><meta name="view-transition" content="same-origin"><!-- Icons are decorative and used on ~10% of pages - load off the critical path -->
|
||
<link href="/blog/css/fa/css/fontawesome.css" rel="stylesheet" media="print" onload="this.media='all';this.onload=null">
|
||
<link href="/blog/css/fa/css/brands.css" rel="stylesheet" media="print" onload="this.media='all';this.onload=null">
|
||
<link href="/blog/css/fa/css/solid.css" rel="stylesheet" media="print" onload="this.media='all';this.onload=null">
|
||
<noscript>
|
||
<link href="/blog/css/fa/css/fontawesome.css" rel="stylesheet">
|
||
<link href="/blog/css/fa/css/brands.css" rel="stylesheet">
|
||
<link href="/blog/css/fa/css/solid.css" rel="stylesheet">
|
||
</noscript>
|
||
<meta name="google-site-verification" content="nIbWsTU_ELqMnLNxIexH_s6ch3m-s_MaFnl5u8WoaRM" />
|
||
|
||
<!-- Inline Script to set the initial theme -->
|
||
<script>
|
||
(() => {
|
||
const theme = localStorage.getItem('theme') || (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light');
|
||
document.documentElement.setAttribute('data-theme', theme);
|
||
})();
|
||
</script>
|
||
|
||
<script defer>
|
||
const whenActivated = new Promise((resolve) => {
|
||
if (document.prerendering) {
|
||
document.addEventListener('prerenderingchange', resolve);
|
||
} else {
|
||
resolve();
|
||
}
|
||
});
|
||
|
||
async function add_gtm(w,d,s,l,i) {
|
||
// Only add analytics if the page is not "pre-rendering"
|
||
await whenActivated;
|
||
|
||
w[l] = w[l]||[];w[l].push({'gtm.start': new Date().getTime(), event:'gtm.js'});
|
||
var f = d.getElementsByTagName(s)[0],
|
||
j = d.createElement(s),
|
||
dl = l != 'dataLayer'
|
||
? '&l=' + l
|
||
: '';
|
||
j.defer=true;
|
||
j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;
|
||
f.parentNode.insertBefore(j, f);
|
||
}
|
||
|
||
if (document.location.hostname === 'octopus.com'
|
||
|| document.location.hostname === 'www.octopus.com') {
|
||
// Only add analytics to production site
|
||
add_gtm(window, document, 'script', 'dataLayer', 'GTM-MQ943TFN');
|
||
}
|
||
</script><script type="application/ld+json">{
|
||
"@context": "https://schema.org",
|
||
"@type": "NewsArticle",
|
||
"headline": "Safe schema updates - Near-zero downtime database deployments",
|
||
"description": "This post discusses how we can only deploy often if we can do it without disruption.",
|
||
"author": {
|
||
"@type": "Person",
|
||
"name": "Alex Yates"
|
||
},
|
||
"datePublished": "2021-11-15T00:00:00.000Z",
|
||
"dateModified": "2021-11-15T00:00:00.000Z",
|
||
"publisher": {
|
||
"@type": "Organization",
|
||
"name": "Octopus Deploy",
|
||
"logo": {
|
||
"@type": "ImageObject",
|
||
"url": "/blog/img/octopus-glyph.png",
|
||
"width": 32,
|
||
"height": 32
|
||
}
|
||
},
|
||
"mainEntityOfPage": {
|
||
"@type": "WebPage",
|
||
"@id": "https://octopus.com/blog/safe-schema-updates-7-near-zero-downtime-deployments"
|
||
},
|
||
"image": {
|
||
"@type": "ImageObject",
|
||
"url": "https://octopus.com/blog/img/cover/near-zero-downtime-database-deployments.png",
|
||
"width": 1200,
|
||
"height": 800
|
||
},
|
||
"articleSection": "DevOps, Database Deployments, Deployment Patterns"
|
||
}</script><script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://octopus.com/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https://octopus.com/blog"},{"@type":"ListItem","position":3,"name":"Safe schema updates - Near-zero downtime database deployments","item":"https://octopus.com/blog/safe-schema-updates-7-near-zero-downtime-deployments"}]}</script></head> <body data-theme="dark"> <nav class="skip-links" aria-label="Skip Links" id="site-top"> <a href="#site-nav">Skip to navigation</a> <a href="#site-main">Skip to main content</a> <a href="#site-footer">Skip to footer</a> </nav> <div data-shared-source="live" data-shared-fragment="navbar" data-shared-note="fetched https://octopus.com/fragments/navbar at 2026-09-11T10:55:57.546Z">
|
||
|
||
|
||
<nav class="navbar navbar-pu site-header" aria-label="Main" data-navbar-pu itemscope itemtype="https://schema.org/SiteNavigationElement">
|
||
<div class="nav-container">
|
||
<div class="navbar-content">
|
||
<a class="navbar__logo" href="https://octopus.com/" aria-label="Octopus Deploy homepage" data-navbar-logo itemprop="url">
|
||
<svg id="glyph-icon" class="icon icon--octopus" xmlns="http://www.w3.org/2000/svg" width="144.4" height="154.6" version="1.1" viewBox="0 0 144.4 154.6">
|
||
<!-- Generator: Adobe Illustrator 29.3.1, SVG Export Plug-In . SVG Version: 2.1.0 Build 151) -->
|
||
<defs>
|
||
<style>
|
||
.logo-color {
|
||
fill: #0d80d8;
|
||
}
|
||
</style>
|
||
</defs>
|
||
<path id="glyph-icon1" data-name="glyph-icon" class="logo-color" d="M9.5,117.2c11.5-7.6,24.9-20.4,20-35.4-2.8-8.3-6.6-15.2-7.3-24.2-.5-7.6.7-15.2,3.3-22.1C35.8,7.4,66.6-5.9,94.4,2.4c25.6,7.8,43.2,38,32.7,64.1-6.1,15.2-8.9,27.1,4.7,38.7,3.8,3.1,12.7,8.1,12.7,13.8s-14.6-1.7-16-2.8c1.9,3.3,20,22.3,8.5,23.8-10.6,1.2-20-13.8-26.3-20.2-10.8-10.9-8.9,13.1-8.9,18.1,0,7.8-5.6,23.8-15.3,13.3-8-8.6-4.9-22.1-10.6-31.6-6.1-10.5-16.5,10.5-19,14.3-2.8,4.3-17.2,24.7-22.8,13.8-4.7-8.8,2.8-22.8,6.3-30.9-1.4,2.8-10.8,7.1-13.4,8.6-5.9,3.3-12.7,5-19.5,4.5-14.8-1-3.8-8.8,2.1-12.6Z"/>
|
||
</svg>
|
||
<svg id="wordmark-octopus-deploy" class="icon icon--octopus-deploy-wordmark" xmlns="http://www.w3.org/2000/svg" width="751.5" height="98.9" version="1.1" viewBox="0 0 751.5 98.9">
|
||
<!-- Generator: Adobe Illustrator 29.3.1, SVG Export Plug-In . SVG Version: 2.1.0 Build 151) -->
|
||
<defs>
|
||
<style>
|
||
.logo-wordmark-color {
|
||
fill: #0a151e;
|
||
}
|
||
</style>
|
||
</defs>
|
||
<path id="wordmark-octopus-deploy1" data-name="wordmark-octopus-deploy" class="logo-wordmark-color" d="M70.2,39.2c0,8.2-1.5,15.3-4.6,21.2-3.1,5.8-7.2,10.3-12.5,13.4-5.3,3.1-11.3,4.7-17.9,4.7s-12.7-1.6-18-4.7c-5.3-3.1-9.4-7.6-12.5-13.5C1.5,54.5,0,47.5,0,39.2s1.5-15.3,4.6-21.1c3.1-5.9,7.3-10.4,12.5-13.5C22.4,1.6,28.4,0,35.1,0s12.7,1.6,17.9,4.7c5.3,3.1,9.5,7.6,12.5,13.5,3.1,5.8,4.6,12.9,4.6,21.1ZM56.3,39.2c0-5.8-.9-10.7-2.7-14.7-1.8-4-4.3-7-7.5-9.1-3.2-2.1-6.9-3.1-11-3.1s-7.8,1-11,3.1c-3.2,2-5.7,5.1-7.5,9.1-1.8,4-2.7,8.9-2.7,14.7s.9,10.7,2.7,14.7c1.8,4,4.3,7,7.5,9.1,3.2,2,6.9,3.1,11,3.1s7.8-1,11-3.1c3.2-2.1,5.7-5.1,7.5-9.1,1.8-4,2.7-8.9,2.7-14.7ZM103.6,78.6c-5.7,0-10.6-1.3-14.7-3.8-4.1-2.5-7.2-6-9.4-10.4-2.2-4.5-3.3-9.6-3.3-15.4s1.1-11,3.4-15.4c2.2-4.5,5.4-8,9.5-10.4,4.1-2.5,9-3.8,14.5-3.8s8.8.9,12.3,2.6c3.6,1.7,6.5,4.1,8.6,7.2,2.1,3.1,3.4,6.7,3.7,10.8h-12.9c-.5-2.8-1.8-5.1-3.7-6.9-1.9-1.9-4.5-2.8-7.8-2.8s-5.2.7-7.3,2.2c-2.1,1.5-3.7,3.6-4.9,6.3-1.1,2.8-1.7,6.1-1.7,9.9s.6,7.3,1.7,10.1c1.1,2.8,2.7,4.9,4.8,6.5,2.1,1.5,4.5,2.2,7.4,2.2s3.8-.4,5.3-1.1c1.6-.8,2.9-1.9,4-3.3,1.1-1.4,1.8-3.2,2.2-5.3h12.9c-.3,4.1-1.5,7.6-3.6,10.8-2.1,3.1-4.9,5.5-8.4,7.3-3.6,1.7-7.7,2.6-12.5,2.6ZM163.8,20.1v10.4h-32.9v-10.4h32.9ZM139,6.4h13.5v53.8c0,1.8.3,3.2.8,4.2.6.9,1.3,1.6,2.2,1.9.9.3,1.9.5,3.1.5s1.6,0,2.3-.2c.7-.1,1.3-.2,1.6-.3l2.3,10.6c-.7.2-1.8.5-3.1.8-1.3.3-2.9.5-4.8.5-3.4.1-6.4-.4-9.1-1.5-2.7-1.1-4.9-2.9-6.5-5.3-1.6-2.4-2.3-5.4-2.3-9V6.4ZM195.4,78.6c-5.6,0-10.4-1.2-14.5-3.7-4.1-2.5-7.3-5.9-9.6-10.3-2.2-4.4-3.4-9.6-3.4-15.5s1.1-11.1,3.4-15.6c2.3-4.5,5.4-7.9,9.6-10.4,4.1-2.5,9-3.7,14.5-3.7s10.4,1.2,14.6,3.7c4.1,2.5,7.3,5.9,9.5,10.4,2.3,4.5,3.4,9.6,3.4,15.6s-1.1,11.1-3.4,15.5c-2.2,4.4-5.4,7.9-9.5,10.3-4.1,2.5-9,3.7-14.6,3.7ZM195.5,67.7c3,0,5.6-.8,7.6-2.5,2-1.7,3.6-4,4.6-6.8,1-2.8,1.5-6,1.5-9.5s-.5-6.7-1.5-9.5c-1-2.9-2.5-5.1-4.6-6.8-2-1.7-4.6-2.5-7.6-2.5s-5.7.8-7.8,2.5c-2,1.7-3.6,4-4.6,6.8-1,2.8-1.5,6-1.5,9.5s.5,6.6,1.5,9.5c1,2.8,2.5,5.1,4.6,6.8,2.1,1.7,4.7,2.5,7.8,2.5ZM230.3,98.9V20.1h13.3v9.5h.8c.7-1.4,1.7-2.9,2.9-4.4,1.3-1.6,3-2.9,5.1-4.1,2.2-1.1,4.9-1.7,8.3-1.7s8.4,1.1,12,3.4c3.6,2.2,6.4,5.6,8.5,10,2.1,4.4,3.2,9.7,3.2,16.1s-1,11.6-3.1,16c-2.1,4.4-4.9,7.8-8.4,10.1-3.6,2.3-7.6,3.5-12.1,3.5s-6-.5-8.2-1.6c-2.2-1.1-3.9-2.4-5.2-4-1.3-1.6-2.3-3-3-4.4h-.6v30.5h-13.5ZM243.5,48.8c0,3.7.5,7,1.6,9.7,1.1,2.8,2.6,5,4.6,6.5,2,1.5,4.5,2.3,7.3,2.3s5.5-.8,7.5-2.4c2-1.6,3.5-3.8,4.6-6.6,1-2.8,1.6-6,1.6-9.6s-.5-6.7-1.5-9.5c-1-2.8-2.5-4.9-4.6-6.5-2-1.6-4.5-2.4-7.5-2.4s-5.3.8-7.3,2.3c-2,1.5-3.5,3.6-4.6,6.4-1,2.7-1.5,6-1.5,9.7ZM328.4,53.3V20.1h13.5v57.3h-13.1v-10.2h-.6c-1.3,3.2-3.4,5.8-6.4,7.9-2.9,2-6.6,3.1-10.9,3.1s-7.1-.8-10-2.5c-2.9-1.7-5.1-4.1-6.7-7.3-1.6-3.2-2.4-7.1-2.4-11.7V20.1h13.5v34.4c0,3.6,1,6.5,3,8.7,2,2.1,4.6,3.2,7.8,3.2s3.9-.5,5.8-1.5c1.9-1,3.4-2.4,4.6-4.3,1.2-1.9,1.8-4.4,1.8-7.3ZM397,35.3l-12.3,1.3c-.3-1.2-1-2.4-1.8-3.5-.8-1.1-2-2-3.4-2.6-1.4-.7-3.2-1-5.3-1s-5.2.6-7.1,1.8c-1.9,1.2-2.8,2.8-2.8,4.7,0,1.7.6,3,1.8,4.1,1.3,1,3.4,1.9,6.3,2.6l9.8,2.1c5.4,1.2,9.5,3,12.1,5.6,2.7,2.5,4,5.9,4,10,0,3.6-1.1,6.8-3.2,9.6-2.1,2.7-4.9,4.9-8.6,6.4-3.7,1.5-7.9,2.3-12.7,2.3-7,0-12.7-1.5-16.9-4.4-4.3-3-6.8-7.1-7.6-12.3l13.2-1.3c.6,2.6,1.9,4.5,3.8,5.9,1.9,1.3,4.5,2,7.6,2s5.8-.7,7.7-2c2-1.3,2.9-2.9,2.9-4.9s-.6-3-1.9-4.1c-1.2-1.1-3.2-1.9-5.8-2.5l-9.8-2.1c-5.5-1.1-9.6-3.1-12.2-5.8-2.6-2.7-3.9-6.2-3.9-10.4,0-3.5.9-6.6,2.9-9.2,2-2.6,4.7-4.6,8.2-6,3.5-1.4,7.5-2.2,12.1-2.2,6.7,0,12,1.4,15.9,4.3,3.9,2.9,6.3,6.7,7.2,11.6ZM453.8,77.4h-25.9V1h26.4c7.6,0,14.1,1.5,19.5,4.6,5.5,3,9.7,7.4,12.6,13.1,2.9,5.7,4.4,12.5,4.4,20.4s-1.5,14.8-4.4,20.5c-2.9,5.7-7.2,10.1-12.7,13.2-5.5,3.1-12.2,4.6-19.9,4.6ZM441.7,65.5h11.4c5.3,0,9.8-1,13.3-2.9,3.6-2,6.2-4.9,8-8.8,1.8-3.9,2.7-8.8,2.7-14.6s-.9-10.7-2.7-14.5c-1.8-3.9-4.4-6.8-7.9-8.7-3.5-1.9-7.8-2.9-13-2.9h-11.8v52.5ZM524.7,78.6c-5.7,0-10.7-1.2-14.9-3.6-4.2-2.4-7.3-5.8-9.6-10.2-2.2-4.4-3.4-9.6-3.4-15.6s1.1-11.1,3.4-15.5c2.3-4.5,5.4-8,9.5-10.4,4.1-2.5,8.8-3.8,14.3-3.8s6.9.6,10,1.7c3.2,1.1,5.9,2.9,8.4,5.2,2.4,2.4,4.4,5.4,5.7,9,1.4,3.6,2.1,8,2.1,13v4.1h-47v-9.1h34c0-2.6-.6-4.9-1.7-6.9-1.1-2-2.6-3.6-4.6-4.8-1.9-1.2-4.2-1.8-6.8-1.8s-5.2.7-7.3,2c-2.1,1.3-3.7,3.1-4.9,5.2-1.1,2.1-1.7,4.5-1.8,7.1v7.9c0,3.3.6,6.2,1.8,8.6,1.2,2.4,2.9,4.2,5.1,5.4,2.2,1.2,4.8,1.9,7.7,1.9s3.7-.3,5.3-.8c1.6-.6,3-1.4,4.1-2.5,1.2-1.1,2.1-2.4,2.6-4.1l12.6,1.4c-.8,3.3-2.3,6.2-4.6,8.7-2.2,2.5-5,4.4-8.5,5.7-3.5,1.3-7.4,2-11.9,2ZM557.5,98.9V20.1h13.3v9.5h.8c.7-1.4,1.7-2.9,2.9-4.4,1.3-1.6,3-2.9,5.1-4.1,2.2-1.1,4.9-1.7,8.3-1.7s8.4,1.1,12,3.4c3.6,2.2,6.4,5.6,8.5,10,2.1,4.4,3.2,9.7,3.2,16.1s-1,11.6-3.1,16c-2.1,4.4-4.9,7.8-8.4,10.1-3.6,2.3-7.6,3.5-12.1,3.5s-6-.5-8.2-1.6c-2.2-1.1-3.9-2.4-5.2-4-1.3-1.6-2.3-3-3-4.4h-.6v30.5h-13.5ZM570.8,48.8c0,3.7.5,7,1.6,9.7,1.1,2.8,2.6,5,4.6,6.5,2,1.5,4.5,2.3,7.3,2.3s5.5-.8,7.5-2.4c2-1.6,3.5-3.8,4.6-6.6,1-2.8,1.6-6,1.6-9.6s-.5-6.7-1.5-9.5c-1-2.8-2.5-4.9-4.6-6.5-2-1.6-4.5-2.4-7.5-2.4s-5.3.8-7.3,2.3c-2,1.5-3.5,3.6-4.6,6.4-1,2.7-1.5,6-1.5,9.7ZM632.6,1v76.4h-13.5V1h13.5ZM667.4,78.6c-5.6,0-10.4-1.2-14.5-3.7-4.1-2.5-7.3-5.9-9.5-10.3-2.2-4.4-3.4-9.6-3.4-15.5s1.1-11.1,3.4-15.6c2.3-4.5,5.4-7.9,9.5-10.4s9-3.7,14.5-3.7,10.4,1.2,14.5,3.7c4.1,2.5,7.3,5.9,9.5,10.4,2.3,4.5,3.4,9.6,3.4,15.6s-1.1,11.1-3.4,15.5c-2.2,4.4-5.4,7.9-9.5,10.3-4.1,2.5-9,3.7-14.5,3.7ZM667.5,67.7c3,0,5.6-.8,7.6-2.5,2-1.7,3.6-4,4.6-6.8,1-2.8,1.5-6,1.5-9.5s-.5-6.7-1.5-9.5c-1-2.9-2.5-5.1-4.6-6.8-2-1.7-4.6-2.5-7.6-2.5s-5.7.8-7.8,2.5c-2,1.7-3.6,4-4.6,6.8-1,2.8-1.5,6-1.5,9.5s.5,6.6,1.5,9.5c1,2.8,2.5,5.1,4.6,6.8,2.1,1.7,4.7,2.5,7.8,2.5ZM708.7,98.9c-1.8,0-3.5-.1-5.1-.4-1.5-.3-2.8-.6-3.7-1l3.1-10.5c2,.6,3.7.8,5.3.8s2.9-.5,4.1-1.5c1.2-.9,2.2-2.5,3-4.6l1.2-3.1-20.8-58.5h14.3l13.2,43.3h.6l13.2-43.3h14.4l-22.9,64.2c-1.1,3-2.5,5.6-4.3,7.8-1.8,2.2-3.9,3.9-6.5,5-2.5,1.2-5.6,1.8-9.1,1.8Z"/>
|
||
</svg>
|
||
<span class="visually-hidden" itemprop="name">Octopus Deploy</span>
|
||
</a>
|
||
|
||
<div id="main-navbar" class="navbar__menu" data-navbar-menu>
|
||
<ul class="navbar__sections">
|
||
<li class="navbar__section">
|
||
<button type="button" class="navbar__button" aria-expanded="false" aria-controls="dropdown-solutions"
|
||
data-navbar-section-toggle data-target="dropdown-solutions"
|
||
aria-label="Solutions menu">
|
||
<span>Solutions</span>
|
||
<svg class="icon icon--chevron-navbar" width="13" height="8" viewBox="0 0 13 8" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||
<path d="M1.98755 1.5L6.98755 6.5L11.9875 1.5" stroke="#303E49" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||
</svg>
|
||
|
||
</button>
|
||
</li>
|
||
<li class="navbar__section">
|
||
<a class="navbar__button" href="https://octopus.com/pricing/overview" itemprop="url">
|
||
<span itemprop="name">Pricing</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__section">
|
||
<a class="navbar__button" href="https://octopus.com/docs" target="_blank" rel="noopener noreferrer" itemprop="url">
|
||
<span itemprop="name">Docs</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__section">
|
||
<button type="button" class="navbar__button" aria-expanded="false" aria-controls="dropdown-resources"
|
||
data-navbar-section-toggle data-target="dropdown-resources"
|
||
aria-label="Resources menu">
|
||
<span>Resources</span>
|
||
<svg class="icon icon--chevron-navbar" width="13" height="8" viewBox="0 0 13 8" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||
<path d="M1.98755 1.5L6.98755 6.5L11.9875 1.5" stroke="#303E49" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||
</svg>
|
||
|
||
</button>
|
||
</li>
|
||
<li class="navbar__section">
|
||
<button type="button" class="navbar__button" aria-expanded="false" aria-controls="dropdown-company"
|
||
data-navbar-section-toggle data-target="dropdown-company"
|
||
aria-label="Company menu">
|
||
<span>Company</span>
|
||
<svg class="icon icon--chevron-navbar" width="13" height="8" viewBox="0 0 13 8" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||
<path d="M1.98755 1.5L6.98755 6.5L11.9875 1.5" stroke="#303E49" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||
</svg>
|
||
|
||
</button>
|
||
</li>
|
||
</ul>
|
||
|
||
<ul class="navbar__sections navbar__sections--secondary" data-navbar-secondary>
|
||
<li class="navbar__section" data-navbar-signin>
|
||
<a class="navbar__button" href="https://octopus.com/signin" rel="nofollow" itemprop="url">
|
||
<span itemprop="name">Sign in</span>
|
||
</a>
|
||
</li>
|
||
|
||
<li class="navbar__section navbar__section--contact">
|
||
<a class="navbar__button navbar__button--contact button button--secondary" href="https://octopus.com/company/contact" itemprop="url">
|
||
<span itemprop="name">Contact us</span>
|
||
</a>
|
||
</li>
|
||
|
||
<li class="navbar__section" data-navbar-signup>
|
||
<a class="navbar__button navbar__button--signup button button--primary" href="https://octopus.com/free-signup?location=nav-bar" rel="nofollow" itemprop="url">
|
||
<span itemprop="name">Start for free</span>
|
||
</a>
|
||
</li>
|
||
|
||
<li class="navbar__section navbar__section--user" data-navbar-profile hidden>
|
||
<div class="navbar__user-menu">
|
||
<button type="button" class="navbar__button navbar__user-toggle" data-navbar-profile-link
|
||
aria-expanded="false" aria-controls="dropdown-user" data-target="dropdown-user"
|
||
aria-label="User profile menu">
|
||
<span class="navbar__profile-image" data-navbar-profile-image>
|
||
<img src="data:image/gif;base64,R0lGODlhAQABAAAAACw=" alt="" loading="lazy" hidden />
|
||
</span>
|
||
<span class="personal" data-navbar-profile-name>User</span>
|
||
<svg class="icon icon--chevron-navbar" width="13" height="8" viewBox="0 0 13 8" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||
<path d="M1.98755 1.5L6.98755 6.5L11.9875 1.5" stroke="#303E49" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||
</svg>
|
||
|
||
</button>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<button class="navbar__toggler" type="button" aria-label="Open navigation menu" aria-controls="main-navbar" aria-expanded="false" data-navbar-toggler>
|
||
<span class="hamburger" aria-hidden="true">
|
||
<span class="hamburger__bar"></span>
|
||
<span class="hamburger__bar"></span>
|
||
<span class="hamburger__bar"></span>
|
||
</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="navbar__panels" data-navbar-panels>
|
||
<nav class="navbar__dropdown" id="dropdown-solutions" data-navbar-dropdown aria-label="Solutions">
|
||
<button type="button" class="navbar__back-btn" data-navbar-back aria-label="Back to menu">
|
||
<svg class="icon icon--chevron-navbar" width="13" height="8" viewBox="0 0 13 8" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||
<path d="M1.98755 1.5L6.98755 6.5L11.9875 1.5" stroke="#303E49" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||
</svg>
|
||
|
||
<span>Back</span>
|
||
</button>
|
||
|
||
|
||
|
||
<div class="navbar__subsection">
|
||
|
||
<ul class="navbar__subsection-items">
|
||
<li class="navbar__item">
|
||
<span class="navbar__item-sub-category">Octopus Deploy</span>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/use-case/kubernetes" itemprop="url">
|
||
<span class="navbar__item-icon" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/45x45/c234e77f86/icon-kubernetes.svg" alt="Kubernetes icon logo steer blue gradient" loading="lazy" width="45" height="45" />
|
||
</span>
|
||
|
||
</span>
|
||
<span class="navbar__item-label" itemprop="name">Kubernetes deployments</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/use-case/platform-hub" itemprop="url">
|
||
<span class="navbar__item-icon" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/45x45/cc44e17bdf/icon-platform-hub.svg" alt="Blue boxes stacked on top of each other" loading="lazy" width="45" height="45" />
|
||
</span>
|
||
|
||
</span>
|
||
<span class="navbar__item-label" itemprop="name">Platform Hub</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/use-case/environment-promotion" itemprop="url">
|
||
<span class="navbar__item-icon" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/45x45/e2c09018a3/icon-environment-promotion.svg" alt="icon environment promotion gear blue gradient" loading="lazy" width="45" height="45" />
|
||
</span>
|
||
|
||
</span>
|
||
<span class="navbar__item-label" itemprop="name">Environment promotion</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/ai-tools" itemprop="url">
|
||
<span class="navbar__item-icon" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/45x45/bd93d826d3/icon-ai.svg" alt="AI icon" loading="lazy" width="45" height="45" />
|
||
</span>
|
||
|
||
</span>
|
||
<span class="navbar__item-label" itemprop="name">AI tools</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/use-case/argo-cd-in-octopus" itemprop="url">
|
||
<span class="navbar__item-icon" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/45x45/d42ce2a726/icon-argo.svg" alt="Argo icon" loading="lazy" width="45" height="45" />
|
||
</span>
|
||
|
||
</span>
|
||
<span class="navbar__item-label" itemprop="name">Argo CD in Octopus</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/use-case/runbooks" itemprop="url">
|
||
<span class="navbar__item-icon" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/45x45/d9ab08e6a3/icon-runbooks.svg" alt="runbooks running book with a wrench on it blue gradient" loading="lazy" width="45" height="45" />
|
||
</span>
|
||
|
||
</span>
|
||
<span class="navbar__item-label" itemprop="name">Automate operations tasks</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/use-case/tenanted-deployments" itemprop="url">
|
||
<span class="navbar__item-icon" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/45x45/c89e19472b/icon-tenanted-deployments.svg" alt="icon tenanted deployments blue gradient three people" loading="lazy" width="45" height="45" />
|
||
</span>
|
||
|
||
</span>
|
||
<span class="navbar__item-label" itemprop="name">Tenanted deployments</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
<div class="navbar__subsection">
|
||
|
||
<ul class="navbar__subsection-items">
|
||
<li class="navbar__item">
|
||
<span class="navbar__item-sub-category">Explore</span>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/downloads" itemprop="url">
|
||
<span class="navbar__item-label" itemprop="name">Install Octopus self-hosted</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/downloads/compare" itemprop="url">
|
||
<span class="navbar__item-label" itemprop="name">Compare releases</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/integrations" itemprop="url">
|
||
<span class="navbar__item-label" itemprop="name">Integrations</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://roadmap.octopus.com/tabs/2-planned" itemprop="url">
|
||
<span class="navbar__item-label" itemprop="name">Octopus Roadmap</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/free" itemprop="url">
|
||
<span class="navbar__item-label" itemprop="name">Start for free</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<svg class="icon icon--marker-navbar" xmlns="http://www.w3.org/2000/svg" width="32" height="15" viewBox="0 0 32 15" fill="none">
|
||
<path d="M13.8787 1.12132L0 15H32L18.1213 1.12132C16.9497 -0.0502526 15.0503 -0.050255 13.8787 1.12132Z" fill="white"/>
|
||
</svg>
|
||
</nav>
|
||
<nav class="navbar__dropdown" id="dropdown-resources" data-navbar-dropdown aria-label="Resources">
|
||
<button type="button" class="navbar__back-btn" data-navbar-back aria-label="Back to menu">
|
||
<svg class="icon icon--chevron-navbar" width="13" height="8" viewBox="0 0 13 8" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||
<path d="M1.98755 1.5L6.98755 6.5L11.9875 1.5" stroke="#303E49" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||
</svg>
|
||
|
||
<span>Back</span>
|
||
</button>
|
||
|
||
|
||
|
||
<div class="navbar__subsection">
|
||
<p class="navbar__subsection-title" id="dropdown-resources-explore">Explore</p>
|
||
|
||
<ul class="navbar__subsection-items" aria-labelledby="dropdown-resources-explore">
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/company/customers" itemprop="url">
|
||
<span class="navbar__item-icon" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/45x45/00525c876d/icon-customer-stories.svg" alt="icon customer stories success example graduate" loading="lazy" width="45" height="45" />
|
||
</span>
|
||
|
||
</span>
|
||
<span class="navbar__item-label" itemprop="name">Customer stories</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/webinars" itemprop="url">
|
||
<span class="navbar__item-icon" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/45x45/a7c01192c7/icon-webinars.svg" alt="icon camera webinars videos capture" loading="lazy" width="45" height="45" />
|
||
</span>
|
||
|
||
</span>
|
||
<span class="navbar__item-label" itemprop="name">Webinars</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/publications" itemprop="url">
|
||
<span class="navbar__item-icon" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/45x45/1845d0555a/icon-nav-publications.svg" alt="Publications icon" loading="lazy" width="45" height="45" />
|
||
</span>
|
||
|
||
</span>
|
||
<span class="navbar__item-label" itemprop="name">Publications</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/downloads" itemprop="url">
|
||
<span class="navbar__item-icon" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/45x45/0008b1a75e/nav-icon-downloads.svg" alt="Downloads icon" loading="lazy" width="45" height="45" />
|
||
</span>
|
||
|
||
</span>
|
||
<span class="navbar__item-label" itemprop="name">Downloads</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
<div class="navbar__subsection">
|
||
<p class="navbar__subsection-title" id="dropdown-resources-support-and-services">Support and services</p>
|
||
|
||
<ul class="navbar__subsection-items" aria-labelledby="dropdown-resources-support-and-services">
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/docs" itemprop="url">
|
||
<span class="navbar__item-icon" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/45x45/0724935a2e/icon-devops-handbook.svg" alt="icon book devops DevOps handbook ci cd cycle" loading="lazy" width="45" height="45" />
|
||
</span>
|
||
|
||
</span>
|
||
<span class="navbar__item-label" itemprop="name">Documentation</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/support" itemprop="url">
|
||
<span class="navbar__item-icon" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/45x45/ecb140a3aa/icon-partners.svg" alt="icon support partners handshake trust" loading="lazy" width="45" height="45" />
|
||
</span>
|
||
|
||
</span>
|
||
<span class="navbar__item-label" itemprop="name">Customer support</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://learning.octopus.com/" target="_blank" rel="noopener noreferrer" itemprop="url">
|
||
<span class="navbar__item-icon" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/45x45/7802cd7dd7/icon-certificates-1.svg" alt="Certification icon" loading="lazy" width="45" height="45" />
|
||
</span>
|
||
|
||
</span>
|
||
<span class="navbar__item-label" itemprop="name">Certification</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/company/trust" itemprop="url">
|
||
<span class="navbar__item-icon" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/45x45/d01a1b10a9/icon-trust-security.svg" alt="icon trust and security lock pad" loading="lazy" width="45" height="45" />
|
||
</span>
|
||
|
||
</span>
|
||
<span class="navbar__item-label" itemprop="name">Trust and security</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
<div class="navbar__subsection">
|
||
<p class="navbar__subsection-title" id="dropdown-resources-publications">Publications</p>
|
||
|
||
<ul class="navbar__subsection-items" aria-labelledby="dropdown-resources-publications">
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/publications/ai-pulse-report" itemprop="url">
|
||
<span class="navbar__item-label" itemprop="name">AI Pulse report</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/publications/compliance-through-continuous-delivery" itemprop="url">
|
||
<span class="navbar__item-label" itemprop="name">Compliance through CD</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/publications/platform-engineering-pulse" itemprop="url">
|
||
<span class="navbar__item-label" itemprop="name">Platform Engineering Pulse report</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/publications/state-of-gitops-report" itemprop="url">
|
||
<span class="navbar__item-label" itemprop="name">State of GitOps report</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/publications/argo-cd-best-practices" itemprop="url">
|
||
<span class="navbar__item-label" itemprop="name">Argo CD best practices</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/whitepapers/kubernetes-delivery-unlocked" itemprop="url">
|
||
<span class="navbar__item-label" itemprop="name">Kubernetes delivery unlocked</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/publications" itemprop="url">
|
||
<span class="navbar__item-label" itemprop="name">View all publications</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<svg class="icon icon--marker-navbar" xmlns="http://www.w3.org/2000/svg" width="32" height="15" viewBox="0 0 32 15" fill="none">
|
||
<path d="M13.8787 1.12132L0 15H32L18.1213 1.12132C16.9497 -0.0502526 15.0503 -0.050255 13.8787 1.12132Z" fill="white"/>
|
||
</svg>
|
||
</nav>
|
||
<nav class="navbar__dropdown" id="dropdown-company" data-navbar-dropdown aria-label="Company">
|
||
<button type="button" class="navbar__back-btn" data-navbar-back aria-label="Back to menu">
|
||
<svg class="icon icon--chevron-navbar" width="13" height="8" viewBox="0 0 13 8" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||
<path d="M1.98755 1.5L6.98755 6.5L11.9875 1.5" stroke="#303E49" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||
</svg>
|
||
|
||
<span>Back</span>
|
||
</button>
|
||
|
||
|
||
|
||
<div class="navbar__subsection">
|
||
<p class="navbar__subsection-title" id="dropdown-company-careers">Careers</p>
|
||
|
||
<ul class="navbar__subsection-items" aria-labelledby="dropdown-company-careers">
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/company/careers" itemprop="url">
|
||
<span class="navbar__item-icon" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/45x45/91b747265a/icon-careers-join-us.svg" alt="icon person plus career join us" loading="lazy" width="45" height="45" />
|
||
</span>
|
||
|
||
</span>
|
||
<span class="navbar__item-label" itemprop="name">Join us</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://handbook.octopus.com/" target="_blank" rel="noopener noreferrer" itemprop="url">
|
||
<span class="navbar__item-icon" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/45x45/94e4d7a548/icon-company-handbook.svg" alt="icon octopus handbook book" loading="lazy" width="45" height="45" />
|
||
</span>
|
||
|
||
</span>
|
||
<span class="navbar__item-label" itemprop="name">Company handbook</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
<div class="navbar__subsection">
|
||
<p class="navbar__subsection-title" id="dropdown-company-explore">Explore</p>
|
||
|
||
<ul class="navbar__subsection-items" aria-labelledby="dropdown-company-explore">
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/company" itemprop="url">
|
||
<span class="navbar__item-label" itemprop="name">About us</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/company/contact" itemprop="url">
|
||
<span class="navbar__item-label" itemprop="name">Contact us</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/news" itemprop="url">
|
||
<span class="navbar__item-label" itemprop="name">News and media</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/events" itemprop="url">
|
||
<span class="navbar__item-label" itemprop="name">Events</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/partners" itemprop="url">
|
||
<span class="navbar__item-label" itemprop="name">Our partners</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://shop.octopus.com/" target="_blank" rel="noopener noreferrer" itemprop="url">
|
||
<span class="navbar__item-label" itemprop="name">Swag</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<svg class="icon icon--marker-navbar" xmlns="http://www.w3.org/2000/svg" width="32" height="15" viewBox="0 0 32 15" fill="none">
|
||
<path d="M13.8787 1.12132L0 15H32L18.1213 1.12132C16.9497 -0.0502526 15.0503 -0.050255 13.8787 1.12132Z" fill="white"/>
|
||
</svg>
|
||
</nav>
|
||
|
||
|
||
<nav class="navbar__dropdown" id="dropdown-user" data-navbar-profile-dropdown aria-label="User profile">
|
||
<button type="button" class="navbar__back-btn" data-navbar-back aria-label="Back to menu">
|
||
<svg class="icon icon--chevron-navbar" width="13" height="8" viewBox="0 0 13 8" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||
<path d="M1.98755 1.5L6.98755 6.5L11.9875 1.5" stroke="#303E49" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||
</svg>
|
||
|
||
<span>Back</span>
|
||
</button>
|
||
<p class="navbar__panel-title" data-navbar-user-title>User</p>
|
||
<div class="navbar__subsection">
|
||
<ul class="navbar__subsection-items">
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://billing.octopus.com" itemprop="url">
|
||
<span class="navbar__item-icon" aria-hidden="true">
|
||
<span class="image-wrapper">
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="45" height="45"><rect width="45" height="45" rx="8.9" fill="#f4f6f8"/><path d="M29.4 20.7l-.3.5c-.1.2-.3.3-.5.2-.4-.2-.8-.4-1.2-.7-.2-.1-.2-.4-.1-.6l.3-.5-.6-1h-.6c-.2 0-.4-.2-.4-.4v-1.3c0-.2.2-.4.4-.4h.6c.1-.4.3-.7.6-1l-.3-.5c-.1-.2 0-.4.1-.6.3-.3.7-.5 1.2-.7.2 0 .4 0 .5.2l.3.5h1.1l.3-.5c.1-.2.3-.3.5-.2.4.2.8.4 1.2.7.2.1.2.4.1.6l-.3.5.6 1h.6c.2 0 .4.2.4.4v1.3c0 .2-.2.4-.4.4h-.6c-.1.4-.3.7-.6 1l.3.5c.1.2 0 .4-.1.6-.3.3-.7.5-1.2.7-.2 0-.4 0-.5-.2l-.3-.5h-1.1zm-.4-2.1c1.4 1 3-.5 1.9-1.9-1.4-1-3 .5-1.9 1.9zm-4.1 5.5l1.2.6c.4.2.5.6.4 1-.3.9-.9 1.6-1.5 2.3-.3.3-.7.4-1.1.2l-1-.6c-.6.5-1.2.9-2 1.1v1.2c0 .4-.3.8-.7.8-.9.1-1.8.2-2.7 0-.4 0-.7-.4-.7-.8v-1.2c-.7-.3-1.4-.6-2-1.1l-1 .6c-.4.2-.8.1-1.1-.2-.6-.7-1.2-1.5-1.5-2.3-.1-.4 0-.8.4-1l1.2-.6c-.1-.7-.1-1.5 0-2.2l-1.2-.6c-.4-.2-.5-.6-.4-1 .3-.9.9-1.6 1.5-2.3.3-.3.7-.4 1.1-.2l1 .6c.6-.5 1.2-.9 2-1.1v-1.2c0-.4.3-.8.7-.8.9-.1 1.8-.2 2.7 0 .4 0 .7.4.7.8v1.2c.7.3 1.4.6 2 1.1l1-.6c.4-.2.8-.1 1.1.2.6.7 1.2 1.5 1.5 2.3.1.4 0 .8-.4 1l-1.2.6c.1.7.1 1.5 0 2.2zm-4.2.7c2.1-2.7-1-5.8-3.8-3.7-2.1 2.7 1 5.8 3.8 3.7zm8.7 6.4l-.3.5c-.1.2-.3.3-.5.2-.4-.2-.8-.4-1.2-.7-.2-.1-.2-.4-.1-.6l.3-.5-.6-1h-.6c-.2 0-.4-.2-.4-.4v-1.3c0-.2.2-.4.4-.4h.6c.1-.4.3-.7.6-1l-.3-.5c-.1-.2 0-.4.1-.6.3-.3.7-.5 1.2-.7.2 0 .4 0 .5.2l.3.5h1.1l.3-.5c.1-.2.3-.3.5-.2.4.2.8.4 1.2.7.2.1.2.4.1.6l-.3.5.6 1h.6c.2 0 .4.2.4.4v1.3c0 .2-.2.4-.4.4h-.6c-.1.4-.3.7-.6 1l.3.5c.1.2 0 .4-.1.6-.3.3-.7.5-1.2.7-.2 0-.4 0-.5-.2l-.3-.5h-1.1zm-.4-2c1.4 1 3-.5 1.9-1.9-1.4-1-3 .5-1.9 1.9z" fill="#282f38"/></svg>
|
||
</span>
|
||
</span>
|
||
<span class="navbar__item-label" itemprop="name">Control Center</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/profile" itemprop="url">
|
||
<span class="navbar__item-icon" aria-hidden="true">
|
||
<span class="image-wrapper">
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="45" height="45"><rect width="45" height="45" rx="8.9" fill="#f4f6f8"/><path d="M22.5 9C15 9 9 15 9 22.5S15 36 22.5 36 36 30 36 22.5 30 9 22.5 9zm0 5.2c2.6 0 4.8 2.1 4.8 4.8s-2.1 4.8-4.8 4.8-4.8-2.1-4.8-4.8 2.1-4.8 4.8-4.8zm0 18.8c-3.2 0-6.1-1.4-8-3.7 1-1.9 3-3.3 5.4-3.3h.4c.7.2 1.4.4 2.2.4s1.5-.1 2.2-.4h.4c2.3 0 4.3 1.3 5.4 3.3-1.9 2.3-4.8 3.7-8 3.7z" fill="#282f38"/></svg>
|
||
</span>
|
||
</span>
|
||
<span class="navbar__item-label" itemprop="name">Profile</span>
|
||
</a>
|
||
</li>
|
||
<li class="navbar__item">
|
||
<a class="navbar__item-link" href="https://octopus.com/signout" data-navbar-signout itemprop="url">
|
||
<span class="navbar__item-icon" aria-hidden="true">
|
||
<span class="image-wrapper">
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="45" height="45"><rect width="45" height="45" rx="8.9" fill="#f4f6f8"/><path d="M33.5,23.1l-7.7,7.4c-.7.7-1.9.2-1.9-.8v-4.2h-6.2c-.6,0-1.1-.5-1.1-1.1v-4.2c0-.6.5-1.1,1.1-1.1h6.2v-4.2c0-.9,1.2-1.4,1.9-.8l7.7,7.4c.4.4.4,1.1,0,1.5ZM19.6,30.3v-1.8c0-.3-.2-.5-.5-.5h-3.8c-.8,0-1.5-.6-1.5-1.4v-8.5c0-.8.7-1.4,1.5-1.4h3.8c.3,0,.5-.2.5-.5v-1.8c0-.3-.2-.5-.5-.5h-3.8c-2.4,0-4.4,1.9-4.4,4.2v8.5c0,2.3,2,4.2,4.4,4.2h3.8c.3,0,.5-.2.5-.5Z" fill="#282f38"/></svg>
|
||
</span>
|
||
</span>
|
||
<span class="navbar__item-label" itemprop="name">Sign out</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<svg class="icon icon--marker-navbar" xmlns="http://www.w3.org/2000/svg" width="32" height="15" viewBox="0 0 32 15" fill="none">
|
||
<path d="M13.8787 1.12132L0 15H32L18.1213 1.12132C16.9497 -0.0502526 15.0503 -0.050255 13.8787 1.12132Z" fill="white"/>
|
||
</svg>
|
||
</nav>
|
||
</div>
|
||
</nav>
|
||
|
||
</div> <div class="content-group anim-show-parent"> <main id="site-main"> <nav class="site-breadcrumbs" aria-label="Breadcrumb"> <ol> <li> <a href="/blog" aria-current="false"> <span>Blog</span> </a> </li> <li> <a href="/blog/safe-schema-updates-7-near-zero-downtime-deployments" aria-current="page"> <span>Safe schema updates - Near-zero downtime database deployments</span> </a> </li> </ol> </nav> <article itemscope itemtype="https://schema.org/Article"> <header class="header__wrapper"> <figure class="image" data-image> <img src="/blog/i/x/cover/near-zero-downtime-database-deployments.png" srcset="/blog/i/600/cover/near-zero-downtime-database-deployments.webp 600w, /blog/i/1000/cover/near-zero-downtime-database-deployments.webp 750w" sizes="(min-width: 1680px) 1000px, (min-width: 940px) calc(71.81vw - 192px), calc(100vw - 32px)" alt="Man sitting with open laptop, in front of cityscape in the background and 24hr icon. Below are icons of 2 people deploying to a web server." class="image__img" width="750" height="400" loading="eager" fetchpriority="high" decoding="sync"> </figure> <div class="header"> <h1 class="header__title">Safe schema updates - Near-zero downtime database deployments</h1> </div> </header> <div class="page-content anim-show-parent" itemprop="articleBody"> <div class="author"> <a href="/blog/authors/alex-yates/1/" class="author__image-link"> <img class="author__image" srcset="/blog/i/600/authors/alex-yates.webp 600w, /blog/i/1000/authors/alex-yates.webp 646w" sizes="170px" src="/blog/i/x/authors/alex-yates.png" alt="Alex Yates" width="646" height="647"> </a> <div class="author__info"> <span class="author__name"> <a href="/blog/authors/alex-yates/1/"> <span> Alex Yates </span> </a> </span> <time class="author__time" datetime="Mon Nov 15 2021 00:00:00 GMT+0000 (Coordinated Universal Time)"> November 15, 2021 </time> </div> </div> <p>This blog post is part 7 of my safe schema updates series. Links to the other posts in this series are available below:</p>
|
||
<p><strong>Critiquing existing systems:</strong></p>
|
||
<ul>
|
||
<li><a href="/blog/safe-schema-updates-1-delivery-hell">Part 1: Database delivery hell</a></li>
|
||
</ul>
|
||
<p><strong>Imagining better systems:</strong></p>
|
||
<ul>
|
||
<li><a href="/blog/safe-schema-updates-2-resilience-vs-robustness">Part 2: Resilient vs robust IT systems</a></li>
|
||
<li><a href="/blog/safe-schema-updates-3-ci-is-misunderstood">Part 3: Continuous Integration is misunderstood</a></li>
|
||
<li><a href="/blog/safe-schema-updates-4-loose-coupling-mitigates-tech-problems">Part 4: Loose coupling mitigates tech problems</a></li>
|
||
<li><a href="/blog/safe-schema-updates-5-loose-coupling-mitigates-human-problems">Part 5: Loose coupling mitigates human problems</a></li>
|
||
</ul>
|
||
<p><strong>Building better systems:</strong></p>
|
||
<ul>
|
||
<li><a href="/blog/safe-schema-updates-6-provisioning-databases">Part 6: Provisioning dev/test databases</a></li>
|
||
<li><a href="/blog/safe-schema-updates-7-near-zero-downtime-deployments">Part 7: Near-zero downtime database deployments</a></li>
|
||
<li><a href="/blog/safe-schema-updates-8-strangling-the-monolith">Part 8: Strangling the monolith</a></li>
|
||
</ul>
|
||
<p>Small, frequent, and simple changes are safer. Big, infrequent, and complex changes are more dangerous. If you disagree, re-read this series from the beginning, starting with my <a href="/blog/safe-schema-updates-1-delivery-hell">post about database delivery hell</a>.</p>
|
||
<p>Databases rarely exist in isolation. When making database schema changes, we usually need to consider dependencies. Databases typically serve front-end applications/services, which means schema changes often need to be coordinated with changes to other systems.</p>
|
||
<p>A period of downtime is probably required because we can’t risk serving mismatched versions:</p>
|
||
<ol>
|
||
<li>The system is taken offline</li>
|
||
<li>All the changes are deployed at once/in sequence</li>
|
||
<li>The system is brought back online</li>
|
||
</ol>
|
||
<p>Throughout this process, our users are locked out.</p>
|
||
<p>There are a hundred ways this could end badly. <a href="/blog/devops-reading-list#phoenix">The Phoenix Project</a> featured just such a disaster. A database update took longer than anticipated and critical systems could not be restored on time.</p>
|
||
<p>Despite the risk, if we have database schemas, it’s unwise to avoid making schema changes. Such a rigid strategy, over time, results in horrible architectures that do not reflect evolving business requirements.</p>
|
||
<p>Our goal is to enable the schema to evolve safely. Therefore, we need to ensure such deployments are executed small and often.</p>
|
||
<p>Unfortunately, the more downtime is required for each deployment, the less frequently we’ll be able to do it. We’ll never be deploying 10 times a day if each deployment requires an hour of downtime.</p>
|
||
<p>More likely, engineers will need to plan well-ahead and play politics to negotiate some downtime window. Probably overnight. (Tired workers aren’t known for their reliability, attention to detail, or problem-solving skills.)</p>
|
||
<p>Since these opportunities don’t come often, changes will be batched up. As many changes as possible will be crammed into the shortest possible window.</p>
|
||
<p>This… is stupid. (See opening paragraph.)</p>
|
||
<p>The inescapable conclusion: It’s essential that we perform schema changes with as little downtime as possible. Only through minimizing downtime, can we increase deployment frequency, decrease deployment size/complexity, and deliver safer schema updates.</p>
|
||
<p>In my experience, for all the talk about source control and deployment automation, the necessity to minimize downtime is under-appreciated by those who have database schemas and wish to keep them safe.</p>
|
||
<p>This post is not about the automation or execution of schema updates – there are <a href="/blog/tag/database-deployments/1">many other posts about that</a>. This post is about patterns for minimizing downtime.</p>
|
||
<h2 id="overloaded-terminology-deployments-and-releases">Overloaded terminology: deployments and releases</h2>
|
||
<p>Many people use the words “release” and “deployment” interchangeably, without considering the difference between them.</p>
|
||
<p>If you use Octopus Deploy (or a similar product) your idea of what “release” means may be the result of common naming conventions in your tooling. In most deployment automation tools a “release” is a specific version of your source code, a bunch of configuration variables, and a set of steps that need to be run to execute a “deployment”. You might consider a “release” to be something that gets “deployed”. The release happens first, and the deployment comes later. That probably feels completely natural to you.</p>
|
||
<p>You are in the minority.</p>
|
||
<p>To most people, and specifically to anyone in marketing, a “release” is something different. “Releasing” a new version of your software, or the latest iPhone, or the new Adele album, is about making it available and telling people about it. The thing is created in advance, and released later. The latest James Bond film was produced in 2020, but the release was delayed until 2021.</p>
|
||
<p>When talking about zero downtime deployments, we tend to use “release” in this second way. Deployments are about making changes, but releases are about revealing those changes to our users. When I use “release” in this post, I’m not referring to the preparation of a deployment, I’m talking about making updates visible to users.</p>
|
||
<p>It is crucial to differentiate between deploying changes and releasing/revealing those changes to users. These two things do not need to happen at the same time. In fact, it’s the ability to separate these events that enables zero downtime releases, as well as all sorts of other exciting practices, such as testing in production and some rapid rollback patterns.</p>
|
||
<h2 id="application-zero-downtime-patterns">Application zero downtime patterns</h2>
|
||
<p>This post is about database deployment, but databases don’t live in isolation. We need to start with some context.</p>
|
||
<p>Application deployment patterns that support zero downtime (more accurately, near-zero downtime) are generally split into two categories:</p>
|
||
<ul>
|
||
<li>Infrastructure-based</li>
|
||
<li>Application-based</li>
|
||
</ul>
|
||
<h3 id="infrastructure-based-deployment-patterns">Infrastructure-based deployment patterns</h3>
|
||
<p><strong>Infrastructure-based</strong> techniques include <a href="https://martinfowler.com/bliki/BlueGreenDeployment.html">blue/green</a> deployments, <a href="https://martinfowler.com/bliki/CanaryRelease.html">canary releases</a>, and cluster immune systems. They are typically based on clever load balancing tricks. The new code is deployed on new infrastructure, tested, and added into rotation.</p>
|
||
<p>By changing settings in our load balancer we can send traffic to either the new or old infra. This potentially allows us to “release” the new version gradually. First to 1% of our production traffic, then 5%, 10%, gradually throttling it as we watch the telemetry, our social media channels, and/or our support tickets to check everything is running smoothly.</p>
|
||
<p>If all goes well, the release will be gradually rolled out globally. If not, we can revert to the old version instantly by undoing the setting on the load balancer. We avoided any in-situ upgrades, so the old servers are still running and ready to receive the full load if required.</p>
|
||
<h3 id="application-based-deployment-patterns">Application-based deployment patterns</h3>
|
||
<p><strong>Application-based</strong> approaches tend to be based on <a href="https://martinfowler.com/articles/feature-toggles.html">feature-toggles/flags</a>. The old and new version will be deployed side by side, but which version gets executed can be managed with code and some external database.</p>
|
||
<p>For example, perhaps we’ve got a <em>featuretoggle</em> database running in production. After deploying our new code, each time a method in the application is called, it queries the <em>featuretoggle</em> database to find out whether some feature is enabled. Depending on the response, it could run either one block of code or another. Perhaps the <em>featuretoggle</em> database can throttle the rollout, by instructing the application to use the new code x% of the time.</p>
|
||
<p>This allows new features to be released or rolled back by changing a setting in an external database. No additional deployment is necessary.</p>
|
||
<p>We can take this further. Perhaps, if we have a new feature, but we are concerned about performance, we could run both blocks of code, but only display the old functionality in the UI. This is called dark launching, and it allows engineers to test the performance of their code with live production workloads, with an easy way to throttle up and down or kill the new code.</p>
|
||
<p>You can read more about application patterns in the post <a href="https://blog.turbinelabs.io/deploy-not-equal-release-part-one-4724bc1e726b">Deploy != Release</a>. This is also covered in more detail in <a href="/blog/devops-reading-list#handbook">The DevOps Handbook</a>.</p>
|
||
<p>The thing that both infrastructure-based and application-based patterns have in common is that the code is deployed first, and released afterwards, in a controlled and testable manner, allowing for rapid, almost immediate, rollbacks.</p>
|
||
<p>What does this mean for databases? <strong>Forward and backward compatibility is essential.</strong></p>
|
||
<h2 id="expandcontract-for-forward-and-backward-compatibility">Expand/contract, for forward and backward compatibility</h2>
|
||
<p>If we wish to make a schema change in the database which will affect our dependent services, and if we wish to avoid scheduled downtime, we are likely to be following one of the application or infrastructure-based patterns discussed above. In either case, we need to evolve the database through three phases.</p>
|
||
<ol>
|
||
<li><strong>Expand:</strong> Additive changes to database to support both the old and new versions of dependent applications.</li>
|
||
<li><strong>Rollout:</strong> New versions of applications deployed, tested, and released. Ideally in that order.</li>
|
||
<li><strong>Contract:</strong> Following rollout, we can safely delete the old schema objects.</li>
|
||
</ol>
|
||
<p>This single, grand refactor is going to require multiple small schema changes. To avoid scheduling downtime, each change must have the following attributes:</p>
|
||
<ul>
|
||
<li>Can be executed independently of other steps or any other dependencies</li>
|
||
<li>Creates minimal risk</li>
|
||
<li>Has a fast roll-back option (that avoids either data loss, or significant and necessary data processing, which can cause all sorts of problems)</li>
|
||
</ul>
|
||
<p>It’s easiest to explain with an example: Consider the splitting of a <em>fullName</em> column, into separate <em>firstName</em> and <em>lastName</em> columns. We can deliver this without any risky downtime windows or scary schema updates as follows:</p>
|
||
<p><strong>Expand:</strong></p>
|
||
<ol>
|
||
<li>The new columns are added to the database. (Nothing risky about that.)</li>
|
||
<li>If using stored procedures for adding/updating/deleting data, these stored procedures can be updated to add/update/delete into both the old and new columns.</li>
|
||
<li>The existing data is gradually migrated in the background. (This can be drip fed without significant performance impact and the process can be paused or stopped if there are any issues.)</li>
|
||
</ol>
|
||
<p>Now the database supports both versions.</p>
|
||
<p><strong>Rollout:</strong></p>
|
||
<ol>
|
||
<li>When the data is reliably in sync in both the old and new columns, any read stored procedures can be pointed at the new columns.</li>
|
||
<li>If the applications reference the columns directly, rather than going through stored procedures, rollout the new application versions using one of the infrastructure or application-based patterns described above.</li>
|
||
</ol>
|
||
<p>Now the new stuff is released globally.</p>
|
||
<p><strong>Contract:</strong></p>
|
||
<ol>
|
||
<li>In theory, we can delete the old columns. However, in systems with many poorly documented dependencies, there’s always the possibility that we missed something. Better to rename the old column first. (And update any stored procedures that updated the old columns.) If anyone complains, we can immediately fix it with another rename by restoring the old version of any stored procedures.</li>
|
||
<li>In either case, after some period of time, we should schedule the deletion of the old columns. No one needs to see hundreds of objects appended with <code>_toDelete</code>. (Tip: try <code>_ToDeleteOn2021-12-01</code> instead. It somewhat focuses the mind, and we could even wrap some automated processes to backup and cull old objects.)</li>
|
||
</ol>
|
||
<p>Refactor complete. As long as the steps are followed in this order, each step could be taken individually. None of these steps created an enormous risk. If there ever was a mistake, each step could be easily reverted.</p>
|
||
<h2 id="summary">Summary</h2>
|
||
<p>This is a much safer way to update your schemas. Crucially, since it does not require any downtime, these changes do not need to be batched up for release.</p>
|
||
<p>There may be some people reading this who think it will take longer. I’m afraid those people are still thinking in terms of long lead times for small changes. Perhaps they are thinking of change approval boards or they are imagining separate JIRA tickets for each step. Perhaps they are thinking of separate week-long testing cycles for each step.</p>
|
||
<p>Forget all that.</p>
|
||
<p>If this refactor needs approval, it should be reviewed as a whole, even if it’s executed in steps. And most of the testing and deployment pipeline should be automated.</p>
|
||
<p>Yes: This is harder. No one said this was going to be easy. We’re optimizing for safety, and that requires rigor and effort.</p>
|
||
<p>Of course, with more dependencies, this is harder. Some might think it’s unfeasible. Certainly this process requires a certain level of defensive programming and testing/telemetry in any dependent systems.</p>
|
||
<p>In an ideal world we’d be working with loosely coupled systems (see <a href="/blog/safe-schema-updates-4-loose-coupling-mitigates-tech-problems">part 4</a> and <a href="/blog/safe-schema-updates-5-loose-coupling-mitigates-human-problems">part 5</a> of my series). These are coded defensively by default and database dependencies are significantly reduced. Attributes that make all this a lot easier.</p>
|
||
<p>If your system is tightly-coupled, perhaps by now you are seeing the enormous benefits of loose-coupling. Perhaps you are also daunted by the perceived enormity of the challenge ahead: evolving your tangled web of dependencies into something safer.</p>
|
||
<h2 id="next-time">Next time</h2>
|
||
<p>Next time, we finish this series by exploring the Strangler pattern. A method for safely refactoring complex, tightly-coupled systems.</p>
|
||
<p>Links to the other posts in this series are available below:</p>
|
||
<p><strong>Critiquing existing systems:</strong></p>
|
||
<ul>
|
||
<li><a href="/blog/safe-schema-updates-1-delivery-hell">Part 1: Database delivery hell</a></li>
|
||
</ul>
|
||
<p><strong>Imagining better systems:</strong></p>
|
||
<ul>
|
||
<li><a href="/blog/safe-schema-updates-2-resilience-vs-robustness">Part 2: Resilient vs robust IT systems</a></li>
|
||
<li><a href="/blog/safe-schema-updates-3-ci-is-misunderstood">Part 3: Continuous Integration is misunderstood</a></li>
|
||
<li><a href="/blog/safe-schema-updates-4-loose-coupling-mitigates-tech-problems">Part 4: Loose coupling mitigates tech problems</a></li>
|
||
<li><a href="/blog/safe-schema-updates-5-loose-coupling-mitigates-human-problems">Part 5: Loose coupling mitigates human problems</a></li>
|
||
</ul>
|
||
<p><strong>Building better systems:</strong></p>
|
||
<ul>
|
||
<li><a href="/blog/safe-schema-updates-6-provisioning-databases">Part 6: Provisioning dev/test databases</a></li>
|
||
<li><a href="/blog/safe-schema-updates-7-near-zero-downtime-deployments">Part 7: Near-zero downtime database deployments</a></li>
|
||
<li><a href="/blog/safe-schema-updates-8-strangling-the-monolith">Part 8: Strangling the monolith</a></li>
|
||
</ul>
|
||
<h2 id="watch-the-webinars">Watch the webinars</h2>
|
||
<p>Our first webinar discussed how loosely coupled architectures lead to maintainability, innovation, and safety. Part two discussed how to transition a mature system from one architecture to another.</p>
|
||
<h3 id="database-devops-imagining-better-systems">Database DevOps: Imagining better systems</h3>
|
||
<p><a href="https://www.youtube.com/watch?v=oJAbUMZ6bQY">Database DevOps - Imagining a better way</a></p>
|
||
<h3 id="database-devops-building-better-systems">Database DevOps: Building better systems</h3>
|
||
<p><a href="https://www.youtube.com/watch?v=joogIAcqMYo">Database DevOps - Building Better systems</a></p>
|
||
<p>Happy deployments!</p> <!-- <Feedback
|
||
frontmatter={frontmatter}
|
||
headings={headings}
|
||
lang={lang}
|
||
/> --> <div class="post-taxonomy"> <div class="post-tag"> <h2>Tags: </h2> <ul itemprop="keywords"> <li> <a href="/blog/tag/devops/1/">DevOps</a> </li><li> <a href="/blog/tag/database-deployments/1/">Database Deployments</a> </li><li> <a href="/blog/tag/deployment-patterns/1/">Deployment Patterns</a> </li> </ul> </div> </div> <div class="author"> <a href="/blog/authors/alex-yates/1/" class="author__image-link"> <img class="author__image" srcset="/blog/i/600/authors/alex-yates.webp 600w, /blog/i/1000/authors/alex-yates.webp 646w" sizes="170px" src="/blog/i/x/authors/alex-yates.png" alt="Alex Yates" width="646" height="647"> </a> <div class="author__info"> <span class="author__name" itemprop="author" itemscope itemtype="https://schema.org/Person"> <a href="/blog/authors/alex-yates/1/" itemprop="url"> <span itemprop="name"> Alex Yates </span> </a> </span> <time class="author__time" datetime="Mon Nov 15 2021 00:00:00 GMT+0000 (Coordinated Universal Time)" itemprop="datePublished"> Published: November 15, 2021 </time> </div> </div> </div> <h3>Related posts</h3> <div class="simple-grid-3"> <article class="card card--padded"> <a href="/blog/octo-easy-mode-23-runbookwebhooks" class="card__link" role="link" aria-label="Open Octopus Easy Mode - Runbook Webhooks"> <div class="card__image-wrapper"> <img srcset="/blog/i/600/cover/blog-ai-introducing-octopus-ai-assistant.webp 600w, /blog/i/1000/cover/blog-ai-introducing-octopus-ai-assistant.webp 750w" sizes="254px" src="/blog/i/x/cover/blog-ai-introducing-octopus-ai-assistant.png" width="750" height="400" alt="The image shows an isometric illustration of a central octopus-like icon connected to multiple brain icons in a hub-and-spoke network pattern against a purple-to-blue gradient background." class="card__image" onerror="this.src='https://i.octopus.com/library/step-templates/other.png';" loading="lazy"> </div> <div class="card__copy"> <p class="card__title">Octopus Easy Mode - Runbook Webhooks</p> <p class="card__description">Learn how to create runbook webhook triggers</p> <div class="card__meta"> <div class="card__authors"> <div class="author"> <img class="author__image" srcset="/blog/i/600/authors/matthew-casperson.webp 140w" sizes="170px" src="/blog/i/x/authors/matthew-casperson.png" alt="Matthew Casperson" width="140" height="140"> <div class="author__info"> <span class="author__name"> <span> Matthew Casperson </span> </span> <time class="author__time" datetime="2026-09-01"> September 1, 2026 </time> </div> </div> </div> </div> </div> </a> </article><article class="card card--padded"> <a href="/blog/the-hotfix-myth" class="card__link" role="link" aria-label="Open Debunking the hotfix pipeline myth"> <div class="card__image-wrapper"> <img srcset="/blog/i/600/cover/devops-golden-paths.webp 600w, /blog/i/1000/cover/devops-golden-paths.webp 750w" sizes="254px" src="/blog/i/x/cover/devops-golden-paths.png" width="750" height="400" alt="Stylized image of DevOps infinity symbol with a car driving on it and increasing speed over golden arrows." class="card__image" onerror="this.src='https://i.octopus.com/library/step-templates/other.png';" loading="lazy"> </div> <div class="card__copy"> <p class="card__title">Debunking the hotfix pipeline myth</p> <p class="card__description">Why it is more important to making the default pipelines as fast and as efficient as possible over hotfix pipelines.</p> <div class="card__meta"> <div class="card__authors"> <div class="author"> <img class="author__image" srcset="/blog/i/600/authors/bob-walker.webp 140w" sizes="170px" src="/blog/i/x/authors/bob-walker.png" alt="Bob Walker" width="140" height="140"> <div class="author__info"> <span class="author__name"> <span> Bob Walker </span> </span> <time class="author__time" datetime="2026-08-27"> August 27, 2026 </time> </div> </div> </div> </div> </div> </a> </article><article class="card card--padded"> <a href="/blog/inside-platform-engineering-nigel-douglas" class="card__link" role="link" aria-label="Open Inside Platform Engineering with Nigel Douglas"> <div class="card__image-wrapper"> <img srcset="/blog/i/600/cover/blog-img-inside-platform-engineering-nigel-douglas.webp 600w, /blog/i/1000/cover/blog-img-inside-platform-engineering-nigel-douglas.webp 750w" sizes="254px" src="/blog/i/x/cover/blog-img-inside-platform-engineering-nigel-douglas.png" width="750" height="400" alt="A photograph of Nigel Douglas surrounded by a circular blue and purple frame." class="card__image" onerror="this.src='https://i.octopus.com/library/step-templates/other.png';" loading="lazy"> </div> <div class="card__copy"> <p class="card__title">Inside Platform Engineering with Nigel Douglas</p> <p class="card__description">A conversation with Nigel Douglas on dependencies, supply chain attacks, and why most teams can't list everything holding their software together.</p> <div class="card__meta"> <div class="card__authors"> <div class="author"> <img class="author__image" srcset="/blog/i/600/authors/matthew-allford.webp 512w" sizes="170px" src="/blog/i/x/authors/matthew-allford.png" alt="Matthew Allford" width="512" height="512"> <div class="author__info"> <span class="author__name"> <span> Matthew Allford </span> </span> <time class="author__time" datetime="2026-08-21"> August 21, 2026 </time> </div> </div> </div> </div> </div> </a> </article> </div> <div class="newsletter"> <h2>Newsletter</h2> <p>
|
||
Join ~80,000 DevOps professionals and sign up for the latest Octopus news,
|
||
events, and opinions. No spam. Unsubscribe at any time.
|
||
</p> <form id="mktoForm_1062" class="newsletter__form"></form> <script>(function(){const formId = 1062;
|
||
const dreamdataTrackingId = undefined;
|
||
|
||
(() => {
|
||
const formEl = document.getElementById(`mktoForm_${formId}`);
|
||
if (!formEl) {
|
||
return;
|
||
}
|
||
|
||
// Load the 134 KB Marketo library once per page, shared across every form
|
||
const loadMarketo = () => {
|
||
if (!window.__marketoLoader) {
|
||
window.__marketoLoader = new Promise((resolve, reject) => {
|
||
const script = document.createElement('script');
|
||
script.src = 'https://get.octopus.com/js/forms2/js/forms2.min.js';
|
||
script.onload = resolve;
|
||
script.onerror = () => reject(new Error('Failed to load MktoForms2'));
|
||
document.head.appendChild(script);
|
||
});
|
||
}
|
||
return window.__marketoLoader;
|
||
};
|
||
|
||
const initForm = async () => {
|
||
try {
|
||
await loadMarketo();
|
||
} catch (error) {
|
||
console.error(error);
|
||
// Drop the cached rejected promise so a later form instance can retry
|
||
window.__marketoLoader = undefined;
|
||
// Collapse any space reserved for this form so a blocked or failed
|
||
// load does not leave an empty box (no-op when there is no wrapper)
|
||
formEl.closest('.newsletter')?.style.setProperty('display', 'none');
|
||
return;
|
||
}
|
||
|
||
// @ts-ignore - no global type for MktoForms2
|
||
if (typeof MktoForms2 === 'undefined' || !MktoForms2.loadForm) {
|
||
console.error('MktoForms2 is not available after loading.');
|
||
return;
|
||
}
|
||
|
||
// @ts-ignore
|
||
MktoForms2.loadForm(
|
||
'//get.octopus.com',
|
||
'271-BEX-827',
|
||
formId,
|
||
(form) => {
|
||
const formElem = form.getFormElem()[0];
|
||
|
||
if (!(formElem instanceof HTMLElement)) {
|
||
console.error(
|
||
'Expected a DOM element but got something else',
|
||
formElem
|
||
);
|
||
return;
|
||
}
|
||
|
||
formElem.querySelectorAll('style').forEach((style) => style.remove());
|
||
|
||
const baseStyle = document.getElementById('mktoForms2BaseStyle');
|
||
if (baseStyle) {
|
||
baseStyle.remove();
|
||
}
|
||
|
||
formElem.removeAttribute('style');
|
||
|
||
formElem
|
||
.querySelectorAll('.mktoTextField')
|
||
.forEach((el) => el.classList.add('form-control'));
|
||
formElem
|
||
.querySelectorAll('.mktoEmailField')
|
||
.forEach((el) => el.classList.add('form-control'));
|
||
formElem
|
||
.querySelectorAll('.mktoButton')
|
||
.forEach((el) => el.classList.add('button', 'button--primary'));
|
||
|
||
formElem
|
||
.querySelectorAll('.mktoAsterix')
|
||
.forEach((el) => el.remove());
|
||
formElem.querySelectorAll('.mktoOffset').forEach((el) => el.remove());
|
||
formElem
|
||
.querySelectorAll('.mktoFormCol, .mktoField, .mktoLabel')
|
||
.forEach((el) => el.removeAttribute('style'));
|
||
|
||
// Add Dreamdata tracking if configured
|
||
if (dreamdataTrackingId) {
|
||
form.onSuccess(function (values, followUpUrl) {
|
||
const email = values.Email || values.email;
|
||
|
||
if (typeof dreamdata !== 'undefined') {
|
||
try {
|
||
dreamdata.track(dreamdataTrackingId);
|
||
if (email) {
|
||
dreamdata.identify(null, { email: email });
|
||
}
|
||
} catch (error) {
|
||
console.warn('Dreamdata tracking failed:', error);
|
||
}
|
||
} else {
|
||
console.warn(
|
||
'Dreamdata not available for tracking:',
|
||
dreamdataTrackingId
|
||
);
|
||
}
|
||
|
||
if (followUpUrl) {
|
||
location.href = followUpUrl;
|
||
}
|
||
|
||
return followUpUrl ? false : true;
|
||
});
|
||
}
|
||
}
|
||
);
|
||
};
|
||
|
||
// The form is below the fold, so defer the library until the reader
|
||
// scrolls near it - keeps 134 KB off the critical path on every page.
|
||
// 600px of rootMargin starts the download early enough that the form is
|
||
// usually ready when it enters the viewport.
|
||
if ('IntersectionObserver' in window) {
|
||
const observer = new IntersectionObserver(
|
||
(entries) => {
|
||
if (entries.some((entry) => entry.isIntersecting)) {
|
||
observer.disconnect();
|
||
initForm();
|
||
}
|
||
},
|
||
{ rootMargin: '600px' }
|
||
);
|
||
observer.observe(formEl);
|
||
} else {
|
||
initForm();
|
||
}
|
||
})();
|
||
})();</script> </div> <meta itemprop="image" content="/blog/i/x/cover/near-zero-downtime-database-deployments.png"> </article> </main> <nav class="site-nav" id="site-nav" aria-label="Site"> <div class="theme-switcher" data-theme-toggle> <input id="theme-switcher" type="checkbox" aria-checked="false" role="switch" aria-label="Toggle theme between light and dark mode" tabindex="-1" data-theme-toggle-checkbox> <label for="theme-switcher" class="theme-switcher__label" tabindex="0"> <span class="theme-switcher__icon theme-switcher__icon--light" aria-hidden="true"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"> <path d="M12 2.40002C11.475 2.40002 11.1 2.81252 11.1 3.30002V5.70002C11.1 6.22502 11.475 6.60002 12 6.60002C12.4875 6.60002 12.9 6.22502 12.9 5.70002V3.30002C12.9 2.81252 12.4875 2.40002 12 2.40002ZM12 17.4C11.475 17.4 11.1 17.8125 11.1 18.3V20.7C11.1 21.225 11.475 21.6 12 21.6C12.4875 21.6 12.9 21.225 12.9 20.7V18.3C12.9 17.8125 12.4875 17.4 12 17.4ZM20.7 12.9C21.1875 12.9 21.6 12.525 21.6 12C21.6 11.5125 21.1875 11.1 20.7 11.1H18.3C17.775 11.1 17.4 11.5125 17.4 12C17.4 12.525 17.775 12.9 18.3 12.9H20.7ZM6.60002 12C6.60002 11.5125 6.18752 11.1 5.70002 11.1H3.30002C2.77502 11.1 2.40002 11.5125 2.40002 12C2.40002 12.525 2.77502 12.9 3.30002 12.9H5.70002C6.18752 12.9 6.60002 12.525 6.60002 12ZM18.7875 6.48752C19.125 6.15002 19.125 5.58752 18.7875 5.21252C18.4125 4.87502 17.85 4.87502 17.5125 5.21252L15.7875 6.93752C15.45 7.27502 15.45 7.83752 15.7875 8.21252C16.1625 8.55002 16.725 8.55002 17.0625 8.21252L18.7875 6.48752ZM8.17502 15.825C7.80002 15.4875 7.23752 15.4875 6.90002 15.825L5.21252 17.55C4.83752 17.8875 4.83752 18.45 5.21252 18.7875C5.55002 19.1625 6.11252 19.1625 6.45002 18.7875L8.17502 17.1C8.51252 16.7625 8.51252 16.2 8.17502 15.825ZM17.5125 18.7875C17.85 19.1625 18.4125 19.1625 18.7875 18.7875C19.125 18.45 19.125 17.8875 18.7875 17.55L17.0625 15.825C16.725 15.4875 16.1625 15.4875 15.7875 15.825C15.45 16.2 15.45 16.7625 15.7875 17.1L17.5125 18.7875ZM8.17502 8.21252C8.51252 7.83752 8.51252 7.27502 8.17502 6.93752L6.45002 5.21252C6.11252 4.87502 5.55002 4.87502 5.21252 5.21252C4.83752 5.58752 4.83752 6.15002 5.21252 6.48752L6.90002 8.21252C7.23752 8.55002 7.80002 8.55002 8.17502 8.21252ZM12 16.2C14.2875 16.2 16.2 14.325 16.2 12C16.2 9.71252 14.2875 7.80002 12 7.80002C9.67502 7.80002 7.80002 9.71252 7.80002 12C7.80002 14.325 9.67502 16.2 12 16.2Z" fill="white"></path> </svg>
|
||
Light
|
||
</span> <span class="switch-slider"></span> <span class="theme-switcher__icon theme-switcher__icon--dark" aria-hidden="true"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"> <path d="M13.1625 3.59998C8.55005 3.59998 4.80005 7.38748 4.80005 12C4.80005 16.65 8.55005 20.4 13.1625 20.4C15.45 20.4 17.5125 19.5 19.0125 18.0375C19.2 17.85 19.2375 17.5875 19.125 17.325C19.0125 17.1 18.75 16.9875 18.4875 17.025C18.1125 17.1 17.7375 17.1 17.3625 17.1C13.725 17.1 10.7625 14.175 10.7625 10.5C10.7625 8.06248 12.1125 5.88748 14.1375 4.76248C14.3625 4.64998 14.475 4.38748 14.4 4.12498C14.3625 3.86248 14.1375 3.67498 13.875 3.63748C13.65 3.63748 13.3875 3.63748 13.1625 3.63748V3.59998Z" fill="white"></path> </svg>
|
||
Dark
|
||
</span> </label> </div> <h2 class="site-nav-title">Navigation</h2> <ul class="site-nav__list"> <li class="site-nav__list-item"> <a href="/blog" aria-current="false"> Blog home </a> </li> <li class="site-nav__list-item"> <a href="/blog/tag/product/1" aria-current="false"> Product </a> </li> <li class="site-nav__list-item"> <a href="/blog/tag/engineering/1" aria-current="false"> Engineering </a> </li> <li class="site-nav__list-item"> <a href="/blog/tag/devops/1" aria-current="false"> DevOps </a> </li> <li class="site-nav__list-item"> <a href="/blog/tag/company/1" aria-current="false"> Company </a> </li> <li class="site-nav__list-item"> <a href="/blog/search" aria-current="false"> Search </a> </li> </ul> </nav> <script type="module">
|
||
import { ThemeSwitcher } from '/blog/js/modules/theme-switcher.js';
|
||
|
||
document.addEventListener('DOMContentLoaded', function () {
|
||
const themeSwitchers = document.querySelectorAll('[data-theme-toggle]');
|
||
themeSwitchers.forEach((switcher) => new ThemeSwitcher(switcher));
|
||
});
|
||
</script> <div class="side-nav"> <nav class="article-nav" data-article-nav aria-label="Table of contents"> <details class="article-nav__details" open> <summary class="article-nav__title"> On this page </summary> <hr class="separator"> <ol class="article-nav__list"> <li class="article-nav__item article-nav__item--level-2"> <a href="#overloaded-terminology-deployments-and-releases" class="article-nav__link" data-article-link> Overloaded terminology: deployments and releases </a> </li><li class="article-nav__item article-nav__item--level-2"> <a href="#application-zero-downtime-patterns" class="article-nav__link" data-article-link> Application zero downtime patterns </a> </li><li class="article-nav__item article-nav__item--level-3"> <a href="#infrastructure-based-deployment-patterns" class="article-nav__link" data-article-link> Infrastructure-based deployment patterns </a> </li><li class="article-nav__item article-nav__item--level-3"> <a href="#application-based-deployment-patterns" class="article-nav__link" data-article-link> Application-based deployment patterns </a> </li><li class="article-nav__item article-nav__item--level-2"> <a href="#expandcontract-for-forward-and-backward-compatibility" class="article-nav__link" data-article-link> Expand/contract, for forward and backward compatibility </a> </li><li class="article-nav__item article-nav__item--level-2"> <a href="#summary" class="article-nav__link" data-article-link> Summary </a> </li><li class="article-nav__item article-nav__item--level-2"> <a href="#next-time" class="article-nav__link" data-article-link> Next time </a> </li><li class="article-nav__item article-nav__item--level-2"> <a href="#watch-the-webinars" class="article-nav__link" data-article-link> Watch the webinars </a> </li><li class="article-nav__item article-nav__item--level-3"> <a href="#database-devops-imagining-better-systems" class="article-nav__link" data-article-link> Database DevOps: Imagining better systems </a> </li><li class="article-nav__item article-nav__item--level-3"> <a href="#database-devops-building-better-systems" class="article-nav__link" data-article-link> Database DevOps: Building better systems </a> </li> </ol> </details> </nav> <script type="module">document.addEventListener(`DOMContentLoaded`,function(){let e=document.querySelector(`.article-nav__details`),t=()=>{e&&(window.innerWidth>=1130?e.setAttribute(`open`,``):e.removeAttribute(`open`))};t(),window.addEventListener(`resize`,t)});</script> </div> </div> <div data-shared-source="live" data-shared-fragment="footer" data-shared-note="fetched https://octopus.com/fragments/footer at 2026-09-11T10:55:57.544Z">
|
||
|
||
|
||
<footer class="footer footer-pu" itemscope itemtype="https://schema.org/WPFooter">
|
||
<div class="footer__content container">
|
||
<section class="footer__row footer__row--first" aria-label="Product and resource links">
|
||
<div class="footer__column">
|
||
<h3 class="footer__column-title" id="footer-first-platform" itemprop="name">Platform</h3>
|
||
|
||
<ul class="footer__items" aria-labelledby="footer-first-platform">
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://octopus.com/"
|
||
aria-label="Continuous Delivery platform"
|
||
itemprop="url">
|
||
<span class="footer__item-label" itemprop="name">
|
||
Continuous Delivery platform
|
||
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://octopus.com/use-case/platform-hub"
|
||
aria-label="Platform Hub"
|
||
itemprop="url">
|
||
<span class="footer__item-label" itemprop="name">
|
||
Platform Hub
|
||
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://octopus.com/ai-tools"
|
||
aria-label="AI tools"
|
||
itemprop="url">
|
||
<span class="footer__item-label" itemprop="name">
|
||
AI tools
|
||
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://octopus.com/use-case/tenanted-deployments"
|
||
target="_blank"
|
||
rel="noopener noreferrer"
|
||
aria-label="Tenanted deployments (opens in new tab)"
|
||
itemprop="url">
|
||
<span class="footer__item-label" itemprop="name">
|
||
Tenanted deployments
|
||
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="footer__column">
|
||
<h3 class="footer__column-title" id="footer-first-resources" itemprop="name">Resources</h3>
|
||
|
||
<ul class="footer__items" aria-labelledby="footer-first-resources">
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://octopus.com/docs"
|
||
aria-label="Documentation"
|
||
itemprop="url">
|
||
<span class="footer__item-label" itemprop="name">
|
||
Documentation
|
||
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://octopus.com/downloads"
|
||
aria-label="Download Octopus"
|
||
itemprop="url">
|
||
<span class="footer__item-label" itemprop="name">
|
||
Download Octopus
|
||
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://octopus.com/publications"
|
||
aria-label="Publications"
|
||
itemprop="url">
|
||
<span class="footer__item-label" itemprop="name">
|
||
Publications
|
||
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://octopus.com/blog"
|
||
aria-label="Blog"
|
||
itemprop="url">
|
||
<span class="footer__item-label" itemprop="name">
|
||
Blog
|
||
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="footer__column">
|
||
<h3 class="footer__column-title" id="footer-first-our-company" itemprop="name">Our company</h3>
|
||
|
||
<ul class="footer__items" aria-labelledby="footer-first-our-company">
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://octopus.com/company"
|
||
aria-label="About us"
|
||
itemprop="url">
|
||
<span class="footer__item-label" itemprop="name">
|
||
About us
|
||
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://octopus.com/company/careers"
|
||
aria-label="Careers"
|
||
itemprop="url">
|
||
<span class="footer__item-label" itemprop="name">
|
||
Careers
|
||
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://roadmap.octopus.com/tabs/1-under-consideration"
|
||
rel="noopener noreferrer"
|
||
aria-label="Roadmap (opens in new tab)"
|
||
itemprop="url">
|
||
<span class="footer__item-label" itemprop="name">
|
||
Roadmap
|
||
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://ir.octopus.com/"
|
||
rel="noopener noreferrer"
|
||
aria-label="Investor relations (opens in new tab)"
|
||
itemprop="url">
|
||
<span class="footer__item-label" itemprop="name">
|
||
Investor relations
|
||
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://octopus.com/company/brand"
|
||
aria-label="Brand guidelines"
|
||
itemprop="url">
|
||
<span class="footer__item-label" itemprop="name">
|
||
Brand guidelines
|
||
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="footer__column">
|
||
<h3 class="footer__column-title" id="footer-first-help-and-support" itemprop="name">Help and support</h3>
|
||
|
||
<ul class="footer__items" aria-labelledby="footer-first-help-and-support">
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://octopus.com/company/contact"
|
||
aria-label="Contact Sales"
|
||
itemprop="url">
|
||
<span class="footer__item-label" itemprop="name">
|
||
Contact Sales
|
||
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://octopus.com/support"
|
||
aria-label="Support"
|
||
itemprop="url">
|
||
<span class="footer__item-label" itemprop="name">
|
||
Support
|
||
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://octopus.com/upgrade"
|
||
aria-label="Upgrade"
|
||
itemprop="url">
|
||
<span class="footer__item-label" itemprop="name">
|
||
Upgrade
|
||
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://octopus.com/company/trust"
|
||
aria-label="Security and legal"
|
||
itemprop="url">
|
||
<span class="footer__item-label" itemprop="name">
|
||
Security and legal
|
||
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://oc.to/CommunitySlack"
|
||
rel="noopener noreferrer"
|
||
aria-label="Community Slack (opens in new tab)"
|
||
itemprop="url">
|
||
<span class="footer__item-label" itemprop="name">
|
||
Community Slack
|
||
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="footer__row footer__row--second" aria-label="Community and partners">
|
||
<div class="footer__column">
|
||
<h3 class="footer__column-title" id="footer-second-our-awards" itemprop="name">Our awards</h3>
|
||
|
||
<ul class="footer__items" aria-labelledby="footer-second-our-awards">
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://www.g2.com/products/octopus-deploy/reviews"
|
||
target="_blank"
|
||
rel="noopener noreferrer"
|
||
aria-label="Image link"
|
||
itemprop="url">
|
||
<span class="footer__item-image" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/868x1000/ff9d5240db/continuousintegration_bestmeetsrequirements_meetsrequirements.png/m/fit-in/1200x0/filters:quality(85):format(webp)" alt="Award badge for "Best Meets Requirements" from G2, Summer 2026." loading="lazy" width="868" height="1000" srcset="https://a.storyblok.com/f/185929/868x1000/ff9d5240db/continuousintegration_bestmeetsrequirements_meetsrequirements.png/m/fit-in/400x0/filters:quality(85):format(webp) 400w, https://a.storyblok.com/f/185929/868x1000/ff9d5240db/continuousintegration_bestmeetsrequirements_meetsrequirements.png/m/fit-in/600x0/filters:quality(85):format(webp) 600w, https://a.storyblok.com/f/185929/868x1000/ff9d5240db/continuousintegration_bestmeetsrequirements_meetsrequirements.png/m/fit-in/800x0/filters:quality(85):format(webp) 800w, https://a.storyblok.com/f/185929/868x1000/ff9d5240db/continuousintegration_bestmeetsrequirements_meetsrequirements.png/m/fit-in/1200x0/filters:quality(85):format(webp) 1200w, https://a.storyblok.com/f/185929/868x1000/ff9d5240db/continuousintegration_bestmeetsrequirements_meetsrequirements.png/m/fit-in/1600x0/filters:quality(85):format(webp) 1600w, https://a.storyblok.com/f/185929/868x1000/ff9d5240db/continuousintegration_bestmeetsrequirements_meetsrequirements.png/m/fit-in/2000x0/filters:quality(85):format(webp) 2000w" sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 70vw" />
|
||
</span>
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://www.gartner.com/reviews/market/devops-platforms/vendor/octopus-deploy-125263461/product/octopus-deploy"
|
||
rel="noopener noreferrer"
|
||
aria-label="Image link"
|
||
itemprop="url">
|
||
<span class="footer__item-image" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/86x101/dd0724c752/gartner-users-love-us-badge.png/m/fit-in/1200x0/filters:quality(85):format(webp)" alt="Gartner badge - Users love us" loading="lazy" width="86" height="101" srcset="https://a.storyblok.com/f/185929/86x101/dd0724c752/gartner-users-love-us-badge.png/m/fit-in/400x0/filters:quality(85):format(webp) 400w, https://a.storyblok.com/f/185929/86x101/dd0724c752/gartner-users-love-us-badge.png/m/fit-in/600x0/filters:quality(85):format(webp) 600w, https://a.storyblok.com/f/185929/86x101/dd0724c752/gartner-users-love-us-badge.png/m/fit-in/800x0/filters:quality(85):format(webp) 800w, https://a.storyblok.com/f/185929/86x101/dd0724c752/gartner-users-love-us-badge.png/m/fit-in/1200x0/filters:quality(85):format(webp) 1200w, https://a.storyblok.com/f/185929/86x101/dd0724c752/gartner-users-love-us-badge.png/m/fit-in/1600x0/filters:quality(85):format(webp) 1600w, https://a.storyblok.com/f/185929/86x101/dd0724c752/gartner-users-love-us-badge.png/m/fit-in/2000x0/filters:quality(85):format(webp) 2000w" sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 70vw" />
|
||
</span>
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://www.g2.com/products/octopus-deploy/reviews"
|
||
target="_blank"
|
||
rel="noopener noreferrer"
|
||
aria-label="Image link"
|
||
itemprop="url">
|
||
<span class="footer__item-image" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/868x1000/f647e2f3bc/configurationmanagement_highperformer_enterprise_highperformer.png/m/fit-in/1200x0/filters:quality(85):format(webp)" alt="Badge displaying "High Performer Enterprise" for Summer 2026 with G2 logo." loading="lazy" width="868" height="1000" srcset="https://a.storyblok.com/f/185929/868x1000/f647e2f3bc/configurationmanagement_highperformer_enterprise_highperformer.png/m/fit-in/400x0/filters:quality(85):format(webp) 400w, https://a.storyblok.com/f/185929/868x1000/f647e2f3bc/configurationmanagement_highperformer_enterprise_highperformer.png/m/fit-in/600x0/filters:quality(85):format(webp) 600w, https://a.storyblok.com/f/185929/868x1000/f647e2f3bc/configurationmanagement_highperformer_enterprise_highperformer.png/m/fit-in/800x0/filters:quality(85):format(webp) 800w, https://a.storyblok.com/f/185929/868x1000/f647e2f3bc/configurationmanagement_highperformer_enterprise_highperformer.png/m/fit-in/1200x0/filters:quality(85):format(webp) 1200w, https://a.storyblok.com/f/185929/868x1000/f647e2f3bc/configurationmanagement_highperformer_enterprise_highperformer.png/m/fit-in/1600x0/filters:quality(85):format(webp) 1600w, https://a.storyblok.com/f/185929/868x1000/f647e2f3bc/configurationmanagement_highperformer_enterprise_highperformer.png/m/fit-in/2000x0/filters:quality(85):format(webp) 2000w" sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 70vw" />
|
||
</span>
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="footer__column">
|
||
<h3 class="footer__column-title" id="footer-second-sign-up-to-our-newsletter" itemprop="name">Sign up to our newsletter</h3>
|
||
|
||
<ul class="footer__items" aria-labelledby="footer-second-sign-up-to-our-newsletter">
|
||
<li class="footer__item footer__item--component">
|
||
<div class="mktoFormWrapper"> <form id="mktoForm_2139" class="newsletter__form"></form> <script>(function(){const formId = 2139;
|
||
const dreamdataTrackingId = "Newsletter Signup (Footer)";
|
||
|
||
(() => {
|
||
const formEl = document.getElementById(`mktoForm_${formId}`);
|
||
if (!formEl) {
|
||
return;
|
||
}
|
||
|
||
// Load the 134 KB Marketo library once per page, shared across every form
|
||
const loadMarketo = () => {
|
||
if (!window.__marketoLoader) {
|
||
window.__marketoLoader = new Promise((resolve, reject) => {
|
||
const script = document.createElement('script');
|
||
script.src = 'https://get.octopus.com/js/forms2/js/forms2.min.js';
|
||
script.onload = resolve;
|
||
script.onerror = () => reject(new Error('Failed to load MktoForms2'));
|
||
document.head.appendChild(script);
|
||
});
|
||
}
|
||
return window.__marketoLoader;
|
||
};
|
||
|
||
const initForm = async () => {
|
||
try {
|
||
await loadMarketo();
|
||
} catch (error) {
|
||
console.error(error);
|
||
// Drop the cached rejected promise so a later form instance can retry
|
||
window.__marketoLoader = undefined;
|
||
// Collapse any space reserved for this form so a blocked or failed
|
||
// load does not leave an empty box (no-op when there is no wrapper)
|
||
formEl.closest('.newsletter')?.style.setProperty('display', 'none');
|
||
return;
|
||
}
|
||
|
||
// @ts-ignore - no global type for MktoForms2
|
||
if (typeof MktoForms2 === 'undefined' || !MktoForms2.loadForm) {
|
||
console.error('MktoForms2 is not available after loading.');
|
||
return;
|
||
}
|
||
|
||
// @ts-ignore
|
||
MktoForms2.loadForm(
|
||
'//get.octopus.com',
|
||
'271-BEX-827',
|
||
formId,
|
||
(form) => {
|
||
const formElem = form.getFormElem()[0];
|
||
|
||
if (!(formElem instanceof HTMLElement)) {
|
||
console.error(
|
||
'Expected a DOM element but got something else',
|
||
formElem
|
||
);
|
||
return;
|
||
}
|
||
|
||
formElem.querySelectorAll('style').forEach((style) => style.remove());
|
||
|
||
const baseStyle = document.getElementById('mktoForms2BaseStyle');
|
||
if (baseStyle) {
|
||
baseStyle.remove();
|
||
}
|
||
|
||
formElem.removeAttribute('style');
|
||
|
||
formElem
|
||
.querySelectorAll('.mktoTextField')
|
||
.forEach((el) => el.classList.add('form-control'));
|
||
formElem
|
||
.querySelectorAll('.mktoEmailField')
|
||
.forEach((el) => el.classList.add('form-control'));
|
||
formElem
|
||
.querySelectorAll('.mktoButton')
|
||
.forEach((el) => el.classList.add('button', 'button--primary'));
|
||
|
||
formElem
|
||
.querySelectorAll('.mktoAsterix')
|
||
.forEach((el) => el.remove());
|
||
formElem.querySelectorAll('.mktoOffset').forEach((el) => el.remove());
|
||
formElem
|
||
.querySelectorAll('.mktoFormCol, .mktoField, .mktoLabel')
|
||
.forEach((el) => el.removeAttribute('style'));
|
||
|
||
// Add Dreamdata tracking if configured
|
||
if (dreamdataTrackingId) {
|
||
form.onSuccess(function (values, followUpUrl) {
|
||
const email = values.Email || values.email;
|
||
|
||
if (typeof dreamdata !== 'undefined') {
|
||
try {
|
||
dreamdata.track(dreamdataTrackingId);
|
||
if (email) {
|
||
dreamdata.identify(null, { email: email });
|
||
}
|
||
} catch (error) {
|
||
console.warn('Dreamdata tracking failed:', error);
|
||
}
|
||
} else {
|
||
console.warn(
|
||
'Dreamdata not available for tracking:',
|
||
dreamdataTrackingId
|
||
);
|
||
}
|
||
|
||
if (followUpUrl) {
|
||
location.href = followUpUrl;
|
||
}
|
||
|
||
return followUpUrl ? false : true;
|
||
});
|
||
}
|
||
}
|
||
);
|
||
};
|
||
|
||
// The form is below the fold, so defer the library until the reader
|
||
// scrolls near it - keeps 134 KB off the critical path on every page.
|
||
// 600px of rootMargin starts the download early enough that the form is
|
||
// usually ready when it enters the viewport.
|
||
if ('IntersectionObserver' in window) {
|
||
const observer = new IntersectionObserver(
|
||
(entries) => {
|
||
if (entries.some((entry) => entry.isIntersecting)) {
|
||
observer.disconnect();
|
||
initForm();
|
||
}
|
||
},
|
||
{ rootMargin: '600px' }
|
||
);
|
||
observer.observe(formEl);
|
||
} else {
|
||
initForm();
|
||
}
|
||
})();
|
||
})();</script> </div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="footer__column">
|
||
<h3 class="footer__column-title" id="footer-second-marketplaces" itemprop="name">Marketplaces</h3>
|
||
|
||
<ul class="footer__items" aria-labelledby="footer-second-marketplaces">
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://marketplace.microsoft.com/en-us/product/saas/octopusdeployptyltd1664464418055.octopus_cloud_saas_offer?tab=overview"
|
||
target="_blank"
|
||
rel="noopener noreferrer"
|
||
aria-label="Azure marketplace (opens in new tab)"
|
||
itemprop="url">
|
||
<span class="footer__item-image" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/43x43/01bd95458d/azure-marketplace-logo.png/m/fit-in/1200x0/filters:quality(85):format(webp)" alt="Azure marketplace logo" loading="lazy" width="43" height="43" srcset="https://a.storyblok.com/f/185929/43x43/01bd95458d/azure-marketplace-logo.png/m/fit-in/400x0/filters:quality(85):format(webp) 400w, https://a.storyblok.com/f/185929/43x43/01bd95458d/azure-marketplace-logo.png/m/fit-in/600x0/filters:quality(85):format(webp) 600w, https://a.storyblok.com/f/185929/43x43/01bd95458d/azure-marketplace-logo.png/m/fit-in/800x0/filters:quality(85):format(webp) 800w, https://a.storyblok.com/f/185929/43x43/01bd95458d/azure-marketplace-logo.png/m/fit-in/1200x0/filters:quality(85):format(webp) 1200w, https://a.storyblok.com/f/185929/43x43/01bd95458d/azure-marketplace-logo.png/m/fit-in/1600x0/filters:quality(85):format(webp) 1600w, https://a.storyblok.com/f/185929/43x43/01bd95458d/azure-marketplace-logo.png/m/fit-in/2000x0/filters:quality(85):format(webp) 2000w" sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 70vw" />
|
||
</span>
|
||
|
||
</span>
|
||
<span class="footer__item-label" itemprop="name">
|
||
Azure marketplace
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://aws.amazon.com/marketplace/pp/prodview-rsv6rann3nbsu?sr=0-2&ref_=beagle&applicationId=AWSMPContessa"
|
||
target="_blank"
|
||
rel="noopener noreferrer"
|
||
aria-label="AWS marketplace (opens in new tab)"
|
||
itemprop="url">
|
||
<span class="footer__item-image" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/1500x1200/8959e687b4/aws-white.webp/m/fit-in/1200x0/filters:quality(85):format(webp)" alt="AWS logo with bold white letters "aws" and an orange curved arrow below on a black background." loading="lazy" width="1500" height="1200" srcset="https://a.storyblok.com/f/185929/1500x1200/8959e687b4/aws-white.webp/m/fit-in/400x0/filters:quality(85):format(webp) 400w, https://a.storyblok.com/f/185929/1500x1200/8959e687b4/aws-white.webp/m/fit-in/600x0/filters:quality(85):format(webp) 600w, https://a.storyblok.com/f/185929/1500x1200/8959e687b4/aws-white.webp/m/fit-in/800x0/filters:quality(85):format(webp) 800w, https://a.storyblok.com/f/185929/1500x1200/8959e687b4/aws-white.webp/m/fit-in/1200x0/filters:quality(85):format(webp) 1200w, https://a.storyblok.com/f/185929/1500x1200/8959e687b4/aws-white.webp/m/fit-in/1600x0/filters:quality(85):format(webp) 1600w, https://a.storyblok.com/f/185929/1500x1200/8959e687b4/aws-white.webp/m/fit-in/2000x0/filters:quality(85):format(webp) 2000w" sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 70vw" />
|
||
</span>
|
||
|
||
</span>
|
||
<span class="footer__item-label" itemprop="name">
|
||
AWS marketplace
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="footer__row footer__row--third" aria-label="Legal and social media">
|
||
<div class="footer__column">
|
||
|
||
<ul class="footer__items"
|
||
aria-labelledby="footer-third-">
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<span class="footer__item-image" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/150x150/61efa58c5f/octopus-blue-logo.svg" alt="Octopus blue logo" loading="lazy" width="150" height="150" />
|
||
</span>
|
||
|
||
</span>
|
||
<span class="footer__item-label">© 2026 Octopus Deploy</span>
|
||
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="footer__column">
|
||
|
||
<ul class="footer__items"
|
||
aria-labelledby="footer-third-">
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://octopus.com/legal/privacy"
|
||
aria-label="Privacy Policy"
|
||
itemprop="url">
|
||
<span class="footer__item-label" itemprop="name">
|
||
Privacy Policy
|
||
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://octopus.com/legal/gdpr"
|
||
aria-label="GDPR"
|
||
itemprop="url">
|
||
<span class="footer__item-label" itemprop="name">
|
||
GDPR
|
||
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://octopus.com/legal/customer-agreement"
|
||
aria-label="Terms"
|
||
itemprop="url">
|
||
<span class="footer__item-label" itemprop="name">
|
||
Terms
|
||
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://status.octopus.com/"
|
||
rel="noopener noreferrer"
|
||
aria-label="Status (opens in new tab)"
|
||
itemprop="url">
|
||
<span class="footer__item-label" itemprop="name">
|
||
Status
|
||
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="footer__column">
|
||
|
||
<ul class="footer__items"
|
||
aria-labelledby="footer-third-">
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://octopus.com/company/trust"
|
||
aria-label="Image link"
|
||
itemprop="url">
|
||
<span class="footer__item-image" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/121x28/f5e12a77a5/soc2-1.png/m/fit-in/1200x0/filters:quality(85):format(webp)" alt="SOC 2 Type II compliance" loading="lazy" width="121" height="28" srcset="https://a.storyblok.com/f/185929/121x28/f5e12a77a5/soc2-1.png/m/fit-in/400x0/filters:quality(85):format(webp) 400w, https://a.storyblok.com/f/185929/121x28/f5e12a77a5/soc2-1.png/m/fit-in/600x0/filters:quality(85):format(webp) 600w, https://a.storyblok.com/f/185929/121x28/f5e12a77a5/soc2-1.png/m/fit-in/800x0/filters:quality(85):format(webp) 800w, https://a.storyblok.com/f/185929/121x28/f5e12a77a5/soc2-1.png/m/fit-in/1200x0/filters:quality(85):format(webp) 1200w, https://a.storyblok.com/f/185929/121x28/f5e12a77a5/soc2-1.png/m/fit-in/1600x0/filters:quality(85):format(webp) 1600w, https://a.storyblok.com/f/185929/121x28/f5e12a77a5/soc2-1.png/m/fit-in/2000x0/filters:quality(85):format(webp) 2000w" sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 70vw" />
|
||
</span>
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://octopus.com/support/enterprise-argo-support"
|
||
aria-label="Image link"
|
||
itemprop="url">
|
||
<span class="footer__item-image" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/81x46/95d9bb1ded/property-1-argo-logo-color.png/m/fit-in/1200x0/filters:quality(85):format(webp)" alt="Argo logo" loading="lazy" width="81" height="46" srcset="https://a.storyblok.com/f/185929/81x46/95d9bb1ded/property-1-argo-logo-color.png/m/fit-in/400x0/filters:quality(85):format(webp) 400w, https://a.storyblok.com/f/185929/81x46/95d9bb1ded/property-1-argo-logo-color.png/m/fit-in/600x0/filters:quality(85):format(webp) 600w, https://a.storyblok.com/f/185929/81x46/95d9bb1ded/property-1-argo-logo-color.png/m/fit-in/800x0/filters:quality(85):format(webp) 800w, https://a.storyblok.com/f/185929/81x46/95d9bb1ded/property-1-argo-logo-color.png/m/fit-in/1200x0/filters:quality(85):format(webp) 1200w, https://a.storyblok.com/f/185929/81x46/95d9bb1ded/property-1-argo-logo-color.png/m/fit-in/1600x0/filters:quality(85):format(webp) 1600w, https://a.storyblok.com/f/185929/81x46/95d9bb1ded/property-1-argo-logo-color.png/m/fit-in/2000x0/filters:quality(85):format(webp) 2000w" sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 70vw" />
|
||
</span>
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="footer__column">
|
||
|
||
<ul class="footer__items"
|
||
aria-labelledby="footer-third-">
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://x.com/OctopusDeploy"
|
||
target="_blank"
|
||
rel="noopener noreferrer"
|
||
aria-label="Image link"
|
||
itemprop="url">
|
||
<span class="footer__item-image" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/35x35/6f5c80f250/x-logo.png/m/fit-in/1200x0/filters:quality(85):format(webp)" alt="X logo" loading="lazy" width="35" height="35" srcset="https://a.storyblok.com/f/185929/35x35/6f5c80f250/x-logo.png/m/fit-in/400x0/filters:quality(85):format(webp) 400w, https://a.storyblok.com/f/185929/35x35/6f5c80f250/x-logo.png/m/fit-in/600x0/filters:quality(85):format(webp) 600w, https://a.storyblok.com/f/185929/35x35/6f5c80f250/x-logo.png/m/fit-in/800x0/filters:quality(85):format(webp) 800w, https://a.storyblok.com/f/185929/35x35/6f5c80f250/x-logo.png/m/fit-in/1200x0/filters:quality(85):format(webp) 1200w, https://a.storyblok.com/f/185929/35x35/6f5c80f250/x-logo.png/m/fit-in/1600x0/filters:quality(85):format(webp) 1600w, https://a.storyblok.com/f/185929/35x35/6f5c80f250/x-logo.png/m/fit-in/2000x0/filters:quality(85):format(webp) 2000w" sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 70vw" />
|
||
</span>
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://www.linkedin.com/company/octopus-deploy"
|
||
target="_blank"
|
||
rel="noopener noreferrer"
|
||
aria-label="Image link"
|
||
itemprop="url">
|
||
<span class="footer__item-image" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/35x35/d628eb60c7/linkedin-logo.png/m/fit-in/1200x0/filters:quality(85):format(webp)" alt="LinkedIn logo" loading="lazy" width="35" height="35" srcset="https://a.storyblok.com/f/185929/35x35/d628eb60c7/linkedin-logo.png/m/fit-in/400x0/filters:quality(85):format(webp) 400w, https://a.storyblok.com/f/185929/35x35/d628eb60c7/linkedin-logo.png/m/fit-in/600x0/filters:quality(85):format(webp) 600w, https://a.storyblok.com/f/185929/35x35/d628eb60c7/linkedin-logo.png/m/fit-in/800x0/filters:quality(85):format(webp) 800w, https://a.storyblok.com/f/185929/35x35/d628eb60c7/linkedin-logo.png/m/fit-in/1200x0/filters:quality(85):format(webp) 1200w, https://a.storyblok.com/f/185929/35x35/d628eb60c7/linkedin-logo.png/m/fit-in/1600x0/filters:quality(85):format(webp) 1600w, https://a.storyblok.com/f/185929/35x35/d628eb60c7/linkedin-logo.png/m/fit-in/2000x0/filters:quality(85):format(webp) 2000w" sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 70vw" />
|
||
</span>
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://github.com/OctopusDeploy"
|
||
target="_blank"
|
||
rel="noopener noreferrer"
|
||
aria-label="Image link"
|
||
itemprop="url">
|
||
<span class="footer__item-image" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/35x35/6d993f391c/github-logo.png/m/fit-in/1200x0/filters:quality(85):format(webp)" alt="GitHub logo" loading="lazy" width="35" height="35" srcset="https://a.storyblok.com/f/185929/35x35/6d993f391c/github-logo.png/m/fit-in/400x0/filters:quality(85):format(webp) 400w, https://a.storyblok.com/f/185929/35x35/6d993f391c/github-logo.png/m/fit-in/600x0/filters:quality(85):format(webp) 600w, https://a.storyblok.com/f/185929/35x35/6d993f391c/github-logo.png/m/fit-in/800x0/filters:quality(85):format(webp) 800w, https://a.storyblok.com/f/185929/35x35/6d993f391c/github-logo.png/m/fit-in/1200x0/filters:quality(85):format(webp) 1200w, https://a.storyblok.com/f/185929/35x35/6d993f391c/github-logo.png/m/fit-in/1600x0/filters:quality(85):format(webp) 1600w, https://a.storyblok.com/f/185929/35x35/6d993f391c/github-logo.png/m/fit-in/2000x0/filters:quality(85):format(webp) 2000w" sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 70vw" />
|
||
</span>
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
<li class="footer__item">
|
||
|
||
|
||
|
||
<a class="footer__item-link"
|
||
href="https://www.youtube.com/c/Octopusdeploy"
|
||
rel="noopener noreferrer"
|
||
aria-label="Image link"
|
||
itemprop="url">
|
||
<span class="footer__item-image" aria-hidden="true">
|
||
|
||
|
||
|
||
|
||
<span class="image-wrapper">
|
||
<img src="https://a.storyblok.com/f/185929/35x35/944072d610/youtube-logo.png/m/fit-in/1200x0/filters:quality(85):format(webp)" alt="YouTube logo" loading="lazy" width="35" height="35" srcset="https://a.storyblok.com/f/185929/35x35/944072d610/youtube-logo.png/m/fit-in/400x0/filters:quality(85):format(webp) 400w, https://a.storyblok.com/f/185929/35x35/944072d610/youtube-logo.png/m/fit-in/600x0/filters:quality(85):format(webp) 600w, https://a.storyblok.com/f/185929/35x35/944072d610/youtube-logo.png/m/fit-in/800x0/filters:quality(85):format(webp) 800w, https://a.storyblok.com/f/185929/35x35/944072d610/youtube-logo.png/m/fit-in/1200x0/filters:quality(85):format(webp) 1200w, https://a.storyblok.com/f/185929/35x35/944072d610/youtube-logo.png/m/fit-in/1600x0/filters:quality(85):format(webp) 1600w, https://a.storyblok.com/f/185929/35x35/944072d610/youtube-logo.png/m/fit-in/2000x0/filters:quality(85):format(webp) 2000w" sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 70vw" />
|
||
</span>
|
||
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
</footer>
|
||
</div> <script>(function(){const site_url = "https://octopus.com";
|
||
const site_features = {"stickyNav":{"top":75.2},"codeBlocks":["copy"],"figures":["enlarge"],"youTubeLinks":["embed"],"headers":["link"],"details":["tabs"],"search":["dialog"]};
|
||
|
||
window.site_url = site_url;
|
||
window.site_features = site_features;
|
||
})();</script><script src="/blog/js/main.js" type="module" async></script><script>
|
||
document.addEventListener('searched', (e) => {
|
||
if (typeof plausible != 'undefined') {
|
||
plausible('Search', { props: e.detail });
|
||
}
|
||
});
|
||
</script> <script defer src="https://octopus.com/octopus-public/assets/navbarPU.js"></script> <script defer src="https://octopus.com/octopus-public/assets/buttonHoverEffect.js"></script> </body> </html> |