Files
nexus/sreweekly/articles/394/05-a-brief-incomplete-and-mostly-wrong-devops-glossary.html
2026-09-12 17:23:01 +08:00

1602 lines
78 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8" />
<link rel="icon" type="image/png" href="/blog/assets/images/favicon.png" />
<!-- begin _includes/seo.html -->
<title>A Brief, Incomplete and Mostly Wrong Devops Glossary - Earthly Blog</title>
<meta name="description" content="This article provides a humorous and satirical glossary of terms related to DevOps, highlighting the realities and quirks of the field. It offers a...">
<meta name="author" content="Adam Gordon Bell">
<meta property="article:author" content="Adam Gordon Bell">
<meta property="og:type" content="article">
<meta property="og:locale" content="en_US">
<meta property="og:site_name" content="Earthly Blog">
<meta property="og:title" content="A Brief, Incomplete and Mostly Wrong Devops Glossary">
<meta property="og:url" content="https://earthly.dev/blog/devops-glossary/">
<meta property="og:description" content="This article provides a humorous and satirical glossary of terms related to DevOps, highlighting the realities and quirks of the field. It offers a...">
<meta property="og:image" content="https://earthly.dev/.netlify/images?url=/blog/assets/images/devops-glossary/header.jpg&w=800">
<meta name="twitter:site" content="@EarthlyTech">
<meta property="twitter:domain" content="earthly.dev">
<meta name="twitter:title" content="A Brief, Incomplete and Mostly Wrong Devops Glossary">
<meta name="twitter:description" content="This article provides a humorous and satirical glossary of terms related to DevOps, highlighting the realities and quirks of the field. It offers a...">
<meta name="twitter:url" content="https://earthly.dev/blog/devops-glossary/">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://earthly.dev/.netlify/images?url=/blog/assets/images/devops-glossary/header.jpg&w=800">
<meta name="twitter:creator" content="@adamgordonbell">
<meta property="article:published_time" content="2023-09-24T00:00:00-04:00">
<meta property="article:modified_time" content="2023-10-06T00:00:00-04:00">
<link rel="canonical" href="https://earthly.dev/blog/devops-glossary/">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"url": "https://earthly.dev/blog/",
"logo": "https://earthly.dev/svg/twitter-card-large.svg"
}
</script>
<!-- end _includes/seo.html -->
<!-- Pre Connect to domains -->
<link rel="preconnect" href="https://connect.facebook.net" />
<link rel="preconnect" href="https://static.ads-twitter.com" />
<link rel="preconnect" href="https://www.google-analytics.com" />
<link rel="dns-prefetch" href="https://js-na2.hs-scripts.com" />
<link rel="preconnect" href="https://t.co" />
<link rel="preconnect" href="https://www.facebook.com" />
<link rel="preconnect" href="https://stats.g.doubleclick.net" />
<link rel="preconnect" href="https://www.google.com" />
<link rel="preconnect" href="https://analytics.twitter.com" />
<!-- https://t.co/dKP3o1e -->
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script>
document.documentElement.className =
document.documentElement.className.replace(/\bno-js\b/g, "") + " js ";
</script>
<!-- For all browsers -->
<link rel="stylesheet" href="/blog/assets/css/main.css?v=2" />
<link rel="stylesheet" href="/blog/assets/css/typopgraphy-v2.css" />
<link rel="stylesheet" href="/blog/assets/css/base.css?v=2" />
<script src="/blog/assets/js/jquery-3.5.1.min.js"></script>
<script src="/blog/assets/js/button.js"></script>
<script src="/blog/assets/js/clipboard.js"></script>
<script>
!function () {
if (!window.analytics) {
window.analytics=[]
window.analytics.track = function () {}
window.analytics.identify = function () {}
}
}();
</script>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-PCTLFY8D5C"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-PCTLFY8D5C');
</script>
<!-- Start of HubSpot Embed Code -->
<script type="text/javascript" id="hs-script-loader" async defer src="//js-na2.hs-scripts.com/244313768.js"></script>
<!-- End of HubSpot Embed Code -->
<!-- Fathom - beautiful, simple website analytics -->
<script src="https://cdn.usefathom.com/script.js" data-site="GJKNNBDT" defer></script>
<!-- / Fathom -->
<script>
function doOnDocumentLoaded() {
// Get the button
let mybutton = document.getElementById('scroll-button');
if (!mybutton) return;
console.log(mybutton);
// When the user scrolls down 20px from the top of the document, show the button
window.onscroll = function () {
scrollFunction();
};
function scrollFunction() {
if (document.body.scrollTop > 300 || document.documentElement.scrollTop > 300) {
mybutton.style.display = 'block';
} else {
mybutton.style.display = 'none';
}
}
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', doOnDocumentLoaded);
} else {
doOnDocumentLoaded();
}
function toggleSeriesContent() {
var dropdownList = document.getElementById('dropdown-list')
var dropdownIcon = document.getElementById('dropdown-icon')
if (dropdownList.classList.contains('hidden')) {
dropdownList.classList.remove('hidden')
dropdownIcon.style.transform = 'rotate(180deg)'
} else {
dropdownList.classList.add('hidden')
dropdownIcon.style.transform = 'rotate(0deg)'
}
}
function toggleToc() {
var tocDropdownList = document.getElementById('toc-dropdown-list')
var tocDropdownIcon = document.getElementById('toc-dropdown-icon')
if (tocDropdownList.classList.contains('hidden')) {
tocDropdownList.classList.remove('hidden')
tocDropdownIcon.style.transform = 'rotate(180deg)'
} else {
tocDropdownList.classList.add('hidden')
tocDropdownIcon.style.transform = 'rotate(0deg)'
}
}
</script>
</head>
<body
class="layout--single">
<a name="top"></a>
<header class="z-50 w-full top-0 left-0 bg-white shadow-sm shadow-black/10 sticky">
<div class="announcement-banner text-sm">
<div class="hidden sm:block"><b>Earthly Lunar:</b> Your Guardrails, Everywhere. Turn postmortems into automated PR-level guardrails. <a href="/" onclick="bannerLinkClick()">Learn More</a>.</div>
<div class="sm:hidden"><b>Earthly Lunar:</b> Your Guardrails, Everywhere. <a href="/" onclick="bannerLinkClick()">Learn More</a>.</div>
</div>
<script>
function bannerLinkClick() {
analytics.track('banner-link-click', {
category: 'Banner Link Click',
label: 'banner-link-click'
});
}
</script>
<div class="flex lg:px-[40px] py-[24px]">
<div class="siteHeader-logoAndMenuButton pl-6">
<a onclick="navEarthlyLogoClick()" class="siteHeader-logoLink" href="/">
<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="svg2" inkscape:export-filename="/home/vlad/workspace/logo/test2.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" inkscape:version="1.0.1 (c497b03c, 2020-09-10)" sodipodi:docname="white-logo.svg" x="0px" y="0px" viewBox="0 0 901 298" style="enable-background:new 0 0 901 298;" xml:space="preserve" class="w-full h-[44px] block object-contain">
<style type="text/css">
.st0{fill:#83FF50;stroke:#83FF50;stroke-width:1;stroke-miterlimit:5.3333;}
.st1{opacity:0.83;clip-path:url(#SVGID_00000080895763411143063620000003946941406721728898_);}
.st2{fill:#96FF5B;fill-opacity:0.6471;}
.st3{fill:#FFFFFF;}
.st4{fill:#00D6FF;stroke:#00D6FF;stroke-width:1;stroke-miterlimit:5.3333;}
.st5{fill:#7DFFFF;stroke:#7DFFFF;stroke-width:1;stroke-miterlimit:5.3333;}
.st6{fill:#32E6FF;stroke:#32E6FF;stroke-width:1;stroke-miterlimit:5.3333;}
.st7{opacity:0.86;clip-path:url(#SVGID_00000122682779506278355710000011518640239278589079_);}
.st8{fill:#00D5FF;fill-opacity:0.5451;}
.st9{fill:#20E6FF;stroke:#20E6FF;stroke-width:1;stroke-miterlimit:5.3333;}
.st10{fill:#2AF0FF;stroke:#2AF0FF;stroke-width:1;stroke-miterlimit:5.3333;}
.st11{opacity:0.95;clip-path:url(#SVGID_00000067935788216487674460000017756686234451421835_);}
.st12{fill:#29EFFF;fill-opacity:0.8;}
.st13{fill:#32F8B9;stroke:#32F8B9;stroke-width:1;stroke-miterlimit:5.3333;}
.st14{opacity:0.85;clip-path:url(#SVGID_00000162337586531770572300000000167629634986491300_);}
.st15{fill:#32F6B8;fill-opacity:0.5647;}
.st16{fill:#090909;}
</style>
<g id="g10" transform="matrix(1.3333333,0,0,-1.3333333,0,1333.3333)" inkscape:groupmode="layer" inkscape:label="Earthly white bg">
<g id="g12" transform="translate(30.349812,938.92202)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path14" inkscape:connector-curvature="0" class="st0" d="M118,0L88.5-51.2h-0.2L59.1-0.5L118,0z"/>
</g>
<g>
<g id="g18" transform="translate(-450.86849,387.30675)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<g id="g24">
<g id="g26">
</g>
<g id="g38">
<g>
<defs>
<rect id="SVGID_1_" x="460.9" y="542.4" width="158.4" height="69.7"/>
</defs>
<clipPath id="SVGID_00000174578530605239856790000016492496000338511018_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<g id="g36" style="opacity:0.83;clip-path:url(#SVGID_00000174578530605239856790000016492496000338511018_);">
<g id="g34" transform="translate(481.4741,551.9014)">
<path id="path32" inkscape:connector-curvature="0" class="st2" d="M118,0l-0.1-0.2h-0.1l0-0.1l-59-0.5l0,0.1H-0.3L-0.7,0 L29,51.4h59.4L118,0z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g id="g40" transform="translate(30.485012,938.99722)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path42" inkscape:connector-curvature="0" class="st3" d="M118,0L118,0L88.5-51.2h-0.1l29.5,51.2L118,0L118,0z"/>
</g>
<g id="g44" transform="translate(1.0187102,887.05882)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path46" inkscape:connector-curvature="0" class="st4" d="M118,0l-0.1-0.2L88.3-51.4v0H29L-0.7,0L29,51.4h0.3L58.5,0.7 h59.1L118,0z"/>
</g>
<g id="g48" transform="translate(0.60761022,887.76582)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path50" inkscape:connector-curvature="0" class="st5" d="M118,0H59L29.7,50.7h59.1L118,0z"/>
</g>
<g id="g52" transform="translate(30.786312,836.92502)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path54" inkscape:connector-curvature="0" class="st6" d="M118,0l0.5-0.8h-0.9L95.1-1L58.6-1.3l29.6,51.2h58.7L118,0z"/>
</g>
<g id="g56" transform="translate(-450.86849,387.30675)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<g>
<g id="g58">
<g id="g64">
<g id="g66">
</g>
<g id="g78">
<g>
<defs>
<rect id="SVGID_00000113349542533246887100000016756461507466418367_" x="525" y="379.5" width="119.9" height="137.2"/>
</defs>
<clipPath id="SVGID_00000052812051687137078050000006255378118721314435_">
<use xlink:href="#SVGID_00000113349542533246887100000016756461507466418367_" style="overflow:visible;"/>
</clipPath>
<g id="g76" style="opacity:0.86;clip-path:url(#SVGID_00000052812051687137078050000006255378118721314435_);">
<g id="g74" transform="translate(511.9336,398.1758)">
<path id="path72" inkscape:connector-curvature="0" class="st8" d="M118,0l-0.9-1.5H57.8L28.1,49.9l0.1,0.2v0l29.6,51.2 h0.1L28.3,50.2l36.5,0.3l22.6,0.2h0.9L117.4,0H118z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g id="g80" transform="translate(30.786312,836.92502)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path82" inkscape:connector-curvature="0" class="st9" d="M118,0l0.5-0.8h-0.9L88.4,49.9h58.5L118,0z"/>
</g>
<g id="g84" transform="translate(89.478712,836.12812)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path86" inkscape:connector-curvature="0" class="st10" d="M118,0H59.8l-0.5,0.8l28.8,49.9h0.6L118,0z"/>
</g>
<g id="g88" transform="translate(-450.86849,387.30675)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<g>
<g id="g90">
<g id="g96">
<g id="g98">
</g>
<g id="g110">
<g>
<defs>
<rect id="SVGID_00000083069750939687145980000010640198437501922177_" x="590.4" y="389.7" width="78.2" height="67.5"/>
</defs>
<clipPath id="SVGID_00000070800203215072149570000016036056325378891696_">
<use xlink:href="#SVGID_00000083069750939687145980000010640198437501922177_" style="overflow:visible;"/>
</clipPath>
<g id="g108" style="opacity:0.95;clip-path:url(#SVGID_00000070800203215072149570000016036056325378891696_);">
<g id="g106" transform="translate(540.7529,448.1143)">
<path id="path104" inkscape:connector-curvature="0" class="st12" d="M118,0L89.2-49.9h-0.6L59.4,0.7h58.2L118,0z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g id="g112" transform="translate(119.47131,887.55482)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path114" inkscape:connector-curvature="0" class="st13" d="M118,0L88.3-51.4H88L58.8-0.7H-0.3L-0.7,0l0.1,0.2l29.5,51.2 l0,0.1h59.4l29.2-50.6L118,0z"/>
</g>
<g id="g116" transform="translate(-450.86849,387.30675)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<g>
<g id="g118">
<g id="g124">
<g id="g126">
</g>
<g id="g138">
<g>
<defs>
<rect id="SVGID_00000118398134125535155890000007193991426162861722_" x="614.2" y="379.5" width="118.7" height="138.1"/>
</defs>
<clipPath id="SVGID_00000031928815844511343390000001499846702564364928_">
<use xlink:href="#SVGID_00000118398134125535155890000007193991426162861722_" style="overflow:visible;"/>
</clipPath>
<g id="g136" style="opacity:0.85;clip-path:url(#SVGID_00000031928815844511343390000001499846702564364928_);">
<g id="g134" transform="translate(599.9912,448.8926)">
<path id="path132" inkscape:connector-curvature="0" class="st15" d="M118,0L88.3-51.4L29-52.2L58.4-1.5L58-0.8h0.3 L88,50.6l-0.5,0.8h0.9L118,0z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g id="g140" transform="matrix(1.5550309,0,0,1.5550309,186.55413,840.47647)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path142" inkscape:connector-curvature="0" class="st16" d="M75.9,0v60.5h25.9v-9.2H85V34.8h12.3v-9.2H85V9.2h16.8V0 H75.9z"/>
</g>
<g id="g144" transform="matrix(1.5550309,0,0,1.5550309,262.29502,912.91898)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path146" inkscape:connector-curvature="0" class="st16" d="M75.9,0l-3.4-23.8h6.8L75.9,0z M71.1-32.7l-2.2-13.9h-9.5 l10.3,60.4h12.5l10.1-60.4h-9.6l-2.1,13.9H71.1z"/>
</g>
<g id="g156" transform="matrix(1.5550309,0,0,1.5550309,330.61001,911.79376)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path158" inkscape:connector-curvature="0" class="st16" d="M75.9,0c0,3.5-1.7,5.3-5.2,5.3h-5.5v-19.3h5.5 c1.4,0,2.7,0.5,3.7,1.5c1,1,1.5,2.3,1.5,3.7V0z M70.5,14.6c5.1,0,8.8-1.4,11.2-4.2c2.1-2.4,3.1-5.9,3.1-10.2v-8.8 c0-4.3-1.6-7.9-4.9-10.9l6.8-26.4h-9.9l-5.5,22.8h-0.8h-5.3v-22.8h-9.1v60.4H70.5z"/>
</g>
<g id="g160" transform="matrix(1.5550309,0,0,1.5550309,369.90501,920.1931)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path162" inkscape:connector-curvature="0" class="st16" d="M75.9,0h-9.7v9.2h28.5V0H85v-51.3h-9.1V0z"/>
</g>
<g id="g164" transform="matrix(1.5550309,0,0,1.5550309,424.64692,880.29676)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path166" inkscape:connector-curvature="0" class="st16" d="M75.9,0v-25.6h-9.1v60.4h9.1V9.2h11v25.7H96v-60.4h-9.1V0 H75.9z"/>
</g>
<g id="g168" transform="matrix(1.5550309,0,0,1.5550309,507.21237,840.47647)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path170" inkscape:connector-curvature="0" class="st16" d="M75.9,0H51.1v60.4h9.1V9.1h15.7V0z"/>
</g>
<g id="g172" transform="matrix(1.5550309,0,0,1.5550309,518.3862,879.84736)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path174" inkscape:connector-curvature="0" class="st16" d="M75.9,0L63.7,35.2h10l6.8-21.7l6.7,21.7h10.1L85,0v-25.3 h-9.1V0z"/>
</g>
</g>
</svg>
</a>
</div>
<nav class="header-nav flex flex-1 justify-end">
<div><div class="flex lg:hidden justify-end items-center w-full h-full bg-white">
<script defer>
(function () {
$(document).ready(function () {
$('.show-menu-mobile').click(function () {
$('.mobile-nav-menu').show();
});
$('.hide-menu-mobile').click(function () {
$('.mobile-nav-menu').hide();
});
})
})();
</script>
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"
class="w-12 h-12 mr-8 show-menu-mobile">
<path stroke-linecap="round" stroke-linejoin="round" d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5" />
</svg>
<div
class="flex-col justify-start items-center border-10 hidden mobile-nav-menu fixed top-1 right-0 left-0 h-full w-full bg-white ml-0 mt-0 px-10 py-2 border rounded-xl overflow-auto">
<div class="flex w-full">
<div class="siteHeader-logoAndMenuButton flex w-full justify-start pb-6">
<a onclick="navMobileEarthlyLogoClick()" class="siteHeader-logoLink " href="/">
<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="svg2" inkscape:export-filename="/home/vlad/workspace/logo/test2.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" inkscape:version="1.0.1 (c497b03c, 2020-09-10)" sodipodi:docname="white-logo.svg" x="0px" y="0px" viewBox="0 0 901 298" style="enable-background:new 0 0 901 298;" xml:space="preserve" class="w-full h-[44px] block object-contain">
<style type="text/css">
.st0{fill:#83FF50;stroke:#83FF50;stroke-width:1;stroke-miterlimit:5.3333;}
.st1{opacity:0.83;clip-path:url(#SVGID_00000080895763411143063620000003946941406721728898_);}
.st2{fill:#96FF5B;fill-opacity:0.6471;}
.st3{fill:#FFFFFF;}
.st4{fill:#00D6FF;stroke:#00D6FF;stroke-width:1;stroke-miterlimit:5.3333;}
.st5{fill:#7DFFFF;stroke:#7DFFFF;stroke-width:1;stroke-miterlimit:5.3333;}
.st6{fill:#32E6FF;stroke:#32E6FF;stroke-width:1;stroke-miterlimit:5.3333;}
.st7{opacity:0.86;clip-path:url(#SVGID_00000122682779506278355710000011518640239278589079_);}
.st8{fill:#00D5FF;fill-opacity:0.5451;}
.st9{fill:#20E6FF;stroke:#20E6FF;stroke-width:1;stroke-miterlimit:5.3333;}
.st10{fill:#2AF0FF;stroke:#2AF0FF;stroke-width:1;stroke-miterlimit:5.3333;}
.st11{opacity:0.95;clip-path:url(#SVGID_00000067935788216487674460000017756686234451421835_);}
.st12{fill:#29EFFF;fill-opacity:0.8;}
.st13{fill:#32F8B9;stroke:#32F8B9;stroke-width:1;stroke-miterlimit:5.3333;}
.st14{opacity:0.85;clip-path:url(#SVGID_00000162337586531770572300000000167629634986491300_);}
.st15{fill:#32F6B8;fill-opacity:0.5647;}
.st16{fill:#090909;}
</style>
<g id="g10" transform="matrix(1.3333333,0,0,-1.3333333,0,1333.3333)" inkscape:groupmode="layer" inkscape:label="Earthly white bg">
<g id="g12" transform="translate(30.349812,938.92202)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path14" inkscape:connector-curvature="0" class="st0" d="M118,0L88.5-51.2h-0.2L59.1-0.5L118,0z"/>
</g>
<g>
<g id="g18" transform="translate(-450.86849,387.30675)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<g id="g24">
<g id="g26">
</g>
<g id="g38">
<g>
<defs>
<rect id="SVGID_1_" x="460.9" y="542.4" width="158.4" height="69.7"/>
</defs>
<clipPath id="SVGID_00000174578530605239856790000016492496000338511018_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<g id="g36" style="opacity:0.83;clip-path:url(#SVGID_00000174578530605239856790000016492496000338511018_);">
<g id="g34" transform="translate(481.4741,551.9014)">
<path id="path32" inkscape:connector-curvature="0" class="st2" d="M118,0l-0.1-0.2h-0.1l0-0.1l-59-0.5l0,0.1H-0.3L-0.7,0 L29,51.4h59.4L118,0z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g id="g40" transform="translate(30.485012,938.99722)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path42" inkscape:connector-curvature="0" class="st3" d="M118,0L118,0L88.5-51.2h-0.1l29.5,51.2L118,0L118,0z"/>
</g>
<g id="g44" transform="translate(1.0187102,887.05882)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path46" inkscape:connector-curvature="0" class="st4" d="M118,0l-0.1-0.2L88.3-51.4v0H29L-0.7,0L29,51.4h0.3L58.5,0.7 h59.1L118,0z"/>
</g>
<g id="g48" transform="translate(0.60761022,887.76582)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path50" inkscape:connector-curvature="0" class="st5" d="M118,0H59L29.7,50.7h59.1L118,0z"/>
</g>
<g id="g52" transform="translate(30.786312,836.92502)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path54" inkscape:connector-curvature="0" class="st6" d="M118,0l0.5-0.8h-0.9L95.1-1L58.6-1.3l29.6,51.2h58.7L118,0z"/>
</g>
<g id="g56" transform="translate(-450.86849,387.30675)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<g>
<g id="g58">
<g id="g64">
<g id="g66">
</g>
<g id="g78">
<g>
<defs>
<rect id="SVGID_00000113349542533246887100000016756461507466418367_" x="525" y="379.5" width="119.9" height="137.2"/>
</defs>
<clipPath id="SVGID_00000052812051687137078050000006255378118721314435_">
<use xlink:href="#SVGID_00000113349542533246887100000016756461507466418367_" style="overflow:visible;"/>
</clipPath>
<g id="g76" style="opacity:0.86;clip-path:url(#SVGID_00000052812051687137078050000006255378118721314435_);">
<g id="g74" transform="translate(511.9336,398.1758)">
<path id="path72" inkscape:connector-curvature="0" class="st8" d="M118,0l-0.9-1.5H57.8L28.1,49.9l0.1,0.2v0l29.6,51.2 h0.1L28.3,50.2l36.5,0.3l22.6,0.2h0.9L117.4,0H118z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g id="g80" transform="translate(30.786312,836.92502)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path82" inkscape:connector-curvature="0" class="st9" d="M118,0l0.5-0.8h-0.9L88.4,49.9h58.5L118,0z"/>
</g>
<g id="g84" transform="translate(89.478712,836.12812)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path86" inkscape:connector-curvature="0" class="st10" d="M118,0H59.8l-0.5,0.8l28.8,49.9h0.6L118,0z"/>
</g>
<g id="g88" transform="translate(-450.86849,387.30675)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<g>
<g id="g90">
<g id="g96">
<g id="g98">
</g>
<g id="g110">
<g>
<defs>
<rect id="SVGID_00000083069750939687145980000010640198437501922177_" x="590.4" y="389.7" width="78.2" height="67.5"/>
</defs>
<clipPath id="SVGID_00000070800203215072149570000016036056325378891696_">
<use xlink:href="#SVGID_00000083069750939687145980000010640198437501922177_" style="overflow:visible;"/>
</clipPath>
<g id="g108" style="opacity:0.95;clip-path:url(#SVGID_00000070800203215072149570000016036056325378891696_);">
<g id="g106" transform="translate(540.7529,448.1143)">
<path id="path104" inkscape:connector-curvature="0" class="st12" d="M118,0L89.2-49.9h-0.6L59.4,0.7h58.2L118,0z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g id="g112" transform="translate(119.47131,887.55482)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path114" inkscape:connector-curvature="0" class="st13" d="M118,0L88.3-51.4H88L58.8-0.7H-0.3L-0.7,0l0.1,0.2l29.5,51.2 l0,0.1h59.4l29.2-50.6L118,0z"/>
</g>
<g id="g116" transform="translate(-450.86849,387.30675)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<g>
<g id="g118">
<g id="g124">
<g id="g126">
</g>
<g id="g138">
<g>
<defs>
<rect id="SVGID_00000118398134125535155890000007193991426162861722_" x="614.2" y="379.5" width="118.7" height="138.1"/>
</defs>
<clipPath id="SVGID_00000031928815844511343390000001499846702564364928_">
<use xlink:href="#SVGID_00000118398134125535155890000007193991426162861722_" style="overflow:visible;"/>
</clipPath>
<g id="g136" style="opacity:0.85;clip-path:url(#SVGID_00000031928815844511343390000001499846702564364928_);">
<g id="g134" transform="translate(599.9912,448.8926)">
<path id="path132" inkscape:connector-curvature="0" class="st15" d="M118,0L88.3-51.4L29-52.2L58.4-1.5L58-0.8h0.3 L88,50.6l-0.5,0.8h0.9L118,0z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g id="g140" transform="matrix(1.5550309,0,0,1.5550309,186.55413,840.47647)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path142" inkscape:connector-curvature="0" class="st16" d="M75.9,0v60.5h25.9v-9.2H85V34.8h12.3v-9.2H85V9.2h16.8V0 H75.9z"/>
</g>
<g id="g144" transform="matrix(1.5550309,0,0,1.5550309,262.29502,912.91898)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path146" inkscape:connector-curvature="0" class="st16" d="M75.9,0l-3.4-23.8h6.8L75.9,0z M71.1-32.7l-2.2-13.9h-9.5 l10.3,60.4h12.5l10.1-60.4h-9.6l-2.1,13.9H71.1z"/>
</g>
<g id="g156" transform="matrix(1.5550309,0,0,1.5550309,330.61001,911.79376)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path158" inkscape:connector-curvature="0" class="st16" d="M75.9,0c0,3.5-1.7,5.3-5.2,5.3h-5.5v-19.3h5.5 c1.4,0,2.7,0.5,3.7,1.5c1,1,1.5,2.3,1.5,3.7V0z M70.5,14.6c5.1,0,8.8-1.4,11.2-4.2c2.1-2.4,3.1-5.9,3.1-10.2v-8.8 c0-4.3-1.6-7.9-4.9-10.9l6.8-26.4h-9.9l-5.5,22.8h-0.8h-5.3v-22.8h-9.1v60.4H70.5z"/>
</g>
<g id="g160" transform="matrix(1.5550309,0,0,1.5550309,369.90501,920.1931)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path162" inkscape:connector-curvature="0" class="st16" d="M75.9,0h-9.7v9.2h28.5V0H85v-51.3h-9.1V0z"/>
</g>
<g id="g164" transform="matrix(1.5550309,0,0,1.5550309,424.64692,880.29676)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path166" inkscape:connector-curvature="0" class="st16" d="M75.9,0v-25.6h-9.1v60.4h9.1V9.2h11v25.7H96v-60.4h-9.1V0 H75.9z"/>
</g>
<g id="g168" transform="matrix(1.5550309,0,0,1.5550309,507.21237,840.47647)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path170" inkscape:connector-curvature="0" class="st16" d="M75.9,0H51.1v60.4h9.1V9.1h15.7V0z"/>
</g>
<g id="g172" transform="matrix(1.5550309,0,0,1.5550309,518.3862,879.84736)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path174" inkscape:connector-curvature="0" class="st16" d="M75.9,0L63.7,35.2h10l6.8-21.7l6.7,21.7h10.1L85,0v-25.3 h-9.1V0z"/>
</g>
</g>
</svg>
</a>
</div>
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
stroke="currentColor" class="w-12 h-12 mt-3 hide-menu-mobile">
<path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" />
</svg>
</div>
<a
href="/how-lunar-works/"
class="border-b w-full pl-2 text-xl py-4 flex items-center hover:bg-[#f1fbff]"
>
How it works
</a>
<a href="/lunar/guardrails/" class="border-b w-full pl-2 text-xl py-4 flex items-center hover:bg-[#f1fbff]">
Guardrails
</a>
<a href="/lunar/integrations/" class="border-b w-full pl-2 text-xl py-4 flex items-center hover:bg-[#f1fbff]">
Integrations
</a>
<a href="https://docs-lunar.earthly.dev" class="border-b w-full pl-2 text-xl py-4 flex items-center hover:bg-[#f1fbff]">
Docs
</a>
<a href="/blog/" class="border-b w-full pl-2 text-xl py-4 flex items-center hover:bg-[#f1fbff]">
Blog
</a>
<a href="/automate-your-process/" class="border-b w-full pl-2 text-xl py-4 flex items-center gap-1.5 hover:bg-[#f1fbff]">
Automate Now
<svg class="w-3.5 h-3.5 ml-1 opacity-50" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" fill="none"><circle cx="7" cy="7" r="2.5" fill="currentColor"/><circle cx="7" cy="7" r="6" stroke="currentColor" stroke-width="1.3" fill="none"/></svg>
</a>
<a
href="/book-demo/"
class="h-10 px-4 my-10 items-center flex w-fit text-[16px] leading-[1em] font-semibold py-4 text-center bg-[linear-gradient(86.25deg,#34F8B6_0%,#00D4FF_99.52%)] hover:text-white rounded-lg"
onclick="navMobileGetADemoClick()"
>
Book a Demo
</a>
</div>
</div>
<script>
function navMobileGetADemoClick() {
analytics.track('blog-nav-mobile-get-a-demo-click', {
category: 'Get a Demo',
label: 'blog-nav-mobile-get-a-demo-click'
});
}
function navMobileEarthlyLogoClick() {
analytics.track('blog-nav-mobile-earthly-logo-click', {
category: 'Earthly Logo Click',
label: 'blog-nav-mobile-earthly-logo-click'
});
}
</script>
</div>
<div class="hidden lg:flex flex-row gap-6 items-center">
<a
href="/how-lunar-works/"
class="py-[10px] no-underline text-[16px] leading-[20px] font-bold tracking-[0.02em] transition-all duration-300 hover:text-[#34f8b6]"
>
How it works
</a>
<a
href="/lunar/guardrails/"
class="py-[10px] no-underline text-[16px] leading-[20px] font-bold tracking-[0.02em] transition-all duration-300 hover:text-[#34f8b6]"
>
Guardrails
</a>
<a
href="/lunar/integrations/"
class="py-[10px] no-underline text-[16px] leading-[20px] font-bold tracking-[0.02em] transition-all duration-300 hover:text-[#34f8b6]"
>
Integrations
</a>
<a
href="https://docs-lunar.earthly.dev"
class="py-[10px] no-underline text-[16px] leading-[20px] font-bold tracking-[0.02em] transition-all duration-300 hover:text-[#34f8b6]"
>
Docs
</a>
<a
href="/blog/"
class="py-[10px] no-underline text-[16px] leading-[20px] font-bold tracking-[0.02em] transition-all duration-300 hover:text-[#34f8b6]"
>
Blog
</a>
<a
href="/automate-your-process/"
class="py-[10px] no-underline text-[16px] leading-[20px] font-bold tracking-[0.02em] transition-all duration-300 hover:text-[#34f8b6] inline-flex items-center"
>
Automate Now
<svg class="w-3.5 h-3.5 ml-1 opacity-60" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" fill="none"><circle cx="7" cy="7" r="2.5" fill="currentColor"/><circle cx="7" cy="7" r="6" stroke="currentColor" stroke-width="1.3" fill="none"/></svg>
</a>
<div class="inline-flex items-center px-2 xl:px-4">
<a
href="/book-demo/"
class="btn-gradient"
onclick="navGetADemoClick()"
>
Book a Demo
</a>
</div>
</div>
</nav>
</div>
<script>
function navGetADemoClick() {
analytics.track('blog-nav-get-a-demo-click', {
category: 'Get a Demo Click',
label: 'blog-nav-get-a-demo-click'
});
}
function navEarthlyLogoClick() {
analytics.track('blog-nav-earthly-logo-click', {
category: 'Earthly Logo Click',
label: 'blog-nav-earthly-logo-click'
});
}
function blogpostTopCTAClick() {
analytics.track('blog-top-cta-link-click', {
category: 'CTA Click',
label: 'blog-top-cta-link-click'
});
}
//Adding clicktracking for blog post top CTA link, where it exists
//Links unique to each page, so dynamically adding event listener
document.addEventListener('DOMContentLoaded', function() {
// Select the first paragraph
var firstParagraph = document.querySelector('.prose.content-block > p:first-child');
if (firstParagraph) {
// Select the first link within that paragraph
var firstLink = firstParagraph.querySelector('a');
if (firstLink) {
// Add the click event listener
firstLink.addEventListener('click', function() {
blogpostTopCTAClick();
});
}
}
});
</script>
</header>
<div class="flex justify-center">
<div class="flex flex-col w-full min-w-[300px] max-w-[1260px]">
<div class="initial-content -mt-[70px] pt-[70px] w-full">
<div class="page__hero">
<img src="/.netlify/images?url=/blog/assets/images/devops-glossary/header.jpg&w=1500&h=375&fit=cover" class="page__hero-image" alt="A Brief, Incomplete and Mostly Wrong Devops Glossary" loading="eager">
</div>
<div id="main" role="main">
<article class="page bg-white" itemscope itemtype="https://schema.org/CreativeWork">
<meta itemprop="headline" content="A Brief, Incomplete and Mostly Wrong Devops Glossary" />
<meta itemprop="description" content="This article provides a humorous and satirical glossary of terms related to DevOps, highlighting the realities and quirks of the field. It offers amusing def..." />
<meta itemprop="datePublished" content="2023-09-24T00:00:00-04:00" />
<meta itemprop="dateModified" content="2023-10-06T00:00:00-04:00" />
<div class="page__inner-wrap flex relative">
<div id="breadcrumbs" class="w-[1px] h-full text-md top-[36px] z-10 hidden lg:block">
<div class="w-[250px] pb-20 pt-6 pl-3">
<div class="mt-6">
<a href="/blog/" class="text-xl text-blue-600 hover:underline">Blog</a>
<span class="text-slate-400 ml-1 mr-1">/</span>
<a href="/blog/categories/articles/" class="text-xl text-blue-600 font-semibold hover:underline">Articles</a>
</div>
<!-- First Block for items 1-3 -->
<div class="group mt-4 bg-blue-50 p-4">
<header>
<h4 class="font-semibold text-md mb-2">Related</h4>
</header>
<div>
<ul>
<li class="mb-1 series-item"><a class="text-sm text-gray-600 hover:underline" href="/blog/devetools-for-k8s/" title="Developer Tools for Kubernetes">‣ Kubernetes Developer Tools</a></li>
<li class="mb-1 series-item"><a class="text-sm text-gray-600 hover:underline" href="/blog/idiots-and-maniacs/" title="Idiots And Maniacs">‣ Idiots & Maniacs</a></li>
<li class="mb-1 series-item"><a class="text-sm text-gray-600 hover:underline" href="/blog/earthly-cloud-free-tier-launch/" title="Introducing Earthly Cloud">‣ Earthly Cloud Introduction</a></li>
</ul>
</div>
</div>
</div>
</div>
<section class="page__content w-full p-2 pt-8 md:p-10 flex flex-1 flex-col items-center relative" itemprop="text">
<div class="w-[1px] h-full text-md absolute right-0 z-10 hidden lg:block">
<!-- Non-Mobile-->
<div id="series-content">
<div class="group">
<div class="group mt-4 group mt-4 p-4 pr-4 pl-4 bg-blue-50">
<header>
<h4 class="font-semibold text-md mb-2">Popular Posts</h4>
</header>
<div class="">
<ul>
<li class="mb-1 series-item"><a class="text-sm text-gray-600 hover:underline" href="/blog/canary-deployment-in-k8s/" title="Using Canary Deployments in Kubernetes">‣ Canary Deployments in Kuber...</a></li>
<li class="mb-1 series-item"><a class="text-sm text-gray-600 hover:underline" href="/blog/docker-secrets/" title="The Complete Guide to Docker Secrets">‣ Docker Secrets Guide</a></li>
<li class="mb-1 series-item"><a class="text-sm text-gray-600 hover:underline" href="/blog/managing-k8s-with-k9s/" title="How to Manage Kubernetes Resources Using K9s">‣ Manage Kubernetes Resources</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="blog-article-wrap">
<header class="blog-article-header">
<h1 id="page-title" class="page__title text-4xl font-extrabold leading-none tracking-tight text-gray-900" itemprop="headline">
A Brief, Incomplete and Mostly Wrong Devops Glossary
</h1>
<p class="page__meta text-sm mt-2 mb-4">
<span class="page__meta-readtime text-gray-500">
<i class="far fa-clock" aria-hidden="true"></i>
8 minute read
&nbsp; &nbsp;<i class="fas fa-fw fa-calendar-alt" aria-hidden="true"></i> Updated:</strong> <time datetime="2023-10-06">October 6, 2023</time>
</span>
<span>
<div class="author__avatar_top flex mb-4">
<span class="image-author"><img src="/.netlify/images?url=/blog/assets/images/authors/adamgordonbell.png&w=240&h=240&fit=cover" alt="Adam Gordon Bell" loading="lazy"></span>
<div class="items-center ml-2 flex">Adam Gordon Bell</div>
</div>
</span>
</p>
</header>
<div class="lg:hidden mb-4">
</div>
<div class="lg:hidden mb-4">
</div>
<div class="prose content-block"><p>You’ve seen them — the pristine glossaries, endorsed by industry titans like the CNCF, with terms that sound like they’re straight out of a sci-fi movie. All impressive and idealistic. But we all know that on the ground, where build meets deploy, things aren’t always as polished as the glossary makes it seem.</p>
<p>So here’s my DevOps glossary in no particular order.</p>
<p><strong>DevOps:</strong> A magical realm where developers and operations live in harmony, everything that moves has been automated, and Terraform is still licensed MPL 2.</p>
<p><strong>DevOps Engineer:</strong> An ops person who abandoned problem solving and bash for ‘orchestrating solutions’ and YAML. Specializes in ‘breaking down silos,’ aka forwarding Slack messages between the Dev and Ops teams.</p>
<p><strong>Blameless Postmortems:</strong> A safe space where devs and ops blame “process” and “weird scripts,” never people. Steve always gets the most action items, though — read into that what you will.</p>
<p><strong>Incident:</strong> It’s not an ‘outage,’ it’s an unscheduled exercise in Incident Response, an impromptu team-building activity leading to a profoundly underwhelming Root Cause Analysis report. It’s basically a ‘Whodunit?’ but everyone knows it was Steve.</p>
<p><strong>Site Reliability Engineer:</strong> A rebranded systems engineer with pager induced insomnia. They talk about post-mortems more than medical coroner and make twice as much.</p>
<p><strong>Platform Engineer:</strong> A sysadmin reborn by mastering Go and trading in 3 a.m. pager duty for noon YAML sessions. Can now say ‘cloud-native’ and ‘serverless’ with a straight face - which is worth a 2x salary bump, now isn’t it?</p>
<p><strong>PagerDuty:</strong> A pocket-sized drill sergeant crossed with a fire alarm, screeching “Fix it, Soldier! Double-time!” at unholy hours.</p>
<p><strong>CNCF:</strong> The Academy Awards Committee of the Cloud Native™ world, with more categories than a ‘kubectl get all’ command. Don’t forget to visit their merch booth for Kubernetes-branded water bottles and ‘I Love YAML’ stickers."</p>
<p><strong>Grafana:</strong> A Swiss Army knife of beautiful visualization tools collecting dust. Meanwhile Steve checks server health by pinging Google with a script he calls ‘is_up.pl.’</p>
<p><strong>Cloud Engineer:</strong> Has Rob Pike poster. Fluent in Cloud Native™ protoc, and the ancient tongue of ‘if err != nil.’ Has a gopher tattoo. Hated generics but now strangely thinks they are ok.</p>
<p><strong>Observability:</strong> Converting thousands of SRE hours and AI alerts just to tell you Steve changed <code>replicas: 10</code> into <code>replicas: 1000</code> and nuked our Kubernetes. Nice scaling strategy, Steve.</p>
<p><strong>Chaos Engineering:</strong> Swapping 3 a.m. fire drills for 9-to-5 chaos — because nothing’s as soothing as the buzz of pagers and the dance of logs, but now without the overtime.</p>
<p><strong>KubeCon:</strong> A career fair masquerading as a tech conference. It’s like Burning Man but with <del>fewer drugs</del> less sand and replacing the spiritual awakening with trick-or-treating for stickers and swag.</p>
<p><strong>Canary Release:</strong> A deploy strategy where a few lucky users are selected to play “Spot the Bug” in Steve’s latest masterpiece of chaos.</p>
<p>So, there it is — a slice of DevOps life that you won’t find in standard glossaries. But hey, we’ve only scratched the surface here. What is missing? Maybe I need to do a part two?</p>
<div id="blog-bottom-cta-control" class="bg-blue-50 rounded-lg py-6 my-6 cta-container">
<div class="mb-4">
<svg xmlns="http://www.w3.org/2000/svg" width="501" height="119" viewBox="0 0 501 119" fill="none" class="mb-3 block lunar-logo-cta">
<path d="M76.0247 30.8587L60.9741 56.9803H60.8721L45.9746 31.1138L76.0247 30.8587Z" fill="#83FF50" stroke="#83FF50" stroke-width="0.510184" stroke-miterlimit="5.3333"/> <mask id="mask0_4771_5929" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="5" y="0" width="82" height="36"> <path d="M86.2689 35.5604H5.45508V0.000343323H86.2689V35.5604Z" fill="white"/> </mask> <g mask="url(#mask0_4771_5929)"> <g opacity="0.83"> <path d="M76.156 30.7127L76.105 30.8147H76.054V30.8658L45.9529 31.1208V31.0698H15.8008L15.5967 30.7127L30.7493 4.48903H61.0544L76.156 30.7127Z" fill="#96FF5B" fill-opacity="0.6471"/> </g> </g> <path d="M76.0913 30.8193L61.0403 56.9418H60.9893L76.0403 30.8193H76.0913Z" fill="white"/> <path d="M61.0593 57.3182L61.0083 57.4202L45.9067 83.5419H15.6526L0.5 57.3182L15.6526 31.0945H15.8056L30.7031 56.9611H60.8553L61.0593 57.3182Z" fill="#00D6FF" stroke="#00D6FF" stroke-width="0.510184" stroke-miterlimit="5.3333"/> <path d="M60.8504 56.9579H30.7493L15.8008 31.0914H45.9529L60.8504 56.9579Z" fill="#7DFFFF" stroke="#7DFFFF" stroke-width="0.510184" stroke-miterlimit="5.3333"/> <path d="M76.2476 82.8961L76.5027 83.3042H76.0435L64.5642 83.4063L45.9424 83.5593L61.0439 57.4377H90.992L76.2476 82.8961Z" fill="#32E6FF" stroke="#32E6FF" stroke-width="0.510184" stroke-miterlimit="5.3333"/> <mask id="mask1_4771_5929" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="38" y="48" width="62" height="71"> <path d="M99.3161 118.67H38.1445V48.6722H99.3161V118.67Z" fill="white"/> </mask> <g mask="url(#mask1_4771_5929)"> <g opacity="0.86"> <path d="M91.6823 109.142L91.2231 109.907H60.969L45.8164 83.6833L45.8674 83.5813L60.969 57.4597H61.02L45.9184 83.5303L64.5403 83.3772L76.0706 83.2752H76.5297L91.3762 109.142H91.6823Z" fill="#00D5FF" fill-opacity="0.5451"/> </g> </g> <path d="M76.2471 82.8963L76.5022 83.3044H76.043L61.1455 57.4379H90.9915L76.2471 82.8963Z" fill="#20E6FF" stroke="#20E6FF" stroke-width="0.510184" stroke-miterlimit="5.3333"/> <path d="M106.19 83.3025H76.4973L76.2422 82.8943L90.9356 57.436H91.2417L106.19 83.3025Z" fill="#2AF0FF" stroke="#2AF0FF" stroke-width="0.510184" stroke-miterlimit="5.3333"/> <mask id="mask2_4771_5929" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="71" y="79" width="41" height="35"> <path d="M111.413 113.465H71.5156V79.0269H111.413V113.465Z" fill="white"/> </mask> <g mask="url(#mask2_4771_5929)"> <g opacity="0.95"> <path d="M106.388 83.663L91.6948 109.121H91.3887L76.4912 83.3058H106.184L106.388 83.663Z" fill="#29EFFF" fill-opacity="0.8"/> </g> </g> <path d="M121.491 57.0653L106.338 83.2889H106.185L91.2878 57.4224H61.1357L60.9316 57.0653L60.9827 56.9632L76.0332 30.8416V30.7906H106.338L121.236 56.6061L121.491 57.0653Z" fill="#32F8B9" stroke="#32F8B9" stroke-width="0.510184" stroke-miterlimit="5.3333"/> <mask id="mask3_4771_5929" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="83" y="48" width="62" height="71"> <path d="M144.229 118.67H83.6699V48.2127H144.229V118.67Z" fill="white"/> </mask> <g mask="url(#mask3_4771_5929)"> <g opacity="0.85"> <path d="M136.625 83.2665L121.472 109.49L91.2178 109.898L106.217 84.0318L106.013 83.6747H106.166L121.319 57.451L121.064 57.0428H121.523L136.625 83.2665Z" fill="#32F6B8" fill-opacity="0.5647"/> </g> </g> <path d="M155.73 81.0842V33.086H176.278V40.3849H162.95V53.4754H172.708V60.7743H162.95V73.7853H176.278V81.0842H155.73Z" fill="#090909"/> <path d="M194.371 44.125L191.673 63.0069H197.068L194.371 44.125ZM190.563 70.0678L188.817 81.0955H181.28L189.452 33.1766H199.369L207.382 81.0955H199.766L198.099 70.0678H190.563Z" fill="#090909"/> <path d="M229.225 44.6987C229.225 41.922 227.876 40.4939 225.1 40.4939H220.736V55.8058H225.1C226.21 55.8058 227.242 55.4091 228.035 54.6157C228.828 53.8224 229.225 52.791 229.225 51.6803V44.6987ZM224.941 33.1157C228.987 33.1157 231.923 34.2264 233.827 36.4478C235.493 38.3519 236.286 41.1286 236.286 44.5401V51.5216C236.286 54.9331 235.017 57.7892 232.399 60.1692L237.793 81.1139H229.939L225.576 63.0253H224.941H220.736V81.1139H213.517V33.195H224.941V33.1157Z" fill="#090909"/> <path d="M249.271 40.4135H241.575V33.1146H264.186V40.4135H256.49V81.1128H249.271V40.4135Z" fill="#090909"/> <path d="M277.201 60.7683V81.0782H269.981V33.1594H277.201V53.4694H285.928V33.0801H293.148V80.9989H285.928V60.7683H277.201Z" fill="#090909"/> <path d="M319.322 81.0842H299.646V33.1654H306.866V73.8647H319.322V81.0842Z" fill="#090909"/> <path d="M325.026 60.9974L315.347 33.0712H323.28L328.675 50.287L333.991 33.0712H342.004L332.245 60.9974V81.0693H325.026V60.9974Z" fill="#090909"/> <path d="M491.932 44.6987C491.932 41.922 490.583 40.4939 487.807 40.4939H483.443V55.8058H487.807C488.917 55.8058 489.949 55.4091 490.742 54.6157C491.535 53.8224 491.932 52.791 491.932 51.6803V44.6987ZM487.648 33.1157C491.694 33.1157 494.63 34.2264 496.534 36.4478C498.2 38.3519 498.993 41.1286 498.993 44.5401V51.5216C498.993 54.9331 497.724 57.7892 495.106 60.1692L500.5 81.1139H492.646L488.283 63.0253H487.648H483.443V81.1139H476.224V33.195H487.648V33.1157Z" fill="#49728B"/> <path d="M457.229 44.125L454.532 63.0069H459.927L457.229 44.125ZM453.421 70.0678L451.676 81.0955H444.139L452.31 33.1766H462.227L470.24 81.0955H462.624L460.958 70.0678H453.421Z" fill="#49728B"/> <path d="M422.21 55.2386V81.0784H414.99V33.1595H422.21L430.937 58.4613V33.0802H438.156V80.999H430.937L422.21 55.2386Z" fill="#49728B"/> <path d="M396.539 81.0784V81.0784C390.631 81.0784 385.842 76.2891 385.842 70.3812V33.1595H393.061V69.4812C393.061 71.8911 395.015 73.8447 397.425 73.8447V73.8447C399.835 73.8447 401.788 71.8911 401.788 69.4812V33.0802H409.008V70.3008C409.008 76.2221 404.231 81.0345 398.31 81.0784V81.0784H396.539Z" fill="#49728B"/> <path d="M359.312 81.0842V33.086H366.531V40.3849V53.4754V60.7743V73.7853H379.86V81.0842H359.312Z" fill="#49728B"/>
</svg>
<p class="text-lg font-normal text-gray-700 leading-relaxed">
Turn your engineering standards into automated guardrails that provide feedback directly in pull requests, with 100+ guardrails included out of the box and support for the tools and CI/CD systems you already have.
</p>
</div>
<div class="mt-4">
<p><a href="/" target="_blank" onclick="blogHomepageCTAClick1()"
class="btn-gradient"> Learn More </a></p>
</div>
</div>
<script>
function blogHomepageCTAClick1() {
analytics.track('blog-bottom-cta-click', {
category: 'Earthly Lunar Blog CTA Click',
label: 'blog-bottom-cta-click'
});
}
</script>
</div>
<div class="mt-4 prose">
<div
itemscope
itemtype="https://schema.org/Person"
class="flex border rounded-md items-center my-2"
>
<div class="author__avatar ml-2 min-w-[100px] max-w-[100px] flex">
<span class="image-author"><img src="/.netlify/images?url=/blog/assets/images/authors/adamgordonbell.png&w=240&h=240&fit=cover" alt="Adam Gordon Bell" loading="lazy"></span>
</div>
<div class="author__content">
<div class="author__name heading pl-4 text-xl font-bold mt-4" itemprop="name">
<a href="/blog/authors/adam/">
Adam Gordon Bell
</a>
</div>
<div class="author__bio text-sm px-4" itemprop="description">
Spreading the word about Earthly. Host of <a href="https://corecursive.com/">CoRecursive</a> podcast. Physical Embodiment of Cunningham's Law.
<br/><a href="https://twitter.com/adamgordonbell">@adamgordonbell</a>
</br><a href="mailto:adam+website@earthly.dev">✉Email Adam✉</a>
</div>
</div>
</div>
<footer class="page__meta">
<p class="page__date"><strong><i class="fas fa-fw fa-calendar-alt" aria-hidden="true"></i>Updated:</strong> <time datetime="2023-10-06">October 6, 2023</time></p>
<p class="page__date"><strong><i class="fas fa-fw fa-calendar-alt" aria-hidden="true"></i>Published:</strong> <time datetime="2023-09-24T00:00:00-04:00">September 24, 2023</time></p>
</footer>
<!-- On non-funnel pages, show newsletter sign up -->
<div class="only-mobile">
<!-- Section: Design Block -->
<section class="mb-12 text-gray-800 bg-blue-50 rounded-xl">
<div class="px-6 py-6">
<div>
<div class="text-3xl font-bold tracking-tight text-black/80">
Get notified about new articles!
</div>
<div class="mb-4 opacity-80 mt-1">
We won't send you spam. Unsubscribe at any time.
</div>
</div>
<script src="https://f.convertkit.com/ckjs/ck.5.js"></script>
<div class="block rounded-lg shadow-lg bg-white px-6 py-4">
<div class="newsletter text-2xl font-bold mb-1">Subscribe to the Newsletter</div>
<form id="embedded-newsletter-form" action="https://app.convertkit.com/forms/2810221/subscriptions" markdown="0"
class="bg-white" method="post" data-sv-form="2810221" data-uid="c350589119" data-format="inline"
data-version="5"
data-options='{"settings":{"after_subscribe":{"action":"message","success_message":"Success! Now check your email to confirm your subscription.","redirect_url":""},"analytics":{"google":null,"facebook":null,"segment":null,"pinterest":null,"sparkloop":null,"googletagmanager":null},"modal":{"trigger":"timer","scroll_percentage":null,"timer":5,"devices":"all","show_once_every":15},"powered_by":{"show":true,"url":"https://convertkit.com/features/forms?utm_campaign=poweredby&amp;utm_content=form&amp;utm_medium=referral&amp;utm_source=dynamic"},"recaptcha":{"enabled":false},"return_visitor":{"action":"show","custom_content":""},"slide_in":{"display_in":"bottom_right","trigger":"timer","scroll_percentage":null,"timer":5,"devices":"all","show_once_every":15},"sticky_bar":{"display_in":"top","trigger":"timer","scroll_percentage":null,"timer":5,"devices":"all","show_once_every":15}},"version":"5"}'
min-width="400 500 600 700 800">
<div class="formkit-background" style="opacity: 0.2"></div>
<div data-style="minimal">
<div data-element="fields" data-stacked="false" class="seva-fields formkit-fields">
<div class="formkit-field">
<input id="embedded-newsletter-form-email" class="border rounded-md p-2 mb-2 w-3/4" name="email_address" aria-label="Email Address"
placeholder="Email Address" required="" type="email" />
</div>
<button data-element="submit" class="formkit-submit formkit-submit w-44 pt-1 pb-1" style="
color: rgb(255, 255, 255);
background-color: rgb(22, 119, 190);
border-radius: 4px;
font-weight: 400;
">
<div class="formkit-spinner">
<div></div>
<div></div>
<div></div>
</div>
<span class="">Subscribe</span>
</button>
</div>
<div class="formkit-guarantee" data-element="guarantee">
</div>
</div>
<style></style>
</form>
</div>
<script>
const form = document.getElementById('embedded-newsletter-form');
form.addEventListener('submit', function (event) {
var formEmail = document.getElementById('embedded-newsletter-form-email').value;
analytics.identify(formEmail);
analytics.track('embedded-newsletter-form', {
category: 'Form Submission',
label: 'embedded-newsletter-form'
});
});
</script>
</div>
</section>
<!-- Section: Design Block -->
</div>
</div>
</div>
</section>
<a href="#top" id="scroll-button" style="display:none">
<button type="button" data-mdb-ripple="true" data-mdb-ripple-color="light" class="inline-block p-3 bg-blue-600 text-white font-medium text-xs leading-tight uppercase rounded-full shadow-md hover:bg-blue-800 hover:shadow-lg focus:bg-red-700 focus:shadow-lg focus:outline-none focus:ring-0 active:bg-red-800 active:shadow-lg transition duration-150 ease-in-out bottom-5 right-5 fixed" id="btn-back-to-top">
<svg aria-hidden="true" focusable="false" data-prefix="fas" class="w-4 h-4" role="img" viewBox="0 0 448 512">
<path fill="currentColor" d="M34.9 289.5l-22.2-22.2c-9.4-9.4-9.4-24.6 0-33.9L207 39c9.4-9.4 24.6-9.4 33.9 0l194.3 194.3c9.4 9.4 9.4 24.6 0 33.9L413 289.4c-9.5 9.5-25 9.3-34.3-.4L264 168.6V456c0 13.3-10.7 24-24 24h-32c-13.3 0-24-10.7-24-24V168.6L69.2 289.1c-9.3 9.8-24.8 10-34.3.4z"></path>
</svg>
</button>
</a>
</div>
</article>
<div class="page__related mt-8 ml-8 mr-8">
<div class="page__related-title heading mb-2 text-2xl text-gray-400">
You May Also Enjoy
</div>
<div class="grid__wrapper grid grid-cols-1 md:grid-cols-2 gap-2 md:gap-12">
<div class="grid__item mb-6 rounded-lg border border-slate-300 pb-5">
<article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
<div class="archive__item-teaser rounded-t-lg overflow-hidden">
<a class="hover:underline" href="/blog/devetools-for-k8s/" rel="permalink"><img src="/.netlify/images?url=/blog/assets/images/devetools-for-k8s/header.jpg&w=750&h=250&fit=cover" alt="Developer Tools for Kubernetes" loading="lazy"></a>
</div>
<div class="p-5 pt-0">
<div class="archive__item-title no_toc heading mt-4 pl-2 pr-2 text-xl font-semibold" itemprop="headline">
<a class="hover:underline" href="/blog/devetools-for-k8s/" rel="permalink">Developer Tools for Kubernetes</a>
</div>
<p class="page__meta">
<div class="page__meta-readtime mb-2 pl-2 text-gray-500 text-sm">
<i class="far fa-clock" aria-hidden="true"></i>
12 minute read
</div>
</p>
<p class="archive__item-excerpt pl-2 pt-1 pr-2" itemprop="description">Learn about the essential developer tools for Kubernetes that can help you become more efficient and productive in your workload. From integrated development...</p>
</div>
</article>
</div>
<div class="grid__item mb-6 rounded-lg border border-slate-300 pb-5">
<article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
<div class="archive__item-teaser rounded-t-lg overflow-hidden">
<a class="hover:underline" href="/blog/idiots-and-maniacs/" rel="permalink"><img src="/.netlify/images?url=/blog/assets/images/idiots-and-maniacs/header.jpg&w=750&h=250&fit=cover" alt="Idiots And Maniacs" loading="lazy"></a>
</div>
<div class="p-5 pt-0">
<div class="archive__item-title no_toc heading mt-4 pl-2 pr-2 text-xl font-semibold" itemprop="headline">
<a class="hover:underline" href="/blog/idiots-and-maniacs/" rel="permalink">Idiots And Maniacs</a>
</div>
<p class="page__meta">
<div class="page__meta-readtime mb-2 pl-2 text-gray-500 text-sm">
<i class="far fa-clock" aria-hidden="true"></i>
11 minute read
</div>
</p>
<p class="archive__item-excerpt pl-2 pt-1 pr-2" itemprop="description">In this article, the author explores the concept of "idiots and maniacs" in software development, drawing parallels to driving in the snow. They discuss how ...</p>
</div>
</article>
</div>
</div>
</div>
</div>
</div>
</div>
<script defer src="/blog/assets/bundle.js"></script>
</div>
<footer class="footer-modern mt-5 lg:mt-14 bg-gray-50">
<div class="p-0">
<div class="footer-modern-container max-w-[1440px] mx-auto px-4 md:px-10">
<!-- Top section with gradient border -->
<div
class="footer-top-border h-[2px] opacity-40 mb-[60px] bg-[linear-gradient(90deg,transparent_0%,#00d4ff_20%,#00ff88_50%,#00d4ff_80%,transparent_100%)]">
</div>
<!-- Main footer content -->
<div class="footer-main grid grid-cols-[1fr] lg:grid-cols-[1fr_2fr] gap-[60px] pb-[50px]">
<!-- Logo and tagline -->
<div class="footer-brand flex flex-col gap-4 items-center lg:items-start">
<a href="/"
class="footer-logo-link inline-block transition-opacity duration-300 ease-in-out">
<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="svg2" inkscape:export-filename="/home/vlad/workspace/logo/test2.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" inkscape:version="1.0.1 (c497b03c, 2020-09-10)" sodipodi:docname="white-logo.svg" x="0px" y="0px" viewBox="0 0 901 298" style="enable-background:new 0 0 901 298;" xml:space="preserve" class="siteHeader-logoLink-svg" height="70">
<style type="text/css">
.st0{fill:#83FF50;stroke:#83FF50;stroke-width:1;stroke-miterlimit:5.3333;}
.st1{opacity:0.83;clip-path:url(#SVGID_00000080895763411143063620000003946941406721728898_);}
.st2{fill:#96FF5B;fill-opacity:0.6471;}
.st3{fill:#FFFFFF;}
.st4{fill:#00D6FF;stroke:#00D6FF;stroke-width:1;stroke-miterlimit:5.3333;}
.st5{fill:#7DFFFF;stroke:#7DFFFF;stroke-width:1;stroke-miterlimit:5.3333;}
.st6{fill:#32E6FF;stroke:#32E6FF;stroke-width:1;stroke-miterlimit:5.3333;}
.st7{opacity:0.86;clip-path:url(#SVGID_00000122682779506278355710000011518640239278589079_);}
.st8{fill:#00D5FF;fill-opacity:0.5451;}
.st9{fill:#20E6FF;stroke:#20E6FF;stroke-width:1;stroke-miterlimit:5.3333;}
.st10{fill:#2AF0FF;stroke:#2AF0FF;stroke-width:1;stroke-miterlimit:5.3333;}
.st11{opacity:0.95;clip-path:url(#SVGID_00000067935788216487674460000017756686234451421835_);}
.st12{fill:#29EFFF;fill-opacity:0.8;}
.st13{fill:#32F8B9;stroke:#32F8B9;stroke-width:1;stroke-miterlimit:5.3333;}
.st14{opacity:0.85;clip-path:url(#SVGID_00000162337586531770572300000000167629634986491300_);}
.st15{fill:#32F6B8;fill-opacity:0.5647;}
.st16{fill:#090909;}
</style>
<g id="g10" transform="matrix(1.3333333,0,0,-1.3333333,0,1333.3333)" inkscape:groupmode="layer" inkscape:label="Earthly white bg">
<g id="g12" transform="translate(30.349812,938.92202)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path14" inkscape:connector-curvature="0" class="st0" d="M118,0L88.5-51.2h-0.2L59.1-0.5L118,0z"/>
</g>
<g>
<g id="g18" transform="translate(-450.86849,387.30675)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<g id="g24">
<g id="g26">
</g>
<g id="g38">
<g>
<defs>
<rect id="SVGID_1_" x="460.9" y="542.4" width="158.4" height="69.7"/>
</defs>
<clipPath id="SVGID_00000174578530605239856790000016492496000338511018_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<g id="g36" style="opacity:0.83;clip-path:url(#SVGID_00000174578530605239856790000016492496000338511018_);">
<g id="g34" transform="translate(481.4741,551.9014)">
<path id="path32" inkscape:connector-curvature="0" class="st2" d="M118,0l-0.1-0.2h-0.1l0-0.1l-59-0.5l0,0.1H-0.3L-0.7,0 L29,51.4h59.4L118,0z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g id="g40" transform="translate(30.485012,938.99722)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path42" inkscape:connector-curvature="0" class="st3" d="M118,0L118,0L88.5-51.2h-0.1l29.5,51.2L118,0L118,0z"/>
</g>
<g id="g44" transform="translate(1.0187102,887.05882)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path46" inkscape:connector-curvature="0" class="st4" d="M118,0l-0.1-0.2L88.3-51.4v0H29L-0.7,0L29,51.4h0.3L58.5,0.7 h59.1L118,0z"/>
</g>
<g id="g48" transform="translate(0.60761022,887.76582)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path50" inkscape:connector-curvature="0" class="st5" d="M118,0H59L29.7,50.7h59.1L118,0z"/>
</g>
<g id="g52" transform="translate(30.786312,836.92502)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path54" inkscape:connector-curvature="0" class="st6" d="M118,0l0.5-0.8h-0.9L95.1-1L58.6-1.3l29.6,51.2h58.7L118,0z"/>
</g>
<g id="g56" transform="translate(-450.86849,387.30675)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<g>
<g id="g58">
<g id="g64">
<g id="g66">
</g>
<g id="g78">
<g>
<defs>
<rect id="SVGID_00000113349542533246887100000016756461507466418367_" x="525" y="379.5" width="119.9" height="137.2"/>
</defs>
<clipPath id="SVGID_00000052812051687137078050000006255378118721314435_">
<use xlink:href="#SVGID_00000113349542533246887100000016756461507466418367_" style="overflow:visible;"/>
</clipPath>
<g id="g76" style="opacity:0.86;clip-path:url(#SVGID_00000052812051687137078050000006255378118721314435_);">
<g id="g74" transform="translate(511.9336,398.1758)">
<path id="path72" inkscape:connector-curvature="0" class="st8" d="M118,0l-0.9-1.5H57.8L28.1,49.9l0.1,0.2v0l29.6,51.2 h0.1L28.3,50.2l36.5,0.3l22.6,0.2h0.9L117.4,0H118z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g id="g80" transform="translate(30.786312,836.92502)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path82" inkscape:connector-curvature="0" class="st9" d="M118,0l0.5-0.8h-0.9L88.4,49.9h58.5L118,0z"/>
</g>
<g id="g84" transform="translate(89.478712,836.12812)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path86" inkscape:connector-curvature="0" class="st10" d="M118,0H59.8l-0.5,0.8l28.8,49.9h0.6L118,0z"/>
</g>
<g id="g88" transform="translate(-450.86849,387.30675)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<g>
<g id="g90">
<g id="g96">
<g id="g98">
</g>
<g id="g110">
<g>
<defs>
<rect id="SVGID_00000083069750939687145980000010640198437501922177_" x="590.4" y="389.7" width="78.2" height="67.5"/>
</defs>
<clipPath id="SVGID_00000070800203215072149570000016036056325378891696_">
<use xlink:href="#SVGID_00000083069750939687145980000010640198437501922177_" style="overflow:visible;"/>
</clipPath>
<g id="g108" style="opacity:0.95;clip-path:url(#SVGID_00000070800203215072149570000016036056325378891696_);">
<g id="g106" transform="translate(540.7529,448.1143)">
<path id="path104" inkscape:connector-curvature="0" class="st12" d="M118,0L89.2-49.9h-0.6L59.4,0.7h58.2L118,0z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g id="g112" transform="translate(119.47131,887.55482)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path114" inkscape:connector-curvature="0" class="st13" d="M118,0L88.3-51.4H88L58.8-0.7H-0.3L-0.7,0l0.1,0.2l29.5,51.2 l0,0.1h59.4l29.2-50.6L118,0z"/>
</g>
<g id="g116" transform="translate(-450.86849,387.30675)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<g>
<g id="g118">
<g id="g124">
<g id="g126">
</g>
<g id="g138">
<g>
<defs>
<rect id="SVGID_00000118398134125535155890000007193991426162861722_" x="614.2" y="379.5" width="118.7" height="138.1"/>
</defs>
<clipPath id="SVGID_00000031928815844511343390000001499846702564364928_">
<use xlink:href="#SVGID_00000118398134125535155890000007193991426162861722_" style="overflow:visible;"/>
</clipPath>
<g id="g136" style="opacity:0.85;clip-path:url(#SVGID_00000031928815844511343390000001499846702564364928_);">
<g id="g134" transform="translate(599.9912,448.8926)">
<path id="path132" inkscape:connector-curvature="0" class="st15" d="M118,0L88.3-51.4L29-52.2L58.4-1.5L58-0.8h0.3 L88,50.6l-0.5,0.8h0.9L118,0z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g id="g140" transform="matrix(1.5550309,0,0,1.5550309,186.55413,840.47647)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path142" inkscape:connector-curvature="0" class="st16" d="M75.9,0v60.5h25.9v-9.2H85V34.8h12.3v-9.2H85V9.2h16.8V0 H75.9z"/>
</g>
<g id="g144" transform="matrix(1.5550309,0,0,1.5550309,262.29502,912.91898)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path146" inkscape:connector-curvature="0" class="st16" d="M75.9,0l-3.4-23.8h6.8L75.9,0z M71.1-32.7l-2.2-13.9h-9.5 l10.3,60.4h12.5l10.1-60.4h-9.6l-2.1,13.9H71.1z"/>
</g>
<g id="g156" transform="matrix(1.5550309,0,0,1.5550309,330.61001,911.79376)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path158" inkscape:connector-curvature="0" class="st16" d="M75.9,0c0,3.5-1.7,5.3-5.2,5.3h-5.5v-19.3h5.5 c1.4,0,2.7,0.5,3.7,1.5c1,1,1.5,2.3,1.5,3.7V0z M70.5,14.6c5.1,0,8.8-1.4,11.2-4.2c2.1-2.4,3.1-5.9,3.1-10.2v-8.8 c0-4.3-1.6-7.9-4.9-10.9l6.8-26.4h-9.9l-5.5,22.8h-0.8h-5.3v-22.8h-9.1v60.4H70.5z"/>
</g>
<g id="g160" transform="matrix(1.5550309,0,0,1.5550309,369.90501,920.1931)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path162" inkscape:connector-curvature="0" class="st16" d="M75.9,0h-9.7v9.2h28.5V0H85v-51.3h-9.1V0z"/>
</g>
<g id="g164" transform="matrix(1.5550309,0,0,1.5550309,424.64692,880.29676)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path166" inkscape:connector-curvature="0" class="st16" d="M75.9,0v-25.6h-9.1v60.4h9.1V9.2h11v25.7H96v-60.4h-9.1V0 H75.9z"/>
</g>
<g id="g168" transform="matrix(1.5550309,0,0,1.5550309,507.21237,840.47647)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path170" inkscape:connector-curvature="0" class="st16" d="M75.9,0H51.1v60.4h9.1V9.1h15.7V0z"/>
</g>
<g id="g172" transform="matrix(1.5550309,0,0,1.5550309,518.3862,879.84736)" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path id="path174" inkscape:connector-curvature="0" class="st16" d="M75.9,0L63.7,35.2h10l6.8-21.7l6.7,21.7h10.1L85,0v-25.3 h-9.1V0z"/>
</g>
</g>
</svg>
</a>
<p class="footer-tagline text-[14px] text-[#718096] m-0 leading-[1.5]">Your Guardrails, Everywhere.</p>
<div class="footer-social flex gap-3 mt-2">
<a href="https://twitter.com/earthlytech" title="Earthly on Twitter"
class="social-link flex items-center justify-center w-[40px] h-[40px] rounded-[10px] bg-[#4b5563] border border-[#ffffff14] transition-all duration-300 ease-in-out hover:-translate-y-0.5">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="#ffffff">
<path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/>
</svg>
</a>
<a href="/slack" title="Earthly on Slack"
class="social-link flex items-center justify-center w-[40px] h-[40px] rounded-[10px] bg-[#4b5563] border border-[#ffffff14] transition-all duration-300 ease-in-out hover:-translate-y-0.5">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="#ffffff">
<path d="M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zM6.313 15.165a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zM8.834 6.313a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zM18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zM17.688 8.834a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zM15.165 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zM15.165 17.688a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z"/>
</svg>
</a>
<a href="https://www.youtube.com/@EarthlyTech" title="Earthly on Youtube"
class="social-link flex items-center justify-center w-[40px] h-[40px] rounded-[10px] bg-[#4b5563] border border-[#ffffff14] transition-all duration-300 ease-in-out hover:-translate-y-0.5">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="#ffffff">
<path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"/>
</svg>
</a>
</div>
</div>
<!-- Navigation columns -->
<div class="footer-nav grid grid-cols-1 min-[500px]:grid-cols-3 gap-[40px] text-center lg:text-left">
<div class="footer-nav-column flex flex-col gap-[12px]">
<h4 class="footer-nav-heading text-[13px] font-bold text-[#00d4ff] uppercase tracking-[1px] mb-[8px] m-0">
Lunar</h4>
<a
href="/automate-your-process/"
class="text-[14px] no-underline transition-all duration-200 ease-in-out inline-block hover:text-[#34f8b6]"
>
Automate Now
</a>
<a
href="/book-demo/"
class="text-[14px] no-underline transition-all duration-200 ease-in-out inline-block hover:text-[#34f8b6]"
>
Get a Demo
</a>
<a
href="/"
class="text-[14px] no-underline transition-all duration-200 ease-in-out inline-block hover:text-[#34f8b6]"
>
Overview
</a>
<a
href="/how-lunar-works/"
class="text-[14px] no-underline transition-all duration-200 ease-in-out inline-block hover:text-[#34f8b6]"
>
How It Works
</a>
<a
href="/lunar/guardrails/"
class="text-[14px] no-underline transition-all duration-200 ease-in-out inline-block hover:text-[#34f8b6]"
>
Guardrails
</a>
<a
href="/lunar/integrations/"
class="text-[14px] no-underline transition-all duration-200 ease-in-out inline-block hover:text-[#34f8b6]"
>
Integrations
</a>
<a
href="https://docs-lunar.earthly.dev"
class="text-[14px] no-underline transition-all duration-200 ease-in-out inline-block hover:text-[#34f8b6]"
>
Docs
</a>
<a
href="/lunar-and-opa/"
class="text-[14px] no-underline transition-all duration-200 ease-in-out inline-block hover:text-[#34f8b6]"
>
Lunar and OPA
</a>
</div>
<div class="footer-nav-column flex flex-col gap-[12px]">
<h4 class="footer-nav-heading text-[13px] font-bold text-[#00d4ff] uppercase tracking-[1px] mb-[8px] m-0">
Earthfiles</h4>
<a href="/earthfile"
class="text-[14px] no-underline transition-all duration-200 ease-in-out inline-block hover:text-[#34f8b6]">About
Earthfiles</a>
<a href="https://docs.earthly.dev/"
class="text-[14px] no-underline transition-all duration-200 ease-in-out inline-block hover:text-[#34f8b6]">About
Earthfiles Docs</a>
</div>
<div class="footer-nav-column flex flex-col gap-[12px]">
<h4 class="footer-nav-heading text-[13px] font-bold text-[#00d4ff] uppercase tracking-[1px] mb-[8px] m-0">
Resources</h4>
<a href="/blog"
class="text-[14px] no-underline transition-all duration-200 ease-in-out inline-block hover:text-[#34f8b6]">Blog</a>
<a href="https://newsletter.earthly.dev/profile"
class="text-[14px] no-underline transition-all duration-200 ease-in-out inline-block hover:text-[#34f8b6]">Newsletter</a>
<a href="/newsroom"
class="text-[14px] no-underline transition-all duration-200 ease-in-out inline-block hover:text-[#34f8b6]">Newsroom</a>
<a href="/about"
class="text-[14px] no-underline transition-all duration-200 ease-in-out inline-block hover:text-[#34f8b6]">About
Earthly</a>
</div>
</div>
</div>
<!-- Bottom bar -->
<div class="footer-bottom flex flex-col gap-4 md:gap-0 md:flex-row items-center justify-between py-[24px] border-t border-[#4b556326]">
<div class="footer-made-with text-[13px] text-[#718096] flex items-center gap-[6px]">
Made with 💙 on Planet Earth
<span class="separator">·</span>
We're <a href="https://jobs.earthly.dev"
class="hiring-link text-[#00d4ff] font-semibold no-underline transition-colors duration-200 ease-in-out hover:text-[#00ff88]">hiring</a>!
</div>
<div class="footer-legal flex gap-6">
<a href="/tos"
class="text-xs text-slate-500 no-underline transition-colors duration-200 ease-in-out hover:text-[#34f8b6]">Terms
of Service</a>
<a href="/privacy-policy"
class="text-xs text-slate-500 no-underline transition-colors duration-200 ease-in-out hover:text-[#34f8b6]">Privacy
Policy</a>
<a href="/security"
class="text-xs text-slate-500 no-underline transition-colors duration-200 ease-in-out hover:text-[#34f8b6]">Security</a>
</div>
</div>
</div>
</div>
</footer>
</body>
</html>