CINXE.COM
CircleCI server v4.1 overview - CircleCI
<!DOCTYPE html><html lang="en"><style data-emotion="css-global 1ccfmri">html{line-height:1.15;-webkit-text-size-adjust:100%;}body{margin:0;}main{display:block;}h1{font-size:2em;margin:0.67em 0;}hr{box-sizing:content-box;height:0;overflow:visible;}pre{font-family:monospace,monospace;font-size:1em;}a{background-color:transparent;}abbr[title]{border-bottom:none;-webkit-text-decoration:underline;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;}b,strong{font-weight:bolder;}code,kbd,samp{font-family:monospace,monospace;font-size:1em;}small{font-size:80%;}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;}sub{bottom:-0.25em;}sup{top:-0.5em;}img{border-style:none;}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0;}button,input{overflow:visible;}button,select{text-transform:none;}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button;}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0;}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText;}fieldset{padding:0.35em 0.75em 0.625em;}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal;}progress{vertical-align:baseline;}textarea{overflow:auto;}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0;}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto;}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px;}[type="search"]::-webkit-search-decoration{-webkit-appearance:none;}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit;}details{display:block;}summary{display:-webkit-box;display:-webkit-list-item;display:-ms-list-itembox;display:list-item;}template{display:none;}[hidden]{display:none;}*,*::after,*::before{box-sizing:border-box;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-smoothing:antialiased;}html{font-family:'Roboto',sans-serif;}html,body,#__next,#root{width:100%;min-height:100vh;scroll-padding-top:128px;}#__next,#root{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}</style><style data-emotion="css-global 1x25u27">pre.highlight{padding:1em;padding-left:3.8em;margin:0.5em 0;color:#ffffff;background-color:#2b2b2b;white-space:pre-wrap!important;border-radius:4px;word-wrap:break-word;}pre[class*='language-'],code[class*='language-']{color:#ffffff;font-size:14px;text-shadow:none;font-family:Menlo,Monaco,'Courier New',monospace;direction:ltr;text-align:left;white-space:normal;word-spacing:normal;word-break:normal;line-height:24px;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;font-weight:normal;font-feature-settings:'liga' 0,'calt' 0;letter-spacing:0px;}@media print{pre[class*='language-'],code[class*='language-']{text-shadow:none;}}pre[class*='language-']{padding:1em;margin:0.5em 0;overflow:auto;background:#2b2b2b;}:not(pre)>code{border-radius:0.3em;color:#555!important;background:#1b1f230d;word-wrap:anywhere;padding:2px;white-space:pre-wrap;font-size:14px;line-height:initial!important;}.namespace{opacity:0.7;}.token.doctype .token.doctype-tag{color:#569cd6;}.token.doctype .token.name{color:#9cdcfe;}.token.comment,.token.prolog{color:#959595;}.token.punctuation,.language-html .language-css .token.punctuation,.language-html .language-javascript .token.punctuation{color:#d4d4d4;}.token.property,.token.tag,.token.boolean,.token.number,.token.constant,.token.symbol,.token.inserted,.token.unit{color:#ffffff;}.token.number{color:#b5cea8;}.token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.deleted{color:#ffffff;}.language-css .token.string.url{-webkit-text-decoration:underline;text-decoration:underline;}.token.operator,.token.entity{color:#d4d4d4;}.token.operator.arrow{color:#569cd6;}.token.atrule{color:#fff176;}.token.atrule .token.rule{color:#c586c0;}.token.atrule .token.url{color:#9cdcfe;}.token.atrule .token.url .token.function{color:#dcdcaa;}.token.atrule .token.url .token.punctuation{color:#d4d4d4;}.token.keyword{color:#569cd6;}.token.keyword.module,.token.keyword.control-flow{color:#c586c0;}.token.function,.token.function .token.maybe-class-name{color:#dcdcaa;}.token.regex{color:#d16969;}.token.important{color:#d4d4d4;font-weight:500;}.token.italic{font-style:italic;}.token.constant{color:#9cdcfe;}.token.class-name,.token.maybe-class-name{color:#4ec9b0;}.token.console{color:#9cdcfe;}.token.parameter{color:#9cdcfe;}.token.interpolation{color:#9cdcfe;}.token.punctuation.interpolation-punctuation{color:#569cd6;}.token.boolean{color:#569cd6;}.token.property,.token.variable,.token.imports .token.maybe-class-name,.token.exports .token.maybe-class-name{color:#fff176;}.token.selector{color:#d7ba7d;}.token.escape{color:#d7ba7d;}.token.tag{color:#569cd6;}.token.tag .token.punctuation{color:#808080;}.token.cdata{color:#808080;}.token.attr-name{color:#9cdcfe;}.token.attr-value,.token.attr-value .token.punctuation{color:#ce9178;}.token.attr-value .token.punctuation.attr-equals{color:#d4d4d4;}.token.entity{color:#569cd6;}.token.namespace{color:#4ec9b0;}pre[class*='language-javascript'],code[class*='language-javascript'],pre[class*='language-jsx'],code[class*='language-jsx'],pre[class*='language-typescript'],code[class*='language-typescript'],pre[class*='language-tsx'],code[class*='language-tsx']{color:#9cdcfe;}pre[class*='language-css'],code[class*='language-css']{color:#ce9178;}pre[class*='language-html'],code[class*='language-html']{color:#d4d4d4;}.language-regex .token.anchor{color:#dcdcaa;}.language-html .token.punctuation{color:#808080;}pre[class*='language-']>code[class*='language-']{position:relative;z-index:1;}.line-highlight.line-highlight{background:#f7ebc6;box-shadow:inset 5px 0 0 #f7d87c;z-index:0;}.line-numbers .line-numbers-rows{border-right:0px!important;top:-4px!important;}.line-numbers .line-numbers-rows span{min-height:24px!important;}.line-numbers .line-numbers-rows span:before{color:#858585!important;}</style><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>CircleCI server v4.1 overview - CircleCI</title><meta name="description" content="CircleCI server v4.1 is a continuous integration and continuous delivery (CI/CD) platform that you can install on your GCP or AWS Kubernetes cluster."/><meta property="og:title" content="CircleCI server v4.1 overview - CircleCI"/><meta data-testid="meta-noindex" name="robots" content="noindex, nofollow"/><meta property="og:description" content="CircleCI server v4.1 is a continuous integration and continuous delivery (CI/CD) platform that you can install on your GCP or AWS Kubernetes cluster."/><meta property="og:url" content="https://circleci.com/docs/server/v4.1/overview/circleci-server-overview/"/><meta property="og:image" content="https://circleci.com/docs/assets/meta/open-graph-cci-docs.jpg"/><link href="/docs/assets/meta/favicon.png" rel="icon" type="image/png"/><link rel="canonical" href="https://circleci.com/docs/server/v4.1/overview/circleci-server-overview/"/><link rel="alternate" hrefLang="en" href="https://circleci.com/docs/server/v4.1/overview/circleci-server-overview/"/><link rel="alternate" hrefLang="ja" href="https://circleci.com/docs/ja/server/v4.1/overview/circleci-server-overview/"/><link rel="alternate" hrefLang="x-default" href="https://circleci.com/docs/server/v4.1/overview/circleci-server-overview/"/><meta name="twitter:card" content="summary_large_image"/><meta property="twitter:domain" content="circleci.com"/><meta property="twitter:url" content="https://circleci.com/docs/server/v4.1/overview/circleci-server-overview/"/><meta name="twitter:title" content="CircleCI server v4.1 overview - CircleCI"/><meta name="twitter:description" content="CircleCI server v4.1 is a continuous integration and continuous delivery (CI/CD) platform that you can install on your GCP or AWS Kubernetes cluster."/><meta name="twitter:image" content="https://circleci.com/docs/assets/meta/open-graph-cci-docs.jpg"/><meta name="next-head-count" content="20"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/><link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css"/><script data-cookieconsent="marketing">(function(w,d,s,l,i){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.async=true;j.src= '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-W9HDVK');</script><script data-cookieconsent="statistics">!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware"];analytics.factory=function(e){return function(){var t=Array.prototype.slice.call(arguments);t.unshift(e);analytics.push(t);return analytics}};for(var e=0;e<analytics.methods.length;e++){var key=analytics.methods[e];analytics[key]=analytics.factory(key)}analytics.load=function(key,e){var t=document.createElement("script");t.type="text/javascript";t.async=!0;t.src="https://cci-growth-utils.s3.us-east-2.amazonaws.com/segment/analytics.js/v1/" + key + "/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(t,n);analytics._loadOptions=e};analytics._writeKey="AbgkrgN4cbRhAVEwlzMkHbwvrXnxHh35";;analytics.SNIPPET_VERSION="4.15.3"; }}();</script><script data-cookieconsent="statistics">window.analytics.load('AbgkrgN4cbRhAVEwlzMkHbwvrXnxHh35', { integrations: { All: false, Amplitude: true, Postgres: true, "Segment.io": true, Hotjar: true }, });</script><script defer="" src="https://widget.kapa.ai/kapa-widget.bundle.js" data-website-id="06cd008c-32ae-46d3-946b-211d1afd443c" data-project-name="CircleCI" data-project-color="#161616" data-project-logo="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTI7jLeuu2k66svJDmHxYKlP7Ysf7FvNbkuvzAhHEPCsvLbhcpVRnoJCm538OSv6o5uzlQ&usqp=CAU"></script><meta name="zd-site-verification" content="srxqwtrxsmb1bcawp5j3d1"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /><link rel="preload" href="https://assets-docs.circleci.com/docs/_next/static/css/95e8257575110deb.css" as="style"/><link rel="stylesheet" href="https://assets-docs.circleci.com/docs/_next/static/css/95e8257575110deb.css" data-n-p=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="https://assets-docs.circleci.com/docs/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="https://assets-docs.circleci.com/docs/_next/static/chunks/webpack-3ed24fe7b432eeb8.js" defer=""></script><script src="https://assets-docs.circleci.com/docs/_next/static/chunks/framework-9c679519b7b20335.js" defer=""></script><script src="https://assets-docs.circleci.com/docs/_next/static/chunks/main-4575c0bb82696f32.js" defer=""></script><script src="https://assets-docs.circleci.com/docs/_next/static/chunks/pages/_app-07319b956598f57c.js" defer=""></script><script src="https://assets-docs.circleci.com/docs/_next/static/chunks/103-386f95112f80b86b.js" defer=""></script><script src="https://assets-docs.circleci.com/docs/_next/static/chunks/365-1084b37a8a894cf6.js" defer=""></script><script src="https://assets-docs.circleci.com/docs/_next/static/chunks/137-74c9709c103ee7b5.js" defer=""></script><script src="https://assets-docs.circleci.com/docs/_next/static/chunks/pages/%5B...slug%5D-808ad58695d6efe0.js" defer=""></script><script src="https://assets-docs.circleci.com/docs/_next/static/9e2f0ef33c33cd80cc959c1747acd17d270b8bd8/_buildManifest.js" defer=""></script><script src="https://assets-docs.circleci.com/docs/_next/static/9e2f0ef33c33cd80cc959c1747acd17d270b8bd8/_ssgManifest.js" defer=""></script><style data-href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap">@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmSU5vAA.woff) format('woff')}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOmCnqEu92Fr1Me5g.woff) format('woff')}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmEU9vAA.woff) format('woff')}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmWUlvAA.woff) format('woff')}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmSU5fCRc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmSU5fABc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmSU5fCBc4AMP6lbBP.woff2) format('woff2');unicode-range:U+1F00-1FFF}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmSU5fBxc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmSU5fCxc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmSU5fChc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmSU5fBBc4AMP6lQ.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOmCnqEu92Fr1Mu72xKKTU1Kvnz.woff2) format('woff2');unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz.woff2) format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOmCnqEu92Fr1Mu7mxKKTU1Kvnz.woff2) format('woff2');unicode-range:U+1F00-1FFF}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOmCnqEu92Fr1Mu4WxKKTU1Kvnz.woff2) format('woff2');unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOmCnqEu92Fr1Mu7WxKKTU1Kvnz.woff2) format('woff2');unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmEU9fCRc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmEU9fCBc4AMP6lbBP.woff2) format('woff2');unicode-range:U+1F00-1FFF}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmWUlfCRc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmWUlfABc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmWUlfCBc4AMP6lbBP.woff2) format('woff2');unicode-range:U+1F00-1FFF}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmWUlfBxc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmWUlfCxc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmWUlfChc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmWUlfBBc4AMP6lQ.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}</style></head><script type="text/javascript">var circleci = {config: {"exceptionLoggerClientToken":"ca1befe4db724589813fc4a2a9642d4d","analyticsKey":"AbgkrgN4cbRhAVEwlzMkHbwvrXnxHh35","datadogRumApplicationId":"2a3e19ca-297e-4a53-a2cf-082e827d13d3","datadogRumClientToken":"pubdffb4b4dd07f1f43b42276901d58da91"}};</script><body><noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-W9HDVK" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript><div id="__next"><style data-emotion-css="1vs42if">.css-1vs42if{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:linear-gradient(to right,#F7F7F7 0%,#F7F7F7 calc(50% - 860px),#fff calc(50% - 860px),#fff 100%);}</style><style data-emotion-css="quiohg">.css-quiohg{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:linear-gradient(to right,#F7F7F7 0%,#F7F7F7 calc(50% - 860px),#fff calc(50% - 860px),#fff 100%);}</style><div class="layout css-quiohg"><style data-emotion-css="w4sqhj">.css-w4sqhj{width:100%;box-shadow:0 -6px 18px -3px #000000bd;z-index:100;background-color:#FFFFFF;position:-webkit-sticky;position:sticky;top:0px;}</style><style data-emotion-css="g79ewj">.css-g79ewj{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;width:100%;box-shadow:0 -6px 18px -3px #000000bd;z-index:100;background-color:#FFFFFF;position:-webkit-sticky;position:sticky;top:0px;}</style><div class="css-g79ewj"><style data-emotion-css="1l8dtod">.css-1l8dtod{margin:0 auto;width:100%;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:-webkit-sticky;position:sticky;padding:1rem 1rem 0.5rem 1rem;}@media (min-width:1200px){.css-1l8dtod{padding:1rem 1.5rem 0.5rem 1.5rem;}}</style><style data-emotion-css="1sjxx8s">.css-1sjxx8s{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;margin:0 auto;width:100%;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:-webkit-sticky;position:sticky;padding:1rem 1rem 0.5rem 1rem;}@media (min-width:1200px){.css-1sjxx8s{padding:1rem 1.5rem 0.5rem 1.5rem;}}</style><div data-testid="header" class="css-1sjxx8s"><style data-emotion-css="6irssd">.css-6irssd{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}</style><style data-emotion-css="1lovh0t">.css-1lovh0t{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}</style><div class="css-1lovh0t"><style data-emotion-css="1q9np79">.css-1q9np79{display:block;margin-right:0.5rem;}</style><div data-testid="header-circle-logo" class="css-1q9np79"><style data-emotion-css="si22pm">.css-si22pm{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-text-decoration:none;text-decoration:none;}</style><a href="https://circleci.com/docs/" data-testid="footer-circleci-logo" class="css-si22pm"><style data-emotion-css="1yqyrw2">.css-1yqyrw2{width:126;}</style><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 100" width="126" class="css-1yqyrw2"><circle fill="#161616" cx="30.44" cy="52.5" r="7.471"></circle><path fill="#161616" d="M30.44 21.124c-14.619 0-26.903 10-30.388 23.532-.03.119-.052.244-.052.373 0 .825.669 1.494 1.494 1.494h12.651c.603 0 1.118-.358 1.354-.873 0 0 .019-.035.025-.052 2.608-5.628 8.304-9.533 14.914-9.533 9.077 0 16.436 7.357 16.436 16.435S39.517 68.935 30.44 68.935c-6.61 0-12.305-3.905-14.914-9.532-.007-.018-.026-.053-.026-.053a1.489 1.489 0 0 0-1.354-.873H1.495c-.826 0-1.495.669-1.495 1.494 0 .129.021.254.052.373C3.537 73.876 15.821 83.876 30.44 83.876c17.329 0 31.376-14.048 31.376-31.376S47.769 21.124 30.44 21.124zM112.482 59.855h-4.268a.919.919 0 0 0-.729.361c-2.479 3.664-6.671 6.074-11.428 6.074-7.617 0-13.791-6.175-13.791-13.791 0-7.617 6.174-13.792 13.791-13.792 4.758 0 8.949 2.412 11.429 6.075a.916.916 0 0 0 .728.361h4.268a.92.92 0 0 0 .921-.919.91.91 0 0 0-.101-.413c-3.18-6.299-9.706-10.621-17.244-10.621-10.663 0-19.309 8.645-19.309 19.309 0 10.663 8.646 19.309 19.309 19.309 7.538 0 14.064-4.322 17.243-10.621a.914.914 0 0 0 .102-.413.92.92 0 0 0-.921-.919zM125.355 26.756a3.678 3.678 0 1 1-7.357 0 3.678 3.678 0 0 1 7.357 0zm-.919 43.213V34.11h-5.517v35.858a.92.92 0 0 0 .919.919h3.679a.918.918 0 0 0 .919-.918zM148.355 33.214c-5.564.262-10.008 2.921-12.887 6.981v-5.166a.92.92 0 0 0-.919-.919h-3.678a.92.92 0 0 0-.919.919v34.939c0 .508.41.919.919.919h3.678a.918.918 0 0 0 .919-.919V52.5c0-7.308 5.686-13.286 12.871-13.76a.921.921 0 0 0 .921-.922v-3.686a.92.92 0 0 0-.905-.918zM184.992 59.855h-4.268a.916.916 0 0 0-.729.361c-2.479 3.664-6.671 6.074-11.427 6.074-7.618 0-13.792-6.175-13.792-13.791 0-7.617 6.174-13.792 13.792-13.792 4.756 0 8.948 2.412 11.427 6.075a.917.917 0 0 0 .729.361h4.268a.92.92 0 0 0 .921-.919.898.898 0 0 0-.102-.413c-3.179-6.299-9.705-10.621-17.242-10.621-10.664 0-19.309 8.645-19.309 19.309 0 10.663 8.645 19.309 19.309 19.309 7.537 0 14.063-4.322 17.242-10.621a.914.914 0 0 0 .102-.413.92.92 0 0 0-.921-.919zM196.025 22.158h-3.678a.92.92 0 0 0-.919.919v46.892c0 .508.411.919.919.919h3.678a.92.92 0 0 0 .92-.919V23.077a.92.92 0 0 0-.92-.919zM221.771 33.191c-10.664 0-19.309 8.645-19.309 19.309 0 10.663 8.645 19.309 19.309 19.309 7.538 0 14.062-4.322 17.242-10.621a.913.913 0 0 0-.819-1.332h-4.267a.913.913 0 0 0-.741.379c-2.48 3.653-6.666 6.057-11.415 6.057-6.993 0-12.767-5.206-13.667-11.952h32.031a.92.92 0 0 0 .917-.873c.016-.32.026-.643.026-.966 0-10.665-8.644-19.31-19.307-19.31zm-13.292 15.631c1.61-5.83 6.949-10.114 13.292-10.114s11.681 4.284 13.292 10.114h-26.584zM294.483 21.239a5.517 5.517 0 1 0 0 11.034 5.517 5.517 0 0 0 0-11.034zm4.598 12.871v35.858a.92.92 0 0 1-.919.919h-7.356a.918.918 0 0 1-.919-.919V34.11h9.194zM265.902 71.809c9.014 0 16.576-6.176 18.706-14.524a.832.832 0 0 0 .023-.187.92.92 0 0 0-.919-.92h-7.782a.919.919 0 0 0-.834.537l-.002-.001c-1.599 3.48-5.11 5.899-9.192 5.899-5.584 0-10.113-4.527-10.113-10.113s4.529-10.113 10.113-10.113a10.11 10.11 0 0 1 9.192 5.899l.002-.002a.92.92 0 0 0 .834.538h7.782a.92.92 0 0 0 .919-.92.944.944 0 0 0-.022-.184c-2.128-8.35-9.693-14.527-18.707-14.527-10.661 0-19.308 8.646-19.308 19.309.001 10.664 8.647 19.309 19.308 19.309z"></path></svg><style data-emotion-css="mcrnfh">.css-mcrnfh{color:#161616;font-size:1.5rem;font-weight:300;-webkit-letter-spacing:0.01em;-moz-letter-spacing:0.01em;-ms-letter-spacing:0.01em;letter-spacing:0.01em;line-height:1.50;margin-left:0.5rem;text-align:center;-webkit-text-decoration:none;text-decoration:none;}@media (max-width:768px){.css-mcrnfh{display:none;}}</style><div color="#161616" class="css-mcrnfh">Docs</div></a></div><style data-emotion-css="1m3tj04">.css-1m3tj04{display:none;}@media (min-width:1200px){.css-1m3tj04{display:block;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0px 80px;}}</style><style data-emotion-css="tki8r1">.css-tki8r1{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;display:none;}@media (min-width:1200px){.css-tki8r1{display:block;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0px 80px;}}</style><div data-testid="header-search-bar" class="css-tki8r1"><style data-emotion-css="cssveg">.css-cssveg{position:relative;}</style><form novalidate="" action="" role="search" class="css-cssveg"><style data-emotion-css="409epr">.css-409epr{height:100%;position:absolute;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;left:0;}@media (min-width:1200px){.css-409epr{padding-left:1rem;}}</style><div class="css-409epr"><style data-emotion-css="19wtgi5">.css-19wtgi5{width:24px;height:24px;min-width:24px;color:currentColor;}</style><div size="24" color="currentColor" class="css-19wtgi5"><style data-emotion-css="bleycz">.css-bleycz{display:block;width:100%;}</style><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Search" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path fill-rule="evenodd" clip-rule="evenodd" d="M14 9C14 11.7614 11.7614 14 9 14C6.23858 14 4 11.7614 4 9C4 6.23858 6.23858 4 9 4C11.7614 4 14 6.23858 14 9ZM13.1922 14.6064C12.0236 15.4816 10.5723 16 9 16C5.13401 16 2 12.866 2 9C2 5.13401 5.13401 2 9 2C12.866 2 16 5.13401 16 9C16 10.5723 15.4816 12.0236 14.6064 13.1922L21.7019 20.2877C22.0924 20.6782 22.0924 21.3114 21.7019 21.7019C21.3114 22.0924 20.6782 22.0924 20.2877 21.7019L13.1922 14.6064Z"></path></svg></div></div><style data-emotion-css="xxqz7m">.css-xxqz7m{height:100%;position:absolute;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;right:0;}@media (min-width:1200px){.css-xxqz7m{display:none;padding-right:0.75rem;}}</style><div data-testid="search-documentation-reset" class="css-xxqz7m"><style data-emotion-css="1pgy7j">.css-1pgy7j{width:28px;height:28px;min-width:28px;color:currentColor;}</style><div size="28" color="currentColor" class="css-1pgy7j"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Cancel" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M17.9865 7.45711C18.3771 7.06658 18.3771 6.43342 17.9865 6.04289C17.596 5.65237 16.9628 5.65237 16.5723 6.04289L12.0294 10.5858L7.48653 6.04289C7.096 5.65237 6.46284 5.65237 6.07231 6.04289C5.68179 6.43342 5.68179 7.06658 6.07231 7.45711L10.6152 12L6.07231 16.5429C5.68179 16.9334 5.68179 17.5666 6.07231 17.9571C6.46284 18.3476 7.096 18.3476 7.48653 17.9571L12.0294 13.4142L16.5723 17.9571C16.9628 18.3476 17.596 18.3476 17.9865 17.9571C18.377 17.5666 18.377 16.9334 17.9865 16.5429L13.4436 12L17.9865 7.45711Z"></path></svg></div></div><style data-emotion-css="th0ig7">.css-th0ig7{width:100%;border-color:#BFBFBF;border-style:solid;border-width:0px;border-radius:0.25rem;padding:0 2rem;background-color:#FFFFFF;color:#161616;font-size:1rem;line-height:1.50;outline:0;}@media (min-width:1200px){.css-th0ig7{padding:0.5rem 3rem;border-width:1px;}}.css-th0ig7::-webkit-input-placeholder{color:#6A6A6A;}.css-th0ig7::-moz-placeholder{color:#6A6A6A;}.css-th0ig7:-ms-input-placeholder{color:#6A6A6A;}.css-th0ig7::placeholder{color:#6A6A6A;}</style><style data-emotion-css="1cvkw1b">.css-1cvkw1b{height:auto;width:100%;padding:0.5rem 1rem;border:1px solid rgba(191,191,191,1);background-color:rgba(251,251,251,1);border-radius:4px;line-height:1.50;font-size:1rem;font-weight:400;color:rgba(22,22,22,1);box-sizing:border-box;width:100%;border-color:#BFBFBF;border-style:solid;border-width:0px;border-radius:0.25rem;padding:0 2rem;background-color:#FFFFFF;color:#161616;font-size:1rem;line-height:1.50;outline:0;}.css-1cvkw1b:not(:placeholder-shown){background-color:rgba(255,255,255,1);}.css-1cvkw1b:disabled{background-color:rgba(255,255,255,1);border-color:rgba(212,212,212,1);color:rgba(149,149,149,1);}.css-1cvkw1b:disabled::-webkit-input-placeholder{color:rgba(149,149,149,1);opacity:1;}.css-1cvkw1b:disabled::-moz-placeholder{color:rgba(149,149,149,1);opacity:1;}.css-1cvkw1b:disabled:-ms-input-placeholder{color:rgba(149,149,149,1);opacity:1;}.css-1cvkw1b:disabled::placeholder{color:rgba(149,149,149,1);opacity:1;}.css-1cvkw1b::-webkit-input-placeholder{color:rgba(106,106,106,1);opacity:1;}.css-1cvkw1b::-moz-placeholder{color:rgba(106,106,106,1);opacity:1;}.css-1cvkw1b:-ms-input-placeholder{color:rgba(106,106,106,1);opacity:1;}.css-1cvkw1b::placeholder{color:rgba(106,106,106,1);opacity:1;}.css-1cvkw1b:focus{border:2px solid rgba(26,102,247,1);outline-color:rgba(26,102,247,1);background-color:rgba(255,255,255,1);}.css-1cvkw1b:hover:enabled{border-color:rgba(52,52,52,1);background-color:rgba(255,255,255,1);}@media (min-width:1200px){.css-1cvkw1b{padding:0.5rem 3rem;border-width:1px;}}.css-1cvkw1b::-webkit-input-placeholder{color:#6A6A6A;}.css-1cvkw1b::-moz-placeholder{color:#6A6A6A;}.css-1cvkw1b:-ms-input-placeholder{color:#6A6A6A;}.css-1cvkw1b::placeholder{color:#6A6A6A;}</style><input type="text" placeholder="Search" data-testid="search-documentation-inputbox" class="css-1cvkw1b" value=""/></form></div></div><style data-emotion-css="11zozgc">.css-11zozgc{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:none;}@media (min-width:1200px){.css-11zozgc{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}}</style><style data-emotion-css="1gf5w7k">.css-1gf5w7k{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:none;}@media (min-width:1200px){.css-1gf5w7k{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}}</style><div data-testid="header-default-group" class="css-1gf5w7k"><div class="css-cssveg"><style data-emotion-css="dsh0zb">.css-dsh0zb{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#161616;background-color:transparent;background:none;border:none;margin-top:0.125rem;cursor:pointer;}.css-dsh0zb:hover{-webkit-filter:invert(39%) sepia(99%) saturate(634%) hue-rotate(105deg) brightness(83%) contrast(97%);filter:invert(39%) sepia(99%) saturate(634%) hue-rotate(105deg) brightness(83%) contrast(97%);}@media (max-width:768px){.css-dsh0zb:hover{-webkit-filter:none;filter:none;}}</style><button data-testid="globe-btn" class="css-dsh0zb"><style data-emotion-css="14mcfqm">.css-14mcfqm{height:1.5rem;width:1.5rem;background-color:transparent;color:#161616;}</style><div class="css-14mcfqm"><svg fill="none" aria-label="Globe" role="img" height="28px" width="28px" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><g stroke="currentColor" stroke-miterlimit="10" stroke-width="1.25"><path d="m9.00001 17.3077c4.58819 0 8.30769-3.7195 8.30769-8.30771s-3.7195-8.307693-8.30769-8.307693c-4.58821 0-8.307688 3.719483-8.307688 8.307693s3.719478 8.30771 8.307688 8.30771z"></path><path d="m9 17.3077c1.7639 0 3.1938-3.7195 3.1938-8.30771s-1.4299-8.307693-3.1938-8.307693c-1.76391 0-3.19385 3.719483-3.19385 8.307693s1.42994 8.30771 3.19385 8.30771z"></path><path d="m.692322 6.44307h16.615378"></path><path d="m.692322 11.5569h16.615378"></path></g></svg></div></button></div><style data-emotion-css="1syyx6e">.css-1syyx6e{padding-left:1.5rem;}@media (max-width:768px){.css-1syyx6e{margin:1.5rem 1rem;}}</style><div class="css-1syyx6e"><style data-emotion-css="h3y3qz">.css-h3y3qz{background-color:rgba(4,155,74,1) !important;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;height:48px;font-size:18px;line-height:1.5rem !important;font-weight:700;font-style:normal;border-radius:0.25rem;border:none;-webkit-transition:background-color 300ms;transition:background-color 300ms;-webkit-flex:auto 0 0;-ms-flex:auto 0 0;flex:auto 0 0;}.css-h3y3qz:hover:enabled{cursor:pointer;}.css-h3y3qz:disabled{opacity:0.5;cursor:not-allowed;}.css-h3y3qz:hover{background-color:rgba(4,140,67,1) !important;}.css-h3y3qz:active{background-color:#00701B !important;}</style><style data-emotion-css="1ylpp6l">.css-1ylpp6l{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0.5rem 1rem;font-size:0.875rem;font-weight:500;line-height:1.7142857143;border-radius:4px;border:none;-webkit-transition:background-color 300ms;transition:background-color 300ms;-webkit-flex:auto 0 0;-ms-flex:auto 0 0;flex:auto 0 0;color:#FFFFFF;background-color:#1A66F7;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;cursor:pointer;-webkit-text-decoration:none;text-decoration:none;background-color:rgba(4,155,74,1) !important;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;height:48px;font-size:18px;line-height:1.5rem !important;font-weight:700;font-style:normal;border-radius:0.25rem;border:none;-webkit-transition:background-color 300ms;transition:background-color 300ms;-webkit-flex:auto 0 0;-ms-flex:auto 0 0;flex:auto 0 0;}.css-1ylpp6l:hover:enabled{cursor:pointer;}.css-1ylpp6l:disabled{opacity:0.5;cursor:not-allowed;}.css-1ylpp6l:focus{outline:none;box-shadow:0px 0px 0 1px #FFFFFF, 0px 0px 0px 0.125rem #3495db, 0px 0px 0.125rem 0.125rem #3495db;}.css-1ylpp6l:focus:disabled{box-shadow:none;}.css-1ylpp6l:hover:enabled{background-color:#2152E5;}.css-1ylpp6l:active{background-color:#003DB8;}.css-1ylpp6l:hover:enabled{cursor:pointer;}.css-1ylpp6l:disabled{opacity:0.5;cursor:not-allowed;}.css-1ylpp6l:hover{background-color:rgba(4,140,67,1) !important;}.css-1ylpp6l:active{background-color:#00701B !important;}</style><a href="https://circleci.com/signup/" class="css-1ylpp6l">Start Building for Free</a></div></div><style data-emotion-css="ml1eyx">.css-ml1eyx{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-height:1.5rem;height:1.5rem;}@media (min-width:1200px){.css-ml1eyx{display:none;}}</style><style data-emotion-css="qlr832">.css-qlr832{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-height:1.5rem;height:1.5rem;}@media (min-width:1200px){.css-qlr832{display:none;}}</style><div data-testid="header-mobile-group" class="css-qlr832"><style data-emotion-css="hmc50w">.css-hmc50w{display:inline-block;padding-right:0.5rem;cursor:pointer;width:2rem;-webkit-transition:opacity 0.25s ease;transition:opacity 0.25s ease;}</style><style data-emotion-css="1qtr1z7">.css-1qtr1z7{width:24px;height:24px;min-width:24px;color:currentColor;display:inline-block;padding-right:0.5rem;cursor:pointer;width:2rem;-webkit-transition:opacity 0.25s ease;transition:opacity 0.25s ease;}</style><div size="24" color="currentColor" class="css-1qtr1z7"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Search" data-testid="header-mobile-search-button" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path fill-rule="evenodd" clip-rule="evenodd" d="M14 9C14 11.7614 11.7614 14 9 14C6.23858 14 4 11.7614 4 9C4 6.23858 6.23858 4 9 4C11.7614 4 14 6.23858 14 9ZM13.1922 14.6064C12.0236 15.4816 10.5723 16 9 16C5.13401 16 2 12.866 2 9C2 5.13401 5.13401 2 9 2C12.866 2 16 5.13401 16 9C16 10.5723 15.4816 12.0236 14.6064 13.1922L21.7019 20.2877C22.0924 20.6782 22.0924 21.3114 21.7019 21.7019C21.3114 22.0924 20.6782 22.0924 20.2877 21.7019L13.1922 14.6064Z"></path></svg></div><style data-emotion-css="pdp0ok">.css-pdp0ok{height:24px;width:1px;background:#161616;}</style><div class="css-pdp0ok"></div><style data-emotion-css="1j3dzco">.css-1j3dzco{background:none;border:none;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:64px;width:40px;padding-right:0px;padding-left:0px;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-right:-8px;cursor:pointer;color:#161616;}</style><button class="css-1j3dzco"><div size="24" color="currentColor" class="css-19wtgi5"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Menu" data-testid="header-mobile-menu-icon" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M3 7H21C21.5523 7 22 6.55228 22 6C22 5.44772 21.5523 5 21 5H3C2.44772 5 2 5.44772 2 6C2 6.55228 2.44772 7 3 7ZM3 13H21C21.5523 13 22 12.5523 22 12C22 11.4477 21.5523 11 21 11H3C2.44772 11 2 11.4477 2 12C2 12.5523 2.44772 13 3 13ZM21 19H3C2.44772 19 2 18.5523 2 18C2 17.4477 2.44772 17 3 17H21C21.5523 17 22 17.4477 22 18C22 18.5523 21.5523 19 21 19Z"></path></svg></div></button></div></div><style data-emotion-css="9496lj">.css-9496lj{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;min-height:50px;}</style><div data-testid="header-navbar" class="css-9496lj"><style data-emotion-css="acydq">.css-acydq{padding:0 1rem;}@media (min-width:1200px){.css-acydq{padding:0 1.5rem;}}</style><style data-emotion-css="wt4rcw">.css-wt4rcw{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding:0 1rem;}@media (min-width:1200px){.css-wt4rcw{padding:0 1.5rem;}}</style><div class="css-wt4rcw"><style data-emotion-css="1666bo6">.css-1666bo6 > div{border-bottom-width:0;}</style><div id="navbar-tablist" role="tablist" aria-label="Navigation Tabs" class="css-1666bo6"><style data-emotion-css="1h7v07b">.css-1h7v07b{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;border-bottom-color:#D4D4D4;border-bottom-width:1px;border-bottom-style:solid;}</style><div class="css-1h7v07b"><style data-emotion-css="vu8356">.css-vu8356{-webkit-text-decoration:none;text-decoration:none;color:#6A6A6A;}.css-vu8356:hover{color:#161616;}.css-vu8356:active{color:#161616;}</style><a href="/developer/" class="css-vu8356"><style data-emotion-css="19fv6ph">.css-19fv6ph{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:56px;color:#6A6A6A;font-weight:500;font-size:0.875rem;border:none;margin:0;padding:1rem 0.75rem;background-color:#FFFFFF;line-height:1.50;text-transform:uppercase;cursor:pointer;}.css-19fv6ph:hover{color:#161616;}.css-19fv6ph[aria-selected='true']{color:#161616;font-weight:700;box-shadow:inset 0 -0.25rem #1A66F7;}.js-focus-visible .css-19fv6ph:focus{outline:none;z-index:1;box-shadow:0 0 0.25rem #1A66F7, -1px 1px 0 #1A66F7,1px -1px 0 #1A66F7, 1px 1px 0 #1A66F7,-1px -1px 0 #1A66F7;}.js-focus-visible .css-19fv6ph:focus.css-19fv6ph[aria-selected='true']{box-shadow:0 0 0.25rem #1A66F7, -1px 1px 0 #1A66F7,1px -1px 0 #1A66F7, 1px 1px 0 #1A66F7,-1px -1px 0 #1A66F7, inset 0 -0.25rem #1A66F7;}.js-focus-visible .css-19fv6ph:focus:not(.focus-visible),.js-focus-visible .css-19fv6ph:focus.css-19fv6ph[aria-selected='true']:not(.focus-visible){outline:none;box-shadow:inset 0 -0.25rem #1A66F7;}</style><button id="home" tabindex="0" aria-selected="false" role="tab" type="button" class="css-19fv6ph">Home</button></a><a href="/docs/" class="css-vu8356"><button id="docs" tabindex="0" aria-selected="true" role="tab" type="button" class="css-19fv6ph">Docs</button></a><a href="/developer/orbs/" class="css-vu8356"><button id="orbs" tabindex="0" aria-selected="false" role="tab" type="button" class="css-19fv6ph">Orbs</button></a><a href="/developer/images/" class="css-vu8356"><button id="images" tabindex="0" aria-selected="false" role="tab" type="button" class="css-19fv6ph">Images</button></a></div></div><style data-emotion-css="k9jl6u">.css-k9jl6u{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:none;}.css-k9jl6u span:last-of-type{padding-right:0;}@media (min-width:1200px){.css-k9jl6u{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}}</style><style data-emotion-css="1chu1ls">.css-1chu1ls{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:none;}.css-1chu1ls span:last-of-type{padding-right:0;}@media (min-width:1200px){.css-1chu1ls{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}}</style><div class="css-1chu1ls"><style data-emotion-css="2wgwcz">.css-2wgwcz{padding-right:1.5rem;font-family:'Roboto';}.css-2wgwcz > a{color:#6A6A6A;}.css-2wgwcz > a:hover{color:#161616;}</style><span class="css-2wgwcz"><style data-emotion-css="x7gnkn">.css-x7gnkn{color:#0078CA;-webkit-text-decoration:none;text-decoration:none;font-size:1rem;line-height:1.50;font-weight:500;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-column-gap:3px;column-gap:3px;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}.css-x7gnkn:hover{color:#0062B0;-webkit-text-decoration:underline;text-decoration:underline;}</style><a href="https://circleci.com/" target="_blank" rel="noopener noreferrer" data-testid="link" class="css-x7gnkn">CircleCI.com</a></span><span class="css-2wgwcz"><a href="https://circleci.com/training/" target="_blank" rel="noopener noreferrer" data-testid="link" class="css-x7gnkn">Academy</a></span><span class="css-2wgwcz"><a href="https://circleci.com/blog/" target="_blank" rel="noopener noreferrer" data-testid="link" class="css-x7gnkn">Blog</a></span><span class="css-2wgwcz"><a href="https://discuss.circleci.com/" target="_blank" rel="noopener noreferrer" data-testid="link" class="css-x7gnkn">Community</a></span><span class="css-2wgwcz"><a href="https://support.circleci.com/hc/en-us/" target="_blank" rel="noopener noreferrer" data-testid="link" class="css-x7gnkn">Support</a></span></div></div></div></div><style data-emotion-css="1alxkfq">.css-1alxkfq{background-color:#008647;height:2px;width:0%;margin:0;padding:0;-webkit-transition-property:width;transition-property:width;-webkit-transition-duration:0.1s;transition-duration:0.1s;-webkit-transition-timing-function:linear;transition-timing-function:linear;position:fixed;top:122px;left:0;z-index:45;}@media (min-width:1200px){.css-1alxkfq{top:128px;}}</style><div width="0" height="2" class="css-1alxkfq"></div><style data-emotion-css="1yce0ae">.css-1yce0ae{width:100%;top:128;}</style><style data-emotion-css="1cibq5g">.css-1cibq5g{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;width:100%;top:128;}</style><div class="css-1cibq5g"></div><style data-emotion-css="3giiur">.css-3giiur{width:100%;max-width:1920px;margin:auto;}</style><style data-emotion-css="dgbsjx">.css-dgbsjx{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-flex:inherit;-webkit-flex-grow:inherit;-ms-flex-positive:inherit;flex-grow:inherit;top:128px;width:100%;max-width:1920px;margin:auto;}</style><div class="css-dgbsjx"><style data-emotion-css="1y2jjs3">.css-1y2jjs3{display:none;}@media (min-width:1200px){.css-1y2jjs3{display:block;}}</style><style data-emotion-css="klrqbz">.css-klrqbz{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex:1;-ms-flex:1;flex:1;display:none;}@media screen and (min-width:480px){.css-klrqbz{-webkit-flex:1;-ms-flex:1;flex:1;}}@media screen and (min-width:768px){.css-klrqbz{-webkit-flex:0 0 288px;-ms-flex:0 0 288px;flex:0 0 288px;}}@media (min-width:1200px){.css-klrqbz{display:block;}}</style><nav class="css-klrqbz"><style data-emotion-css="11fl4l6">.css-11fl4l6{width:100%;background:white;}.css-11fl4l6 ul{padding-left:0.75rem;}.css-11fl4l6 ul + subSection{margin-top:0.5rem;}.css-11fl4l6 li{list-style-type:none;}@media (min-width:1200px){.css-11fl4l6{background:#f7f7f7;border-right:1px solid #e2e0e0;height:calc(100vh - 128px);overflow-y:scroll;padding:0px 22px 0px 0px;position:fixed;width:288px;}}</style><div class="css-11fl4l6"><style data-emotion-css="hce1c">.css-hce1c{padding-left:0px !important;margin-top:-1.5rem;}@media (min-width:1200px){.css-hce1c{padding-left:1.5rem !important;margin-top:0px;}}</style><ul data-testid="sidebar-drawers" class="css-hce1c"><style data-emotion-css="13svt41">.css-13svt41{cursor:pointer;margin-top:1.5rem;position:relative;list-style-type:none;font-size:14px;font-weight:600;color:#555;}</style><li class="css-13svt41"><style data-emotion-css="1sg2lsz">.css-1sg2lsz{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}</style><div class="css-1sg2lsz"><style data-emotion-css="1m34rt5">.css-1m34rt5{margin-right:6px;width:24px;height:24px;}</style><img src="/docs/assets/img/icons/sidebar/circle-logo.svg" alt="About CircleCI icon" class="css-1m34rt5"/><style data-emotion-css="10tjyd0">.css-10tjyd0{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}</style><div class="css-10tjyd0">About CircleCI</div><style data-emotion-css="1tezdrc">.css-1tezdrc{padding:0.25rem;-webkit-transition:-webkit-transform 0.2s ease;-webkit-transition:transform 0.2s ease;transition:transform 0.2s ease;}</style><style data-emotion-css="1vlg0km">.css-1vlg0km{width:24px;height:24px;min-width:24px;color:#333;padding:0.25rem;-webkit-transition:-webkit-transform 0.2s ease;-webkit-transition:transform 0.2s ease;transition:transform 0.2s ease;}</style><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/continue.svg" alt="Getting started icon" class="css-1m34rt5"/><div class="css-10tjyd0">Getting started</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/changelog.svg" alt="Reference icon" class="css-1m34rt5"/><div class="css-10tjyd0">Reference</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/pipeline.svg" alt="Orchestrate and trigger icon" class="css-1m34rt5"/><div class="css-10tjyd0">Orchestrate and trigger</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/builds.svg" alt="Execute jobs on managed compute resources icon" class="css-1m34rt5"/><div class="css-10tjyd0">Execute jobs on managed compute resources</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/build-agent.svg" alt="Execute jobs on self-hosted runners icon" class="css-1m34rt5"/><div class="css-10tjyd0">Execute jobs on self-hosted runners</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/passed.svg" alt="Test icon" class="css-1m34rt5"/><div class="css-10tjyd0">Test</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/getting-started-new.svg" alt="Deploy icon" class="css-1m34rt5"/><div class="css-10tjyd0">Deploy</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/release.svg" alt="Release icon" class="css-1m34rt5"/><div class="css-10tjyd0">Release</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/sparkle.svg" alt="Optimize icon" class="css-1m34rt5"/><div class="css-10tjyd0">Optimize</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/insights-new.svg" alt="Project Insights icon" class="css-1m34rt5"/><div class="css-10tjyd0">Project Insights</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/orb.svg" alt="Package and re-use config with orbs icon" class="css-1m34rt5"/><div class="css-10tjyd0">Package and re-use config with orbs</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/avatar.svg" alt="Manage roles, permissions, and authentication icon" class="css-1m34rt5"/><div class="css-10tjyd0">Manage roles, permissions, and authentication</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/key.svg" alt="Manage security and secrets icon" class="css-1m34rt5"/><div class="css-10tjyd0">Manage security and secrets</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/lock.svg" alt="Manage config policies icon" class="css-1m34rt5"/><div class="css-10tjyd0">Manage config policies</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/webhook.svg" alt="Integration icon" class="css-1m34rt5"/><div class="css-10tjyd0">Integration</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/code.svg" alt="Developer toolkit icon" class="css-1m34rt5"/><div class="css-10tjyd0">Developer toolkit</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/admin-new.svg" alt="Server administration v4.7 icon" class="css-1m34rt5"/><div class="css-10tjyd0">Server administration v4.7</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/admin-new.svg" alt="Server administration v4.6 icon" class="css-1m34rt5"/><div class="css-10tjyd0">Server administration v4.6</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/admin-new.svg" alt="Server administration v4.5 icon" class="css-1m34rt5"/><div class="css-10tjyd0">Server administration v4.5</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/admin-new.svg" alt="Server administration v4.4 icon" class="css-1m34rt5"/><div class="css-10tjyd0">Server administration v4.4</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/admin-new.svg" alt="Server administration v4.3 icon" class="css-1m34rt5"/><div class="css-10tjyd0">Server administration v4.3</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/admin-new.svg" alt="Server administration v4.2 icon" class="css-1m34rt5"/><div class="css-10tjyd0">Server administration v4.2</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/admin-new.svg" alt="Server administration v4.1 icon" class="css-1m34rt5"/><div class="css-10tjyd0">Server administration v4.1</div><style data-emotion-css="nnsjfc">.css-nnsjfc{padding:0.25rem;-webkit-transition:-webkit-transform 0.2s ease;-webkit-transition:transform 0.2s ease;transition:transform 0.2s ease;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);}</style><style data-emotion-css="a2qlhg">.css-a2qlhg{width:24px;height:24px;min-width:24px;color:#333;padding:0.25rem;-webkit-transition:-webkit-transform 0.2s ease;-webkit-transition:transform 0.2s ease;transition:transform 0.2s ease;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);}</style><div size="24" color="#333" class="css-a2qlhg"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div><style data-emotion-css="i6zvb9">.css-i6zvb9{list-style-type:none;}</style><ul class="css-i6zvb9"><style data-emotion-css="1n64q0m">.css-1n64q0m{margin-top:16px;}</style><div class="subSection css-1n64q0m"><style data-emotion-css="4h1kga">.css-4h1kga{color:#555555;display:inline-block;font-size:13px;font-weight:500;-webkit-letter-spacing:0.5px;-moz-letter-spacing:0.5px;-ms-letter-spacing:0.5px;letter-spacing:0.5px;margin:0.5rem 0 0 1rem;text-transform:uppercase;}.css-4h1kga a{-webkit-text-decoration:none;text-decoration:none;color:#555555;font-size:12px;}.css-4h1kga a:hover{color:#27a0b6;}</style><div class="css-4h1kga">Server v4.1 overview</div><ul class="css-i6zvb9"><style data-emotion-css="7cjp2v">.css-7cjp2v{margin-top:0.5rem;}.css-7cjp2v svg{fill:#555555;}.css-7cjp2v:hover svg{fill:#0062b0;}</style><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/overview/circleci-server-overview/" class="css-x7gnkn"><style data-emotion-css="1ouqygm">.css-1ouqygm{color:inherit;margin:0 0 0 1rem;display:inline-block;margin-left:30px;font-weight:400;font-size:0.875rem;-webkit-text-decoration:none;text-decoration:none;}.css-1ouqygm:hover{color:#0062b0;}</style><span class="css-1ouqygm">CircleCI server v4.1 overview</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/overview/release-notes/" class="css-x7gnkn"><style data-emotion-css="8bro8e">.css-8bro8e{color:#555555;margin:0 0 0 1rem;display:inline-block;margin-left:30px;font-weight:400;font-size:0.875rem;-webkit-text-decoration:none;text-decoration:none;}.css-8bro8e:hover{color:#0062b0;}</style><span class="css-8bro8e">Release notes</span></a></span></li></ul></div><div class="subSection css-1n64q0m"><div class="css-4h1kga">Server v4.1 installation</div><ul class="css-i6zvb9"><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/installation/phase-1-prerequisites/" class="css-x7gnkn"><span class="css-8bro8e">Phase 1 - Prerequisites</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/installation/phase-2-core-services/" class="css-x7gnkn"><span class="css-8bro8e">Phase 2 - Core</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/installation/phase-3-execution-environments/" class="css-x7gnkn"><span class="css-8bro8e">Phase 3 - Execution</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/installation/phase-4-post-installation/" class="css-x7gnkn"><span class="css-8bro8e">Phase 4 - Post-installation</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/installation/hardening-your-cluster/" class="css-x7gnkn"><span class="css-8bro8e">Hardening your cluster</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/installation/installing-server-behind-a-proxy/" class="css-x7gnkn"><span class="css-8bro8e">Installing server behind a proxy</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/installation/upgrade-server/" class="css-x7gnkn"><span class="css-8bro8e">Upgrade server v4.x</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/installation/installation-reference/" class="css-x7gnkn"><span class="css-8bro8e">Installation reference</span></a></span></li></ul></div><div class="subSection css-1n64q0m"><div class="css-4h1kga">Air-gapped installation v4.1</div><ul class="css-i6zvb9"><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/air-gapped-installation/phase-1-prerequisites/" class="css-x7gnkn"><span class="css-8bro8e">Phase 1 - Prerequisites</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/air-gapped-installation/phase-2-configure-object-storage/" class="css-x7gnkn"><span class="css-8bro8e">Phase 2 - Configure object storage</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/air-gapped-installation/phase-3-install-circleci-server/" class="css-x7gnkn"><span class="css-8bro8e">Phase 3 - Install CircleCI server</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/air-gapped-installation/phase-4-configure-nomad-clients/" class="css-x7gnkn"><span class="css-8bro8e">Phase 4 - Configure Nomad clients</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/air-gapped-installation/phase-5-test-your-installation/" class="css-x7gnkn"><span class="css-8bro8e">Phase 5 - Test installation</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/air-gapped-installation/additional-considerations/" class="css-x7gnkn"><span class="css-8bro8e">Additional considerations</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/air-gapped-installation/example-values/" class="css-x7gnkn"><span class="css-8bro8e">Example values.yaml</span></a></span></li></ul></div><div class="subSection css-1n64q0m"><div class="css-4h1kga">Server v4.1 operations</div><ul class="css-i6zvb9"><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/operator/operator-overview/" class="css-x7gnkn"><span class="css-8bro8e">Operator overview</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/operator/introduction-to-nomad-cluster-operation/" class="css-x7gnkn"><span class="css-8bro8e">Introduction to Nomad cluster operation</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/operator/managing-user-accounts/" class="css-x7gnkn"><span class="css-8bro8e">Managing user accounts</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/operator/managing-orbs/" class="css-x7gnkn"><span class="css-8bro8e">Managing orbs</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/operator/manage-virtual-machines-with-vm-service/" class="css-x7gnkn"><span class="css-8bro8e">Manage virtual machines with VM service</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/operator/configuring-external-services/" class="css-x7gnkn"><span class="css-8bro8e">Configuring external services</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/operator/expanding-internal-database-volumes/" class="css-x7gnkn"><span class="css-8bro8e">Expanding internal database volumes</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/operator/managing-load-balancers/" class="css-x7gnkn"><span class="css-8bro8e">Managing load balancers</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/operator/user-authentication/" class="css-x7gnkn"><span class="css-8bro8e">User authentication</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/operator/managing-build-artifacts/" class="css-x7gnkn"><span class="css-8bro8e">Managing build artifacts</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/operator/usage-data-collection/" class="css-x7gnkn"><span class="css-8bro8e">Usage data collection</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/operator/circleci-server-security-features/" class="css-x7gnkn"><span class="css-8bro8e">CircleCI server security features</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/operator/application-lifecycle/" class="css-x7gnkn"><span class="css-8bro8e">Application lifecycle</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/operator/troubleshooting-and-support/" class="css-x7gnkn"><span class="css-8bro8e">Troubleshooting and support</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/operator/backup-and-restore/" class="css-x7gnkn"><span class="css-8bro8e">Backup and restore</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/operator/upgrade-mongo/" class="css-x7gnkn"><span class="css-8bro8e">Upgrade MongoDB</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/server/v4.1/operator/faq/" class="css-x7gnkn"><span class="css-8bro8e">FAQs</span></a></span></li></ul></div></ul></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/plans-outline.svg" alt="Plans and pricing icon" class="css-1m34rt5"/><div class="css-10tjyd0">Plans and pricing</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/changelog.svg" alt="Contributing to CircleCI docs icon" class="css-1m34rt5"/><div class="css-10tjyd0">Contributing to CircleCI docs</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li></ul></div></nav><style data-emotion-css="lfzoxb">.css-lfzoxb{padding:3rem 2.5rem 0 2.5rem;}@media (max-width:768px){.css-lfzoxb{padding:1.5rem 1rem;}}</style><style data-emotion-css="1xwsbgo">.css-1xwsbgo{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex:1;-ms-flex:1;flex:1;padding:3rem 2.5rem 0 2.5rem;}@media (max-width:768px){.css-1xwsbgo{padding:1.5rem 1rem;}}</style><main class="css-1xwsbgo"><article> <style data-emotion-css="ha3tto">.css-ha3tto{color:#555555;font-size:1rem;line-height:1.5rem;}.css-ha3tto .circle-green{color:#04aa4e;}.css-ha3tto .circle-red{color:#c13937;}.css-ha3tto p{margin-top:0px;margin-bottom:10px;}.css-ha3tto ol,.css-ha3tto ul{margin-bottom:10px;margin-top:0;}.css-ha3tto .table-striped{margin:1.5rem 0;}.css-ha3tto .table{border-collapse:collapse;border-spacing:0;max-width:100%;width:100%;table-layout:auto;}.css-ha3tto .table thead{background:#F7F7F7;}.css-ha3tto .table th,.css-ha3tto .table td{line-height:1.50;padding:0.5rem;text-align:left;vertical-align:top;}.css-ha3tto .table th{border-bottom:1px solid #E3E3E3;color:#555555;font-weight:500;font-size:1rem;}.css-ha3tto .table tr th:first-of-type code.language-plaintext,.css-ha3tto .table tr td:first-of-type code.language-plaintext{white-space:nowrap !important;}.css-ha3tto .table.table-striped > tbody > tr:nth-of-type(even){background-color:#F7F7F7;}.css-ha3tto .table.table-no-background > tbody > tr:nth-of-type(even){background:none;}.css-ha3tto .table.table-migrating-page tr > td:not(:only-child):first-of-type{padding-left:0;padding-right:0.25rem;}.css-ha3tto .table.table-migrating-page tr>td+td{padding-left:0.25rem;padding-right:0;}.css-ha3tto .table.table-migrating-page tbody > tr:nth-of-type(even){background:none;}.css-ha3tto .table td :not(pre)>code{word-wrap:normal;}.css-ha3tto hr{border:0;border-top:1px solid #E3E3E3;width:100%;margin:1.5rem 0;}.css-ha3tto .video-wrapper,.css-ha3tto .videoblock{height:0;padding-bottom:56.25%;padding-top:25px;position:relative;margin:1.25rem 0;}</style><div class="css-ha3tto"><style data-emotion-css="2va2ht">.css-2va2ht{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;}</style><div class="css-2va2ht"><style data-emotion-css="qcooo9">.css-qcooo9{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;}</style><div class="css-qcooo9"><style data-emotion-css="16173t9">.css-16173t9{max-width:calc( 960px - 48px - 48px );}@media (min-width:1300px){.css-16173t9{width:calc(100% - 400px);}}</style><div class="css-16173t9"><section data-testid="content-page-heading"><style data-emotion-css="1d5kwgy">.css-1d5kwgy{margin-bottom:1rem;margin-top:0;font-size:2.25rem;font-weight:500;color:#161616;line-height:52px;}</style><h1 class="css-1d5kwgy">CircleCI server v4.1 overview</h1><style data-emotion-css="12ut1uv">.css-12ut1uv{background:#FFFFFF;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border:1px solid #D4D4D4;border-radius:4px;box-sizing:border-box;margin:1rem 0;font-size:15px;}@media (max-width:891px){.css-12ut1uv{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding:0.5rem;}}</style><div class="css-12ut1uv"><style data-emotion-css="tkbaat">.css-tkbaat{padding:0.125rem;margin-left:0.5rem;margin-right:1rem;}@media (max-width:891px){.css-tkbaat{margin-left:0.2em;}}</style><style data-emotion-css="ib8kn6">.css-ib8kn6{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding:0.125rem;margin-left:0.5rem;margin-right:1rem;}@media (max-width:891px){.css-ib8kn6{margin-left:0.2em;}}</style><div class="css-ib8kn6"><style data-emotion-css="2iw00g">.css-2iw00g{width:1.5rem;margin:0.5rem;}</style><div class="css-2iw00g"><div size="24" color="currentColor" class="css-19wtgi5"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Duration" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M12 20C15.866 20 19 16.866 19 13C19 9.13401 15.866 6 12 6C8.13401 6 5 9.13401 5 13C5 16.866 8.13401 20 12 20ZM12 22C7.02944 22 3 17.9706 3 13C3 8.02944 7.02944 4 12 4C16.9706 4 21 8.02944 21 13C21 17.9706 16.9706 22 12 22ZM11 1H13C13.5523 1 14 1.44772 14 2C14 2.55228 13.5523 3 13 3H11C10.4477 3 10 2.55228 10 2C10 1.44772 10.4477 1 11 1ZM19.7782 3.80761L21.1924 5.22183C21.5829 5.61235 21.5829 6.24551 21.1924 6.63604C20.8019 7.02656 20.1687 7.02656 19.7782 6.63604L18.364 5.22183C17.9734 4.8313 17.9734 4.19814 18.364 3.80761C18.7545 3.41709 19.3876 3.41709 19.7782 3.80761ZM13 9V12.5858L14.7071 14.2929C15.0976 14.6834 15.0976 15.3166 14.7071 15.7071C14.3166 16.0976 13.6834 16.0976 13.2929 15.7071L11.2929 13.7071C11.1054 13.5196 11 13.2652 11 13V9C11 8.44772 11.4477 8 12 8C12.5523 8 13 8.44772 13 9Z"></path></svg></div></div><style data-emotion-css="gw0ftn">.css-gw0ftn > span{line-height:1.5rem;}</style><div data-tip="true" data-for="readUpdateTime" class="css-gw0ftn"><span data-testid="git-file-link"><style data-emotion-css="qjll1l">.css-qjll1l a{font-size:15px;}</style><span class="css-qjll1l"><a href="https://github.com/circleci/circleci-docs/commits/master/jekyll/_cci2/server/v4.1/overview/circleci-server-overview.adoc" target="_blank" rel="noopener noreferrer" data-testid="external-git-file-link" class="css-x7gnkn">2 months ago</a></span></span><style data-emotion-css="1sqa8jq">.css-1sqa8jq{line-height:1.5rem;}.css-1sqa8jq:before{background:#343434;border-radius:50%;content:"\a";display:inline-block;height:3px;margin:0 5px 3px 5px;width:3px;}</style><span data-testid="content-read-time" class="css-1sqa8jq">5<!-- --> min read</span></div><style data-emotion-css="1ioox4k">.css-1ioox4k{background-color:#2B2B2B;color:#FFFFFF;text-align:center;border-radius:5px;padding:0.25rem 0.5rem;font-size:0.8125rem;font-weight:700;z-index:1;}</style></div><style data-emotion-css="100omiu">.css-100omiu{border-left:1px solid #ddd;padding:0.125rem 0.25rem;}@media (max-width:891px){.css-100omiu{border-left:none;}}</style><style data-emotion-css="brpd47">.css-brpd47{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;border-left:1px solid #ddd;padding:0.125rem 0.25rem;}@media (max-width:891px){.css-brpd47{border-left:none;}}</style><div data-testid="FrontMatterTags" class="css-brpd47"><div class="css-2iw00g"><div size="24" color="currentColor" class="css-19wtgi5"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Tag" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M14.2929 2.29289C14.6834 1.90237 15.3166 1.90237 15.7071 2.29289L21.7071 8.29289C22.0977 8.68342 22.0977 9.31658 21.7071 9.70711L9.70714 21.7071C9.42114 21.9931 8.99102 22.0787 8.61735 21.9239C8.24367 21.7691 8.00003 21.4045 8.00003 21V16H3.00003C2.59557 16 2.23093 15.7564 2.07615 15.3827C1.92137 15.009 2.00692 14.5789 2.29292 14.2929L14.2929 2.29289ZM5.41424 14H9.00003C9.55231 14 10 14.4477 10 15V18.5858L19.5858 9L15 4.41421L5.41424 14Z"></path> </svg></div></div><div data-tip="true" data-for="Server v4.1"><style data-emotion-css="15alkjj">.css-15alkjj{line-height:1.5rem;}</style><span class="css-15alkjj">Server v4.1</span></div><div data-tip="true" data-for="Server Admin"><span class="css-1sqa8jq">Server Admin</span></div></div></div></section></div><style data-emotion-css="wurzvf">.css-wurzvf{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}@media (min-width:1300px){.css-wurzvf{-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;}}</style><style data-emotion-css="w4wk6o">.css-w4wk6o{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}@media (min-width:1300px){.css-w4wk6o{-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;}}</style><div class="css-w4wk6o"><style data-emotion-css="c06me2">.css-c06me2{max-height:auto;}</style><div class="css-c06me2"><style data-emotion-css="gjrqsi">@media (max-width:1300px){.css-gjrqsi{margin:1.5rem 0 2.5rem 0;}}@media (min-width:1300px){.css-gjrqsi{position:-webkit-sticky;position:sticky;top:100px;margin-top:-100px;padding-left:3rem;padding-right:0.5rem;max-height:calc(100vh - 140px);overflow-y:auto;width:400px;}}.css-gjrqsi ul{list-style-type:none;margin-bottom:0;}</style><div data-testid="right-bar" class="css-gjrqsi"><style data-emotion-css="1u486hm">.css-1u486hm{font-size:1rem;font-weight:500;margin:0;}</style><h5 data-testid="on-this-page" class="css-1u486hm">On This Page</h5><style data-emotion-css="7w93ns">.css-7w93ns{margin-left:0.25rem;padding-left:10px;border-left:2px solid #F1F1F1;}</style><ul data-testid="toc-list" class="css-7w93ns"><style data-emotion-css="15ss6d4">.css-15ss6d4{list-style-type:none;margin:0.5rem 0;margin-left:0rem;padding:0 8px;}</style><li data-testid="toc-entry" class="css-15ss6d4"><style data-emotion-css="rvafwm">.css-rvafwm a{color:#343434;font-weight:400;}.css-rvafwm a:hover{-webkit-text-decoration:underline;text-decoration:underline;}</style><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/server/v4.1/overview/circleci-server-overview/#introduction" class="css-x7gnkn">Introduction</a></span></li><li data-testid="toc-entry" class="css-15ss6d4"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/server/v4.1/overview/circleci-server-overview/#services" class="css-x7gnkn">Services</a></span></li><li data-testid="toc-entry" class="css-15ss6d4"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/server/v4.1/overview/circleci-server-overview/#platforms" class="css-x7gnkn">Platforms</a></span></li><li data-testid="toc-entry" class="css-15ss6d4"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/server/v4.1/overview/circleci-server-overview/#next-steps" class="css-x7gnkn">Next steps</a></span></li></ul></div></div><div class="css-16173t9"><style data-emotion-css="1d1hm3o">.css-1d1hm3o .toolbar{top:0.2em;right:0.2em !important;padding:6px;}.css-1d1hm3o .toolbar .copy-to-clipboard-button{cursor:pointer;-webkit-transition:opacity 0.3s ease-in-out;transition:opacity 0.3s ease-in-out;opacity:0;background-color:#EDEDED !important;background-position:50% !important;background-repeat:no-repeat !important;border-radius:4px !important;height:30px;width:46px;}.css-1d1hm3o .toolbar .copy-to-clipboard-button:hover{background-color:#E3E3E3 !important;}.css-1d1hm3o .toolbar .copy-to-clipboard-button:active{background-color:#D4D4D4 !important;}.css-1d1hm3o .toolbar .copy-to-clipboard-button span{display:none;}.css-1d1hm3o .toolbar .copy-to-clipboard-button[data-copy-state='copy']{background-image:url('/docs/icons/copy.svg') !important;}.css-1d1hm3o .toolbar .copy-to-clipboard-button[data-copy-state='copy-success']{background-color:#e3e3e3 !important;background-image:url('/docs/icons/check.svg') !important;}.css-1d1hm3o .code-toolbar:hover .copy-to-clipboard-button{opacity:1;}</style><div data-prismjs-copy-timeout="3000" class="line-numbers css-1d1hm3o"><div><div class="sect1"> <div><style data-emotion-css="1gt1ibw">.css-1gt1ibw{color:#161616;line-height:1.50;}</style><div class="css-1gt1ibw"><style data-emotion-css="n6xkmh">.css-n6xkmh{margin-bottom:10px;margin-top:1.25rem;-webkit-scroll-margin-top:100px;-moz-scroll-margin-top:100px;-ms-scroll-margin-top:100px;scroll-margin-top:100px;}</style><style data-emotion-css="sycgw4">.css-sycgw4{box-sizing:border-box;min-width:0;margin:0;color:#161616;font-size:1.75rem;font-weight:700;line-height:1.25;margin-bottom:10px;margin-top:1.25rem;-webkit-scroll-margin-top:100px;-moz-scroll-margin-top:100px;-ms-scroll-margin-top:100px;scroll-margin-top:100px;}</style><h2 id="introduction" data-testid="title-introduction" class="css-sycgw4">Introduction</h2></div></div> <div class="sectionbody"> <div class="paragraph"> <p>CircleCI server is an on-premises CI/CD platform for enterprise customers who have compliance or security needs that require them to operate within their firewall, in a private cloud, or in a data center.</p> </div> <div class="paragraph"> <p>CircleCI server provides the same features as CircleCI’s cloud offering, but operates within your Kubernetes cluster.</p> </div> <style data-emotion-css="bdwfpm">.css-bdwfpm{margin:1.5rem 0;}</style><div class="css-bdwfpm"><style data-emotion-css="l2fvwh">.css-l2fvwh{box-sizing:border-box;min-width:0;margin:0;border:1px solid #D4D4D4;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:60px;margin:0.25rem 0;border-left:4px solid #0078CA;}</style><div data-testid="compass-info-alert" role="alert" aria-live="polite" class="css-l2fvwh"><style data-emotion-css="v7m42f">.css-v7m42f{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-column-gap:0.75rem;column-gap:0.75rem;margin:11px;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;}@media (min-width:768px){.css-v7m42f{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}}</style><style data-emotion-css="1i7vmqf">.css-1i7vmqf{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-column-gap:0.75rem;column-gap:0.75rem;margin:11px;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;}@media (min-width:768px){.css-1i7vmqf{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}}</style><div class="css-1i7vmqf"><style data-emotion-css="15qiqgw">.css-15qiqgw{width:20px;height:20px;min-width:20px;color:#0078CA;}</style><div color="#0078CA" class="css-15qiqgw"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Info Circle" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M12 2C17.52 2 22 6.48 22 12C22 17.52 17.52 22 12 22C6.48 22 2 17.52 2 12C2 6.48 6.48 2 12 2ZM12 6C11.4477 6 11 6.44772 11 7C11 7.55228 11.4477 8 12 8C12.5523 8 13 7.55228 13 7C13 6.44772 12.5523 6 12 6ZM12 10C11.4477 10 11 10.4477 11 11V17C11 17.5523 11.4477 18 12 18C12.5523 18 13 17.5523 13 17V11C13 10.4477 12.5523 10 12 10Z"></path></svg></div><style data-emotion-css="1aoesim">.css-1aoesim{-webkit-column-gap:0.75rem;column-gap:0.75rem;row-gap:0.75rem;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-flex:1;-ms-flex:1;flex:1;}</style><style data-emotion-css="45kv77">.css-45kv77{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;width:100%;-webkit-column-gap:0.75rem;column-gap:0.75rem;row-gap:0.75rem;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-flex:1;-ms-flex:1;flex:1;}</style><div id="collapsible-flex" class="css-45kv77"><style data-emotion-css="seohoz">.css-seohoz{box-sizing:border-box;min-width:0;margin:0;-webkit-flex:1;-ms-flex:1;flex:1;}</style><div class="css-seohoz"><style data-emotion-css="1c1tyii">.css-1c1tyii{box-sizing:border-box;min-width:0;margin:0;color:#161616;font-size:1rem;line-height:1.5;}</style><span class="css-1c1tyii"> <div style="overflow:auto"><table><tbody><tr><td class="icon"> <i class="fa icon-note" title="Note"></i> </td><td class="content"> For installation instructions, you have the option of either the <span><a data-testid="link" href="/docs/server/v4.1/installation/phase-1-prerequisites/" class="css-x7gnkn"> <!-- -->regular</a></span> or <span><a data-testid="link" href="/docs/server/v4.1/air-gapped-installation/phase-1-prerequisites/" class="css-x7gnkn"> <!-- -->air-gapped</a></span> installation guide. </td></tr></tbody></table></div> </span></div><style data-emotion-css="1ng7dzp">.css-1ng7dzp{-webkit-column-gap:0.75rem;column-gap:0.75rem;min-height:36px;}</style><style data-emotion-css="1828gbe">.css-1828gbe{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-column-gap:0.75rem;column-gap:0.75rem;min-height:36px;}</style><div class="css-1828gbe"> <!-- --> </div><div class="css-1828gbe"> <!-- --> </div></div></div></div></div> <style data-emotion-css="1anc138">.css-1anc138{text-align:center;font-style:italic;margin:1.5rem 0;}</style><div class="imageblock css-1anc138"> <div class="content"> <style data-emotion-css="105956i">.css-105956i{cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in;max-width:100%;margin:0 0 1rem 0;}</style><img src="/docs/assets/img/docs/server-4-architecture-diagram.png" alt="Server v4.x services architecture" data-testid="image" loading="lazy" class="css-105956i"/> </div> <div class="title">Figure 1. CircleCI server v4.x Architecture</div> </div> <div class="paragraph"> <p>The CircleCI server application exposes four services, using a single load balancer. If required, the load balancer can be made private, separating it from the public internet.</p> </div> <div style="overflow:auto"><table class="tableblock frame-all grid-all stripes-even stretch table table-striped"><thead><tr><th class="tableblock halign-left valign-top">Service</th><th class="tableblock halign-left valign-top">Ports</th><th class="tableblock halign-left valign-top">Description</th></tr></thead><tbody><tr><td class="tableblock halign-left valign-top"><p class="tableblock">Frontend GUI Proxy & API</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">80 and 443</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Exposes the web application.</p></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock">Nomad Control Plane</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">4647</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Exposes an RPC protocol for Nomad clients.</p></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock">Output Processor</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">8585</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Ingests output from Nomad runners.</p></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock">VM Service</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">3000</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Provisions virtual machines.</p></td></tr></tbody></table></div> <div class="paragraph"> <p>The application exposes a number of external ports. These ports are used for various functions as defined in the table below.</p> </div> <div style="overflow:auto"><table class="tableblock frame-all grid-all stripes-even stretch table table-striped"><thead><tr><th class="tableblock halign-left valign-top">Port number</th><th class="tableblock halign-left valign-top">Protocol</th><th class="tableblock halign-left valign-top">Direction</th><th class="tableblock halign-left valign-top">Source / Destination</th><th class="tableblock halign-left valign-top">Use</th><th class="tableblock halign-left valign-top">Notes</th></tr></thead><tbody><tr><td class="tableblock halign-left valign-top"><p class="tableblock">80</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">TCP</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Inbound</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">End users</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">HTTP web app traffic</p></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock">443</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">TCP</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Inbound</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">End users</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">HTTP web app traffic</p></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock">22</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">TCP</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Inbound</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Administrators</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">SSH</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Only required for the bastion host.</p></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock">64535-65535</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">TCP</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Inbound</p></td><td class="tableblock halign-left valign-top"></td><td class="tableblock halign-left valign-top"><p class="tableblock">SSH into builds</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Only required for the Nomad clients.</p></td></tr></tbody></table></div> <div class="paragraph"> <p>CircleCI server schedules CI jobs using the <span><a href="https://www.nomadproject.io/" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"> <!-- -->Nomad<style data-emotion-css="1ie5e7y">.css-1ie5e7y{display:inline-block;width:1rem;height:1rem;margin-left:-5px;}</style><span color="currentColor" class="css-1ie5e7y"><style data-emotion-css="qzco2h">.css-qzco2h{display:block;width:100%;fill:#0078CA;}</style><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="New Window Link" data-testid="external-icon" class="css-qzco2h"><path fill-rule="evenodd" d="M9,4 L15,4 L15.0752385,4.00278786 L15.2007255,4.02024007 L15.3121422,4.04973808 L15.4232213,4.09367335 L15.5207085,4.14599544 L15.6170221,4.21292768 L15.7071408,4.29291093 C15.7425006,4.32828725 15.7746868,4.3656744 15.8036651,4.40469337 L15.8753285,4.51593788 L15.9287742,4.62866395 L15.9641546,4.73400701 L15.9932723,4.88337887 L16,5 L16,11 C16,11.5522847 15.5522847,12 15,12 C14.4871642,12 14.0644928,11.6139598 14.0067277,11.1166211 L14,11 L14,7.414 L10.0502525,11.363961 C9.65972827,11.7544853 9.02656329,11.7544853 8.63603899,11.363961 C8.27555502,11.0034771 8.24782547,10.436246 8.55285035,10.0439548 L8.63603895,9.94974748 L12.585,5.999 L9,6 C8.48716416,6 8.06449284,5.61395981 8.00672773,5.11662113 L8,5 C8,4.48716416 8.38604019,4.06449284 8.88337887,4.00672773 L9,4 Z"></path></svg></span></a></span> scheduler. The Nomad control plane runs inside of Kubernetes, while the Nomad clients, which are responsible for running scheduled CircleCI jobs, are provisioned outside the cluster. CircleCI server can run Docker jobs on the Nomad clients themselves or in a dedicated virtual machine (VM).</p> </div> <div class="paragraph"> <p>Job artifacts and outputs are sent directly from jobs in Nomad to object storage (S3, Google Cloud Storage, or other supported options). Audit logs and other items from the application are also stored in object storage, so both the Kubernetes cluster and the Nomad clients need access to object storage.</p> </div> </div> </div> <div class="sect1"> <div><div class="css-1gt1ibw"><h2 id="services" data-testid="title-services" class="css-sycgw4">Services</h2></div></div> <div class="sectionbody"> <div class="paragraph"> <p>CircleCI server v4.x consists of the following services. Find their descriptions and failure implications below:</p> </div> <div style="overflow:auto"><table class="tableblock frame-all grid-all stripes-even stretch table table-striped"><thead><tr><th class="tableblock halign-left valign-top">Service</th><th class="tableblock halign-left valign-top">Component</th><th class="tableblock halign-left valign-top">Description</th><th class="tableblock halign-left valign-top">What happens if it fails?</th><th class="tableblock halign-left valign-top">Notes</th></tr></thead><tbody><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">api-service</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">App Core</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Provides a GraphQL API that provides data to render the web frontend.</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Many parts of the UI (such as Contexts) will fail completely.</p></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">audit-log-service</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">App Core</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Persists audit log events to blob storage for long-term storage.</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Some events may not be recorded.</p></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">branch-service</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">App Core</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">A service responsible for listening to the event stream. Detects branch deletions, job updates, pushes, workflow updates.</p></td><td class="tableblock halign-left valign-top"></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">builds-service</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">App Core</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Ingests from www-api and sends to plans-service, workflows-conductor, and to orbs-service.</p></td><td class="tableblock halign-left valign-top"></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">circleci-mongodb</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Execution</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Primary datastore</p></td><td class="tableblock halign-left valign-top"></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">circleci-postgres</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Data storage for microservices.</p></td><td class="tableblock halign-left valign-top"></td><td class="tableblock halign-left valign-top"></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">circleci-rabbitmq</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Pipelines and Execution</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Queuing for workflow messaging, test results, usage, crons, output, notifications, and scheduler.</p></td><td class="tableblock halign-left valign-top"></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">circleci-redis</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Execution</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Caches data that will not be stored permanently (such as build logs), for request caching, and for rate limit calculations.</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">A failed cache can result in rate limiting from the VCS if too many calls are made to it.</p></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">circleci-telegraf</code></p></td><td class="tableblock halign-left valign-top"></td><td class="tableblock halign-left valign-top"><p class="tableblock">Telegraf collects statsd metrics. All white-boxed metrics in our services publish statsd metrics that are sent to Telegraf, but can also be configured to be exported to other places (such as Datadog or Prometheus).</p></td><td class="tableblock halign-left valign-top"></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">circleci-vault</code></p></td><td class="tableblock halign-left valign-top"></td><td class="tableblock halign-left valign-top"><p class="tableblock">HashiCorp Vault to run encryption and decryption as a service for secrets.</p></td><td class="tableblock halign-left valign-top"></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">contexts-service</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">App Core</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Stores and provides encrypted contexts.</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">All builds using Contexts will fail.</p></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">cron-service</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Pipelines</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Triggers scheduled workflows.</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Scheduled workflows will not run.</p></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">dispatcher</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Execution</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Split jobs into tasks and send them to scheduler to run.</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">No jobs will be sent to Nomad. The run queue will increase in size, but there should be no meaningful loss of data.</p></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">distributor-*</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">App Core</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Responsible for accepting build requests and distributing the job to appropriate queues.</p></td><td class="tableblock halign-left valign-top"></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">domain-service</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">App Core</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Stores and provides information about our domain model. Works with permissions and API.</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Workflows will fail to start and some REST API calls may fail, causing 500 errors in the CircleCI UI. If LDAP authentication is in use, all logins will fail.</p></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">frontend</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">CircleCI web app and www-api proxy.</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">The UI and REST API will be unavailable and no jobs will be triggered by GitHub/Enterprise. Running builds will be OK, but no updates will be seen.</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Rate limit of 150 requests per second with a single user instantaneous limit of 300 requests.</p></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">insights-service</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Metrics</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">A service to aggregate build and usage metrics for exporting and analysis.</p></td><td class="tableblock halign-left valign-top"></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">kong</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">App Core</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">API management.</p></td><td class="tableblock halign-left valign-top"></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">legacy-notifier</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">App Core</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Handles notifications to external services (for example, Slack or email).</p></td><td class="tableblock halign-left valign-top"></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">nginx</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">App Core / Frontend</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Handles traffic redirection and ingress.</p></td><td class="tableblock halign-left valign-top"></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">nomad-autoscaler</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Nomad</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Manages scaling of Nomad clusters in AWS and GCP environments.</p></td><td class="tableblock halign-left valign-top"></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">nomad-server</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Nomad</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Responsible for managing Nomad clients.</p></td><td class="tableblock halign-left valign-top"></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">orb-service</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Pipelines</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Handles communication between orb registry and config.</p></td><td class="tableblock halign-left valign-top"></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">output-processor</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Execution</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Receives job output and status updates and writes them to MongoDB. Also provides an API to running jobs to access caches, workspaces, store caches, workspaces, artifacts, & test results.</p></td><td class="tableblock halign-left valign-top"></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">permissions-service</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">App Core</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Provides the CircleCI permissions interface.</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Workflows will fail to start and some REST API calls may fail, causing 500 errors in the UI.</p></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">scheduler</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Execution</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Runs tasks sent to it. Works with Nomad server.</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">No jobs will be sent to Nomad. The run queue will increase in size, but there should be no meaningful loss of data.</p></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">socketi</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Websockets server.</p></td><td class="tableblock halign-left valign-top"></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">telegraf</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Metrics</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Collection of metrics.</p></td><td class="tableblock halign-left valign-top"></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">test-results-service</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Execution</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Parses test result files and stores data.</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">There will be no test failure or timing data for jobs, but this will be back-filled once the service is restarted.</p></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">vm-gc</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Compute Management</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Periodically checks for stale machine and remote Docker instances and requests that vm-service remove them.</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Old vm-service instances might not be destroyed until this service is restarted.</p></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">vm-scaler</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Machine</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Periodically requests that vm-service provision more instances for running machine and remote Docker jobs.</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">VM instances for machine and Remote Docker might not be provisioned, causing you to run out of capacity to run jobs with these executors.</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Different overlay for EKS versus GKE.</p></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">vm-service</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Machine</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Inventory of available vm-service instances, and provisioning of new instances.</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Jobs that use machine or remote Docker will fail.</p></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">web-ui-*</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Micro Front End (MFE) services used to render the frontend web application GUI.</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">The respective services page will fail to load. Example: A <code class="" data-testid="code-snippet-highlight">web-ui-server-admin</code> failure means the server Admin page will fail to load.</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">The MFEs are used to render the web application located at app.<my domain here></p></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock"><code class="" data-testid="code-snippet-highlight">webhook-service</code></p></td><td class="tableblock halign-left valign-top"><p class="tableblock">App Core</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Service responsible for all webhooks, including management of state and handling events.</p></td><td class="tableblock halign-left valign-top"></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock">workflows-conductor-event-consumer</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Pipelines</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Takes in information from VCS to kick off pipelines.</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">New Pipelines will not be kicked off when there are changes in the VCS.</p></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock">workflows-conductor-grpc</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Pipelines</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Helps translate the information through gRPC.</p></td><td class="tableblock halign-left valign-top"></td><td class="tableblock halign-left valign-top"></td></tr></tbody></table></div> </div> </div> <div class="sect1"> <div><div class="css-1gt1ibw"><h2 id="platforms" data-testid="title-platforms" class="css-sycgw4">Platforms</h2></div></div> <div class="sectionbody"> <div class="paragraph"> <p>CircleCI server is designed to deploy within a Kubernetes cluster. The virtual machine service (VM Service) is able to leverage unique EKS or GKE offerings to dynamically create VM images.</p> </div> <div class="paragraph"> <p>If installing outside of EKS or GKE, additional work is required to access some of the same machine build features. Setting up CircleCI runner gives you access to the same feature set as VM service across a much wider range of operating systems and machine types (for example, macOS).</p> </div> <div class="paragraph"> <p>We do our best to support a wide range of platforms for installation. We use environment-agnostic solutions wherever possible. However, we do not test all platforms and options. For that reason, we provide a list of tested environments, which we will continue to expand.</p> </div> <div style="overflow:auto"><table class="tableblock frame-all grid-all stripes-even stretch table table-striped"><thead><tr><th class="tableblock halign-left valign-top">Environment</th><th class="tableblock halign-left valign-top">Status</th><th class="tableblock halign-left valign-top">Notes</th></tr></thead><tbody><tr><td class="tableblock halign-left valign-top"><p class="tableblock">EKS</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Tested</p></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock">GKE</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Tested</p></td><td class="tableblock halign-left valign-top"></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock">Local installation</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Tested</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">See <span><a data-testid="link" href="/docs/server/v4.1/air-gapped-installation/phase-1-prerequisites/" class="css-x7gnkn"> <!-- -->Air-gapped installation</a></span> docs</p></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock">Azure</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Untested</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Should work with MinIO and Runner.</p></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock">Digital Ocean</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Untested</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Should work with MinIO and Runner.</p></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock">OpenShift</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Untested</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Known not to work.</p></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock">Rancher</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Untested</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Should work with MinIO and Runner.</p></td></tr></tbody></table></div> </div> </div> <div class="sect1"> <div><div class="css-1gt1ibw"><h2 id="next-steps" data-testid="title-next-steps" class="css-sycgw4">Next steps</h2></div></div> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><span><a data-testid="link" href="/docs/server/v4.1/overview/release-notes/" class="css-x7gnkn"> <!-- -->CircleCI server v4.1 release notes</a></span></p> </li> <li> <p><span><a data-testid="link" href="/docs/server/v4.1/installation/phase-1-prerequisites/" class="css-x7gnkn"> <!-- -->Server 4.x Installation Prerequisites</a></span></p> </li> </ul> </div> </div> </div></div><style data-emotion-css="7hkygd">.css-7hkygd{margin:1.25rem 0;}</style><section class="css-7hkygd"><hr/><style data-emotion-css="19dgxp1">.css-19dgxp1{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;gap:4rem;}</style><div class="css-19dgxp1"><div class="css-qcooo9"><style data-emotion-css="2xshll">.css-2xshll{margin-bottom:1.25rem;margin-top:10px;}</style><style data-emotion-css="xvmmyz">.css-xvmmyz{box-sizing:border-box;min-width:0;margin:0;color:#161616;font-size:1.25rem;font-weight:500;line-height:1.4;margin-bottom:1.25rem;margin-top:10px;}</style><h4 class="css-xvmmyz">Suggest an edit to this page</h4><span><a href="https://github.com/circleci/circleci-docs/blob/master/jekyll/_cci2/server/v4.1/overview/circleci-server-overview.adoc" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"><style data-emotion-css="v3gaol">.css-v3gaol{width:20px;height:20px;min-width:20px;color:currentColor;}</style><div size="20" color="currentColor" class="css-v3gaol"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Git Pull Request" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path fill-rule="evenodd" clip-rule="evenodd" d="M11.2929 5.29289C10.9024 5.68342 10.9024 6.31658 11.2929 6.70711L14.2929 9.70711C14.6834 10.0976 15.3166 10.0976 15.7071 9.70711C16.0976 9.31658 16.0976 8.68342 15.7071 8.29289L14.4142 7H16C16.5523 7 17 7.44772 17 8V15.1449C15.5543 15.5752 14.5 16.9145 14.5 18.5C14.5 20.433 16.067 22 18 22C19.933 22 21.5 20.433 21.5 18.5C21.5 16.9145 20.4457 15.5752 19 15.1449V8C19 6.34315 17.6569 5 16 5H14.4142L15.7071 3.70711C16.0976 3.31658 16.0976 2.68342 15.7071 2.29289C15.3166 1.90237 14.6834 1.90237 14.2929 2.29289L11.2929 5.29289ZM5 6.5C5 5.67157 5.67157 5 6.5 5C7.32843 5 8 5.67157 8 6.5C8 7.32843 7.32843 8 6.5 8C5.67157 8 5 7.32843 5 6.5ZM7.5 9.85506C8.94574 9.42479 10 8.08551 10 6.5C10 4.567 8.433 3 6.5 3C4.567 3 3 4.567 3 6.5C3 8.08551 4.05426 9.42479 5.5 9.85506V15.1449C4.05426 15.5752 3 16.9145 3 18.5C3 20.433 4.567 22 6.5 22C8.433 22 10 20.433 10 18.5C10 16.9145 8.94574 15.5752 7.5 15.1449V9.85506ZM6.5 17C5.67157 17 5 17.6716 5 18.5C5 19.3284 5.67157 20 6.5 20C7.32843 20 8 19.3284 8 18.5C8 17.6716 7.32843 17 6.5 17ZM18 17C17.1716 17 16.5 17.6716 16.5 18.5C16.5 19.3284 17.1716 20 18 20C18.8284 20 19.5 19.3284 19.5 18.5C19.5 17.6716 18.8284 17 18 17Z"></path></svg></div>Make a contribution<span color="currentColor" class="css-1ie5e7y"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="New Window Link" data-testid="external-icon" class="css-qzco2h"><path fill-rule="evenodd" d="M9,4 L15,4 L15.0752385,4.00278786 L15.2007255,4.02024007 L15.3121422,4.04973808 L15.4232213,4.09367335 L15.5207085,4.14599544 L15.6170221,4.21292768 L15.7071408,4.29291093 C15.7425006,4.32828725 15.7746868,4.3656744 15.8036651,4.40469337 L15.8753285,4.51593788 L15.9287742,4.62866395 L15.9641546,4.73400701 L15.9932723,4.88337887 L16,5 L16,11 C16,11.5522847 15.5522847,12 15,12 C14.4871642,12 14.0644928,11.6139598 14.0067277,11.1166211 L14,11 L14,7.414 L10.0502525,11.363961 C9.65972827,11.7544853 9.02656329,11.7544853 8.63603899,11.363961 C8.27555502,11.0034771 8.24782547,10.436246 8.55285035,10.0439548 L8.63603895,9.94974748 L12.585,5.999 L9,6 C8.48716416,6 8.06449284,5.61395981 8.00672773,5.11662113 L8,5 C8,4.48716416 8.38604019,4.06449284 8.88337887,4.00672773 L9,4 Z"></path></svg></span></a></span><span><a href="https://github.com/circleci/circleci-docs/blob/master/docs/CONTRIBUTING.md#contributing-to-circleci-docs" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"><div size="20" color="currentColor" class="css-v3gaol"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Approve" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M11.6386 8.85709C12.8363 7.34424 13.4053 5.22606 13.646 4.06665L13.7732 4.07643C14.4084 4.17391 14.8302 4.7616 14.7024 5.41633C14.4483 6.60149 13.9857 8.63287 13.3427 9.78242C12.6912 10.8929 13.5638 12.1818 14.7 12.1818H19.7728C19.8058 12.1818 19.8657 12.1981 19.9247 12.2571C19.9838 12.3162 20 12.3761 20 12.4091C20 12.4421 19.9838 12.5021 19.9247 12.5611C19.8657 12.6201 19.8058 12.6364 19.7728 12.6364H18.9546C18.4023 12.6364 17.9546 13.0841 17.9546 13.6364C17.9546 14.1887 18.4023 14.6364 18.9546 14.6364C18.9876 14.6364 19.0475 14.6526 19.1066 14.7117C19.1656 14.7707 19.1819 14.8306 19.1819 14.8637C19.1819 14.8967 19.1656 14.9566 19.1066 15.0156C19.0475 15.0747 18.9876 15.0909 18.9546 15.0909H18.1364C17.5841 15.0909 17.1364 15.5386 17.1364 16.0909C17.1364 16.6432 17.5841 17.0909 18.1364 17.0909C18.1694 17.0909 18.2293 17.1072 18.2884 17.1662C18.3474 17.2253 18.3637 17.2852 18.3637 17.3182C18.3637 17.3512 18.3474 17.4111 18.2884 17.4702C18.2293 17.5292 18.1694 17.5455 18.1364 17.5455H17.3182C16.7659 17.5455 16.3182 17.9932 16.3182 18.5455C16.3182 19.0978 16.7659 19.5455 17.3182 19.5455C17.3512 19.5455 17.4112 19.5617 17.4702 19.6208C17.5292 19.6798 17.5455 19.7397 17.5455 19.7727C17.5455 19.8058 17.5292 19.8657 17.4702 19.9247C17.4112 19.9838 17.3512 20 17.3182 20H11.5091C10.2295 20 9.29059 19.6463 8.68113 19.3077C8.42899 19.1676 8.23214 19.0294 8.09094 18.9187V12.225L8.16104 12.1662C8.42917 11.941 8.79898 11.6259 9.20579 11.2661C10.0043 10.5597 10.9987 9.63447 11.6265 8.87209L11.6386 8.85709ZM21.1819 14.8637C21.1819 14.6341 21.1449 14.4113 21.0768 14.2009C21.6321 13.7912 22 13.1338 22 12.4091C22 11.2023 20.9796 10.1818 19.7728 10.1818H15.3766C16.0315 8.72943 16.4529 6.79313 16.6597 5.82775L16.6624 5.81432C17.0203 4.02485 15.8184 2.33119 14.014 2.09061C13.9956 2.08815 13.9771 2.08621 13.9585 2.08478L13.3703 2.03953C12.5717 1.9781 11.8938 2.5452 11.7592 3.29181C11.5854 4.25625 11.0994 6.31052 10.0764 7.60821C9.55796 8.23586 8.67438 9.06591 7.88064 9.76807C7.83197 9.81112 7.78384 9.85352 7.73636 9.89519C7.46121 9.5701 7.05016 9.36371 6.59091 9.36371H3.5C2.67157 9.36371 2 10.0353 2 10.8637V20.5001C2 21.3285 2.67157 22.0001 3.5 22.0001H6.59091C7.177 22.0001 7.68459 21.6639 7.93139 21.1739C8.785 21.6089 9.98048 22 11.5091 22H17.3182C18.525 22 19.5455 20.9796 19.5455 19.7727C19.5455 19.5432 19.5086 19.3203 19.4404 19.11C19.9957 18.7003 20.3637 18.0429 20.3637 17.3182C20.3637 17.0886 20.3267 16.8658 20.2586 16.6555C20.8139 16.2458 21.1819 15.5883 21.1819 14.8637ZM4 20.0001V11.3637H6.09091V20.0001H4Z"></path></svg></div> <!-- -->Learn how to contribute<span color="currentColor" class="css-1ie5e7y"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="New Window Link" data-testid="external-icon" class="css-qzco2h"><path fill-rule="evenodd" d="M9,4 L15,4 L15.0752385,4.00278786 L15.2007255,4.02024007 L15.3121422,4.04973808 L15.4232213,4.09367335 L15.5207085,4.14599544 L15.6170221,4.21292768 L15.7071408,4.29291093 C15.7425006,4.32828725 15.7746868,4.3656744 15.8036651,4.40469337 L15.8753285,4.51593788 L15.9287742,4.62866395 L15.9641546,4.73400701 L15.9932723,4.88337887 L16,5 L16,11 C16,11.5522847 15.5522847,12 15,12 C14.4871642,12 14.0644928,11.6139598 14.0067277,11.1166211 L14,11 L14,7.414 L10.0502525,11.363961 C9.65972827,11.7544853 9.02656329,11.7544853 8.63603899,11.363961 C8.27555502,11.0034771 8.24782547,10.436246 8.55285035,10.0439548 L8.63603895,9.94974748 L12.585,5.999 L9,6 C8.48716416,6 8.06449284,5.61395981 8.00672773,5.11662113 L8,5 C8,4.48716416 8.38604019,4.06449284 8.88337887,4.00672773 L9,4 Z"></path></svg></span></a></span></div><div class="css-qcooo9"><h4 class="css-xvmmyz">Still need help?</h4><span><a href="https://discuss.circleci.com/" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"><div size="24" color="currentColor" class="css-19wtgi5"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Organization" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M22 15.5417V16C22 16.5523 21.5523 17 21 17H18.5V15.5417C18.5 14.6783 18.045 14.0192 17.39 13.5292C18.5364 13.4276 22 13.9336 22 15.5417ZM18.4576 11.75C17.4498 11.75 16.6364 10.9683 16.6364 10C16.6364 9.03167 17.4498 8.25 18.4576 8.25C19.4653 8.25 20.2727 9.03167 20.2727 10C20.2727 10.9683 19.4653 11.75 18.4576 11.75ZM6.61 13.5292C5.95504 14.0192 5.5 14.6783 5.5 15.5417V17H3C2.44772 17 2 16.5523 2 16V15.5417C2 13.8811 5.33594 13.4163 6.61 13.5292ZM5.54242 11.75C4.53468 11.75 3.72727 10.9683 3.72727 10C3.72727 9.03167 4.53468 8.25 5.54242 8.25C6.55016 8.25 7.36364 9.03167 7.36364 10C7.36364 10.9683 6.55016 11.75 5.54242 11.75ZM12 12.625C13.8156 12.625 16.5 13.5756 16.5 15.4688V16.5C16.5 17.0523 16.0523 17.5 15.5 17.5H8.49998C7.9477 17.5 7.49998 17.0523 7.49998 16.5V15.4688C7.49998 13.5756 10.1844 12.625 12 12.625ZM12.0042 11.3563C10.6185 11.3563 9.5 10.2717 9.5 8.92813C9.5 7.58456 10.6185 6.5 12.0042 6.5C13.3898 6.5 14.5 7.58456 14.5 8.92813C14.5 10.2717 13.3898 11.3563 12.0042 11.3563Z"></path></svg></div> <!-- -->Ask the CircleCI community<span color="currentColor" class="css-1ie5e7y"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="New Window Link" data-testid="external-icon" class="css-qzco2h"><path fill-rule="evenodd" d="M9,4 L15,4 L15.0752385,4.00278786 L15.2007255,4.02024007 L15.3121422,4.04973808 L15.4232213,4.09367335 L15.5207085,4.14599544 L15.6170221,4.21292768 L15.7071408,4.29291093 C15.7425006,4.32828725 15.7746868,4.3656744 15.8036651,4.40469337 L15.8753285,4.51593788 L15.9287742,4.62866395 L15.9641546,4.73400701 L15.9932723,4.88337887 L16,5 L16,11 C16,11.5522847 15.5522847,12 15,12 C14.4871642,12 14.0644928,11.6139598 14.0067277,11.1166211 L14,11 L14,7.414 L10.0502525,11.363961 C9.65972827,11.7544853 9.02656329,11.7544853 8.63603899,11.363961 C8.27555502,11.0034771 8.24782547,10.436246 8.55285035,10.0439548 L8.63603895,9.94974748 L12.585,5.999 L9,6 C8.48716416,6 8.06449284,5.61395981 8.00672773,5.11662113 L8,5 C8,4.48716416 8.38604019,4.06449284 8.88337887,4.00672773 L9,4 Z"></path></svg></span></a></span><span><a data-testid="link" href="https://circleci.com/research" class="css-x7gnkn"><div size="24" color="currentColor" class="css-19wtgi5"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Suggestion Lightbulb" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.96 3C12.96 2.44772 12.5123 2 11.96 2C11.4077 2 10.96 2.44772 10.96 3V4.43C10.96 4.98228 11.4077 5.43 11.96 5.43C12.5123 5.43 12.96 4.98228 12.96 4.43V3ZM16.2341 14.5901C16.2572 14.5555 16.275 14.5291 16.2868 14.5118L16.3592 14.3965C16.4802 14.1732 16.584 13.9411 16.6697 13.7021C16.8716 13.1555 16.9733 12.577 16.97 11.9943L16.9698 11.9792C16.954 11.2218 16.7664 10.478 16.421 9.80378C16.0757 9.12958 15.5817 8.54266 14.9763 8.08734C14.3709 7.63202 13.67 7.3202 12.9264 7.17544C12.1829 7.03067 11.4162 7.05674 10.6842 7.25168C9.95218 7.44662 9.27405 7.80533 8.70099 8.30072C8.12793 8.79611 7.67492 9.41523 7.37617 10.1113C7.07742 10.8074 6.94074 11.5623 6.97645 12.319C7.01216 13.0756 7.21932 13.8143 7.5823 14.4792L7.65423 14.593C7.66538 14.6093 7.68239 14.6344 7.70443 14.6672C7.74853 14.7329 7.81255 14.8297 7.88981 14.9503C8.04494 15.1925 8.25052 15.5264 8.45469 15.896C8.66041 16.2684 8.85554 16.6607 8.99681 17.022C9.14607 17.4037 9.20002 17.6639 9.20002 17.8C9.20002 18.3478 9.64074 18.7936 10.1885 18.7999L13.6585 18.8399C13.9257 18.843 14.183 18.739 14.373 18.5512C14.5631 18.3633 14.67 18.1072 14.67 17.84C14.67 17.7085 14.7255 17.444 14.8826 17.0473C15.0306 16.6735 15.2349 16.2652 15.4499 15.8768C15.6633 15.4913 15.8781 15.1416 16.0402 14.8876C16.121 14.761 16.1879 14.6594 16.2341 14.5901ZM12.5442 9.13858C12.0981 9.05172 11.6381 9.06736 11.1989 9.18432C10.7597 9.30128 10.3528 9.51651 10.0089 9.81374C9.66511 10.111 9.39331 10.4825 9.21406 10.9001C9.03481 11.3178 8.9528 11.7707 8.97422 12.2247C8.9949 12.663 9.11145 13.0911 9.31542 13.4792C9.32861 13.4985 9.34532 13.5232 9.36514 13.5527C9.4162 13.6288 9.48812 13.7375 9.57398 13.8716C9.7451 14.1388 9.97452 14.5111 10.2054 14.929C10.4346 15.3441 10.6745 15.8206 10.8595 16.2937C10.923 16.4561 10.9848 16.6299 11.0379 16.8096L12.8402 16.8304C12.895 16.6494 12.9583 16.4744 13.0231 16.3108C13.2144 15.8278 13.4626 15.3373 13.7001 14.9082C13.9392 14.4762 14.1769 14.0896 14.3542 13.8118C14.4431 13.6724 14.5176 13.5592 14.5704 13.4801C14.5915 13.4484 14.6092 13.4222 14.623 13.4018C14.6867 13.2797 14.742 13.1533 14.7883 13.0236L14.7923 13.0124C14.9108 12.6926 14.9711 12.3542 14.9701 12.0132C14.9595 11.5614 14.847 11.1178 14.641 10.7156C14.4338 10.3111 14.1374 9.95891 13.7741 9.68572C13.4109 9.41252 12.9903 9.22543 12.5442 9.13858ZM9.22998 21C9.22998 20.4477 9.6777 20 10.23 20H13.69C14.2423 20 14.69 20.4477 14.69 21C14.69 21.5523 14.2423 22 13.69 22H10.23C9.6777 22 9.22998 21.5523 9.22998 21ZM19.0071 4.9129C19.3976 5.30342 19.3976 5.93658 19.0071 6.32711L17.9971 7.33711C17.6066 7.72763 16.9734 7.72763 16.5829 7.33711C16.1923 6.94659 16.1923 6.31342 16.5829 5.9229L17.5929 4.9129C17.9834 4.52237 18.6166 4.52237 19.0071 4.9129ZM19.5 10.96C18.9477 10.96 18.5 11.4077 18.5 11.96C18.5 12.5123 18.9477 12.96 19.5 12.96H20.92C21.4723 12.96 21.92 12.5123 21.92 11.96C21.92 11.4077 21.4723 10.96 20.92 10.96H19.5ZM4.91289 4.9129C5.30341 4.52237 5.93658 4.52237 6.3271 4.9129L7.3371 5.9229C7.72763 6.31342 7.72763 6.94659 7.3371 7.33711C6.94658 7.72763 6.31341 7.72763 5.92289 7.33711L4.91289 6.32711C4.52236 5.93659 4.52236 5.30342 4.91289 4.9129ZM3 10.96C2.44772 10.96 2 11.4077 2 11.96C2 12.5123 2.44772 12.96 3 12.96H4.43C4.98228 12.96 5.43 12.5123 5.43 11.96C5.43 11.4077 4.98228 10.96 4.43 10.96H3Z"></path></svg></div> <!-- -->Join the research community</a></span><span><a href="https://support.circleci.com/" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"><div size="24" color="currentColor" class="css-19wtgi5"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Support" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path fill-rule="evenodd" clip-rule="evenodd" d="M3 7C3 5.89543 3.89543 5 5 5H20C21.1046 5 22 5.89543 22 7V15C22 16.1046 21.1046 17 20 17H6.70588L3.88597 20.4242C3.58776 20.7863 3 20.5754 3 20.1063V15V10.7583V7ZM7.5 13C8.32843 13 9 12.3284 9 11.5C9 10.6716 8.32843 10 7.5 10C6.67157 10 6 10.6716 6 11.5C6 12.3284 6.67157 13 7.5 13ZM14 11.5C14 12.3284 13.3284 13 12.5 13C11.6716 13 11 12.3284 11 11.5C11 10.6716 11.6716 10 12.5 10C13.3284 10 14 10.6716 14 11.5ZM17.5 13C18.3284 13 19 12.3284 19 11.5C19 10.6716 18.3284 10 17.5 10C16.6716 10 16 10.6716 16 11.5C16 12.3284 16.6716 13 17.5 13Z"></path></svg></div> <!-- -->Visit our Support site<span color="currentColor" class="css-1ie5e7y"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="New Window Link" data-testid="external-icon" class="css-qzco2h"><path fill-rule="evenodd" d="M9,4 L15,4 L15.0752385,4.00278786 L15.2007255,4.02024007 L15.3121422,4.04973808 L15.4232213,4.09367335 L15.5207085,4.14599544 L15.6170221,4.21292768 L15.7071408,4.29291093 C15.7425006,4.32828725 15.7746868,4.3656744 15.8036651,4.40469337 L15.8753285,4.51593788 L15.9287742,4.62866395 L15.9641546,4.73400701 L15.9932723,4.88337887 L16,5 L16,11 C16,11.5522847 15.5522847,12 15,12 C14.4871642,12 14.0644928,11.6139598 14.0067277,11.1166211 L14,11 L14,7.414 L10.0502525,11.363961 C9.65972827,11.7544853 9.02656329,11.7544853 8.63603899,11.363961 C8.27555502,11.0034771 8.24782547,10.436246 8.55285035,10.0439548 L8.63603895,9.94974748 L12.585,5.999 L9,6 C8.48716416,6 8.06449284,5.61395981 8.00672773,5.11662113 L8,5 C8,4.48716416 8.38604019,4.06449284 8.88337887,4.00672773 L9,4 Z"></path></svg></span></a></span></div></div></section></div></div></div></div></div></div> </article><style data-emotion-css="18c0lxf">.css-18c0lxf{padding:3rem 0;}</style><style data-emotion-css="1ccmuz">.css-1ccmuz{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding:3rem 0;}</style><footer class="css-1ccmuz"><style data-emotion-css="1s092o">.css-1s092o{width:100%;background:#FFFFFF;}@media (max-width:768px){.css-1s092o{margin-left:0;width:100%;}}</style><div class="css-1s092o"><style data-emotion-css="mrk95c">.css-mrk95c{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;border-top:2px solid #343434;padding:1.5rem 0 1.75rem;}@media (min-width:992px){.css-mrk95c{padding:1rem 0;}}.css-mrk95c:first-of-type{border-top:none;}@media (max-width:768px){.css-mrk95c:first-of-type{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}}</style><div class="css-mrk95c"><a href="https://circleci.com/docs/" data-testid="footer-circleci-logo" class="css-si22pm"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 100" width="126" class="css-1yqyrw2"><circle fill="#161616" cx="30.44" cy="52.5" r="7.471"></circle><path fill="#161616" d="M30.44 21.124c-14.619 0-26.903 10-30.388 23.532-.03.119-.052.244-.052.373 0 .825.669 1.494 1.494 1.494h12.651c.603 0 1.118-.358 1.354-.873 0 0 .019-.035.025-.052 2.608-5.628 8.304-9.533 14.914-9.533 9.077 0 16.436 7.357 16.436 16.435S39.517 68.935 30.44 68.935c-6.61 0-12.305-3.905-14.914-9.532-.007-.018-.026-.053-.026-.053a1.489 1.489 0 0 0-1.354-.873H1.495c-.826 0-1.495.669-1.495 1.494 0 .129.021.254.052.373C3.537 73.876 15.821 83.876 30.44 83.876c17.329 0 31.376-14.048 31.376-31.376S47.769 21.124 30.44 21.124zM112.482 59.855h-4.268a.919.919 0 0 0-.729.361c-2.479 3.664-6.671 6.074-11.428 6.074-7.617 0-13.791-6.175-13.791-13.791 0-7.617 6.174-13.792 13.791-13.792 4.758 0 8.949 2.412 11.429 6.075a.916.916 0 0 0 .728.361h4.268a.92.92 0 0 0 .921-.919.91.91 0 0 0-.101-.413c-3.18-6.299-9.706-10.621-17.244-10.621-10.663 0-19.309 8.645-19.309 19.309 0 10.663 8.646 19.309 19.309 19.309 7.538 0 14.064-4.322 17.243-10.621a.914.914 0 0 0 .102-.413.92.92 0 0 0-.921-.919zM125.355 26.756a3.678 3.678 0 1 1-7.357 0 3.678 3.678 0 0 1 7.357 0zm-.919 43.213V34.11h-5.517v35.858a.92.92 0 0 0 .919.919h3.679a.918.918 0 0 0 .919-.918zM148.355 33.214c-5.564.262-10.008 2.921-12.887 6.981v-5.166a.92.92 0 0 0-.919-.919h-3.678a.92.92 0 0 0-.919.919v34.939c0 .508.41.919.919.919h3.678a.918.918 0 0 0 .919-.919V52.5c0-7.308 5.686-13.286 12.871-13.76a.921.921 0 0 0 .921-.922v-3.686a.92.92 0 0 0-.905-.918zM184.992 59.855h-4.268a.916.916 0 0 0-.729.361c-2.479 3.664-6.671 6.074-11.427 6.074-7.618 0-13.792-6.175-13.792-13.791 0-7.617 6.174-13.792 13.792-13.792 4.756 0 8.948 2.412 11.427 6.075a.917.917 0 0 0 .729.361h4.268a.92.92 0 0 0 .921-.919.898.898 0 0 0-.102-.413c-3.179-6.299-9.705-10.621-17.242-10.621-10.664 0-19.309 8.645-19.309 19.309 0 10.663 8.645 19.309 19.309 19.309 7.537 0 14.063-4.322 17.242-10.621a.914.914 0 0 0 .102-.413.92.92 0 0 0-.921-.919zM196.025 22.158h-3.678a.92.92 0 0 0-.919.919v46.892c0 .508.411.919.919.919h3.678a.92.92 0 0 0 .92-.919V23.077a.92.92 0 0 0-.92-.919zM221.771 33.191c-10.664 0-19.309 8.645-19.309 19.309 0 10.663 8.645 19.309 19.309 19.309 7.538 0 14.062-4.322 17.242-10.621a.913.913 0 0 0-.819-1.332h-4.267a.913.913 0 0 0-.741.379c-2.48 3.653-6.666 6.057-11.415 6.057-6.993 0-12.767-5.206-13.667-11.952h32.031a.92.92 0 0 0 .917-.873c.016-.32.026-.643.026-.966 0-10.665-8.644-19.31-19.307-19.31zm-13.292 15.631c1.61-5.83 6.949-10.114 13.292-10.114s11.681 4.284 13.292 10.114h-26.584zM294.483 21.239a5.517 5.517 0 1 0 0 11.034 5.517 5.517 0 0 0 0-11.034zm4.598 12.871v35.858a.92.92 0 0 1-.919.919h-7.356a.918.918 0 0 1-.919-.919V34.11h9.194zM265.902 71.809c9.014 0 16.576-6.176 18.706-14.524a.832.832 0 0 0 .023-.187.92.92 0 0 0-.919-.92h-7.782a.919.919 0 0 0-.834.537l-.002-.001c-1.599 3.48-5.11 5.899-9.192 5.899-5.584 0-10.113-4.527-10.113-10.113s4.529-10.113 10.113-10.113a10.11 10.11 0 0 1 9.192 5.899l.002-.002a.92.92 0 0 0 .834.538h7.782a.92.92 0 0 0 .919-.92.944.944 0 0 0-.022-.184c-2.128-8.35-9.693-14.527-18.707-14.527-10.661 0-19.308 8.646-19.308 19.309.001 10.664 8.647 19.309 19.308 19.309z"></path></svg><style data-emotion-css="1hbtu16">.css-1hbtu16{color:#161616;font-size:1.5rem;font-weight:300;-webkit-letter-spacing:0.01em;-moz-letter-spacing:0.01em;-ms-letter-spacing:0.01em;letter-spacing:0.01em;line-height:1.50;margin-left:0.5rem;text-align:center;-webkit-text-decoration:none;text-decoration:none;}@media (max-width:768px){.css-1hbtu16{display:inline;}}</style><div color="#161616" class="css-1hbtu16">Docs</div></a><style data-emotion-css="1val13a">.css-1val13a{margin-left:-1rem;margin-right:-1rem;padding:0 1rem 0 1rem;}</style><div class="css-1val13a"><style data-emotion-css="6kxz8c">.css-6kxz8c{font-size:1.5rem;line-height:1.5rem;padding-top:0.5rem;}</style><div class="css-6kxz8c"><style data-emotion-css="1y68cb7">.css-1y68cb7{margin-left:20px;}.css-1y68cb7 a{color:#343434;}</style><span class="css-1y68cb7"><a href="https://circleci.com/blog/feed.xml" target="_blank" rel="noopener noreferrer" data-testid="footer-media-0" class="css-x7gnkn"><style data-emotion-css="6ahvz3">.css-6ahvz3{width:25px;height:auto;}</style><svg aria-labelledby="svg-inline--fa-title-0hwUmVcC3dUJ" data-prefix="fas" data-icon="rss" class="svg-inline--fa fa-rss css-6ahvz3" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" aria-hidden="true"><title id="svg-inline--fa-title-0hwUmVcC3dUJ">CircleCI RSS feed</title><path fill="currentColor" d="M25.57 176.1C12.41 175.4 .9117 185.2 .0523 198.4s9.173 24.65 22.39 25.5c120.1 7.875 225.7 112.7 233.6 233.6C256.9 470.3 267.4 480 279.1 480c.5313 0 1.062-.0313 1.594-.0625c13.22-.8438 23.25-12.28 22.39-25.5C294.6 310.3 169.7 185.4 25.57 176.1zM32 32C14.33 32 0 46.31 0 64s14.33 32 32 32c194.1 0 352 157.9 352 352c0 17.69 14.33 32 32 32s32-14.31 32-32C448 218.6 261.4 32 32 32zM63.1 351.9C28.63 351.9 0 380.6 0 416s28.63 64 63.1 64s64.08-28.62 64.08-64S99.37 351.9 63.1 351.9z"></path></svg></a></span><span class="css-1y68cb7"><a href="https://www.facebook.com/circleci" target="_blank" rel="noopener noreferrer" data-testid="footer-media-1" class="css-x7gnkn"><svg aria-labelledby="svg-inline--fa-title-Wn9PCheCRN7y" data-prefix="fab" data-icon="facebook-square" class="svg-inline--fa fa-facebook-square css-6ahvz3" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" aria-hidden="true"><title id="svg-inline--fa-title-Wn9PCheCRN7y">CircleCI Facebook</title><path fill="currentColor" d="M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h137.3V327.7h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.27c-30.81 0-40.42 19.12-40.42 38.73V256h68.78l-11 71.69h-57.78V480H400a48 48 0 0 0 48-48V80a48 48 0 0 0 -48-48z"></path></svg></a></span><span class="css-1y68cb7"><a href="https://twitter.com/circleci" target="_blank" rel="noopener noreferrer" data-testid="footer-media-2" class="css-x7gnkn"><svg aria-labelledby="svg-inline--fa-title-e6WBZcUOwVgG" data-prefix="fab" data-icon="twitter" class="svg-inline--fa fa-twitter css-6ahvz3" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" aria-hidden="true"><title id="svg-inline--fa-title-e6WBZcUOwVgG">CircleCI Twitter</title><path fill="currentColor" d="M459.4 151.7c.325 4.548 .325 9.097 .325 13.65 0 138.7-105.6 298.6-298.6 298.6-59.45 0-114.7-17.22-161.1-47.11 8.447 .974 16.57 1.299 25.34 1.299 49.06 0 94.21-16.57 130.3-44.83-46.13-.975-84.79-31.19-98.11-72.77 6.498 .974 12.99 1.624 19.82 1.624 9.421 0 18.84-1.3 27.61-3.573-48.08-9.747-84.14-51.98-84.14-102.1v-1.299c13.97 7.797 30.21 12.67 47.43 13.32-28.26-18.84-46.78-51.01-46.78-87.39 0-19.49 5.197-37.36 14.29-52.95 51.65 63.67 129.3 105.3 216.4 109.8-1.624-7.797-2.599-15.92-2.599-24.04 0-57.83 46.78-104.9 104.9-104.9 30.21 0 57.5 12.67 76.67 33.14 23.72-4.548 46.46-13.32 66.6-25.34-7.798 24.37-24.37 44.83-46.13 57.83 21.12-2.273 41.58-8.122 60.43-16.24-14.29 20.79-32.16 39.31-52.63 54.25z"></path></svg></a></span><span class="css-1y68cb7"><a href="https://github.com/circleci" target="_blank" rel="noopener noreferrer" data-testid="footer-media-3" class="css-x7gnkn"><svg aria-labelledby="svg-inline--fa-title-UvsaTntNRor2" data-prefix="fab" data-icon="github" class="svg-inline--fa fa-github css-6ahvz3" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512" aria-hidden="true"><title id="svg-inline--fa-title-UvsaTntNRor2">CircleCI GitHub</title><path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3 .3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5 .3-6.2 2.3zm44.2-1.7c-2.9 .7-4.9 2.6-4.6 4.9 .3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3 .7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3 .3 2.9 2.3 3.9 1.6 1 3.6 .7 4.3-.7 .7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3 .7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3 .7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg></a></span><span class="css-1y68cb7"><a href="https://twitch.tv/circleci" target="_blank" rel="noopener noreferrer" data-testid="footer-media-4" class="css-x7gnkn"><svg aria-labelledby="svg-inline--fa-title-bbZBaLiFdsez" data-prefix="fab" data-icon="twitch" class="svg-inline--fa fa-twitch css-6ahvz3" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" aria-hidden="true"><title id="svg-inline--fa-title-bbZBaLiFdsez">CircleCI Twitch</title><path fill="currentColor" d="M391.2 103.5H352.5v109.7h38.63zM285 103H246.4V212.8H285zM120.8 0 24.31 91.42V420.6H140.1V512l96.53-91.42h77.25L487.7 256V0zM449.1 237.8l-77.22 73.12H294.6l-67.6 64v-64H140.1V36.58H449.1z"></path></svg></a></span><span class="css-1y68cb7"><a href="https://www.linkedin.com/company/circleci" target="_blank" rel="noopener noreferrer" data-testid="footer-media-5" class="css-x7gnkn"><svg aria-labelledby="svg-inline--fa-title-BJ2ugqxUwmLY" data-prefix="fab" data-icon="linkedin-in" class="svg-inline--fa fa-linkedin-in css-6ahvz3" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" aria-hidden="true"><title id="svg-inline--fa-title-BJ2ugqxUwmLY">CircleCI LinkedIn</title><path fill="currentColor" d="M100.3 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.6 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.3 61.9 111.3 142.3V448z"></path></svg></a></span></div></div></div><div class="css-mrk95c"><style data-emotion-css="181qfh3">@media (max-width:1200px){.css-181qfh3{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:center;}}</style><nav class="css-181qfh3"><style data-emotion-css="t24vho">.css-t24vho{margin:0 -0.75rem;padding:0;list-style:none;}@media (min-width:768px){.css-t24vho{margin-right:0;}}.css-t24vho li{display:inline-block;margin:0 0.75rem 0.25rem;}</style><ul class="css-t24vho"><li><style data-emotion-css="1eiuvq9">.css-1eiuvq9 a{color:#343434;font-weight:500;}</style><span class="css-1eiuvq9"><a href="https://circleci.com/terms-of-service/" target="_blank" rel="noopener noreferrer" data-testid="footer-policy-0" class="css-x7gnkn">Terms of Use</a></span></li><li><span class="css-1eiuvq9"><a href="https://circleci.com/legal/privacy/" target="_blank" rel="noopener noreferrer" data-testid="footer-policy-1" class="css-x7gnkn">Privacy Policy</a></span></li><li><span class="css-1eiuvq9"><a href="https://circleci.com/legal/cookie-policy/" target="_blank" rel="noopener noreferrer" data-testid="footer-policy-2" class="css-x7gnkn">Cookie Policy</a></span></li><li><span class="css-1eiuvq9"><a href="https://circleci.com/security/" target="_blank" rel="noopener noreferrer" data-testid="footer-policy-3" class="css-x7gnkn">Security</a></span></li></ul></nav><style data-emotion-css="1ra2zmg">.css-1ra2zmg{margin-bottom:0.25rem;color:#6A6A6A;}@media (max-width:1200px){.css-1ra2zmg{margin-top:1rem;text-align:center;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}}</style><div data-testid="current-year" class="css-1ra2zmg">© 2024 Circle Internet Services, Inc., All Rights Reserved.</div></div></div></footer></main></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"error":null,"content":"\u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"introduction\"\u003eIntroduction\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eCircleCI server is an on-premises CI/CD platform for enterprise customers who have compliance or security needs that require them to operate within their firewall, in a private cloud, or in a data center.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eCircleCI server provides the same features as CircleCI’s cloud offering, but operates within your Kubernetes cluster.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"admonitionblock note\"\u003e \u003ctable\u003e \u003ctr\u003e \u003ctd class=\"icon\"\u003e \u003ci class=\"fa icon-note\" title=\"Note\"\u003e\u003c/i\u003e \u003c/td\u003e \u003ctd class=\"content\"\u003e For installation instructions, you have the option of either the \u003ca href=\"../../installation/phase-1-prerequisites/\"\u003eregular\u003c/a\u003e or \u003ca href=\"../../air-gapped-installation/phase-1-prerequisites/\"\u003eair-gapped\u003c/a\u003e installation guide. \u003c/td\u003e \u003c/tr\u003e \u003c/table\u003e \u003c/div\u003e \u003cdiv class=\"imageblock\"\u003e \u003cdiv class=\"content\"\u003e \u003cimg src=\"/docs/assets/img/docs/server-4-architecture-diagram.png\" alt=\"Server v4.x services architecture\"\u003e \u003c/div\u003e \u003cdiv class=\"title\"\u003eFigure 1. CircleCI server v4.x Architecture\u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eThe CircleCI server application exposes four services, using a single load balancer. If required, the load balancer can be made private, separating it from the public internet.\u003c/p\u003e \u003c/div\u003e \u003ctable class=\"tableblock frame-all grid-all stripes-even stretch table table-striped\"\u003e \u003ccolgroup\u003e \u003ccol style=\"width: 33.3333%;\"\u003e \u003ccol style=\"width: 33.3333%;\"\u003e \u003ccol style=\"width: 33.3334%;\"\u003e \u003c/colgroup\u003e \u003cthead\u003e \u003ctr\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eService\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003ePorts\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eDescription\u003c/th\u003e \u003c/tr\u003e \u003c/thead\u003e \u003ctbody\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eFrontend GUI Proxy \u0026amp; API\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e80 and 443\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eExposes the web application.\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eNomad Control Plane\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e4647\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eExposes an RPC protocol for Nomad clients.\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eOutput Processor\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e8585\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eIngests output from Nomad runners.\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eVM Service\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e3000\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eProvisions virtual machines.\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003c/tbody\u003e \u003c/table\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eThe application exposes a number of external ports. These ports are used for various functions as defined in the table below.\u003c/p\u003e \u003c/div\u003e \u003ctable class=\"tableblock frame-all grid-all stripes-even stretch table table-striped\"\u003e \u003ccolgroup\u003e \u003ccol style=\"width: 16.6666%;\"\u003e \u003ccol style=\"width: 16.6666%;\"\u003e \u003ccol style=\"width: 16.6666%;\"\u003e \u003ccol style=\"width: 16.6666%;\"\u003e \u003ccol style=\"width: 16.6666%;\"\u003e \u003ccol style=\"width: 16.667%;\"\u003e \u003c/colgroup\u003e \u003cthead\u003e \u003ctr\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003ePort number\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eProtocol\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eDirection\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eSource / Destination\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eUse\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eNotes\u003c/th\u003e \u003c/tr\u003e \u003c/thead\u003e \u003ctbody\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e80\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eTCP\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eInbound\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eEnd users\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eHTTP web app traffic\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e443\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eTCP\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eInbound\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eEnd users\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eHTTP web app traffic\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e22\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eTCP\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eInbound\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eAdministrators\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eSSH\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eOnly required for the bastion host.\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e64535-65535\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eTCP\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eInbound\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eSSH into builds\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eOnly required for the Nomad clients.\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003c/tbody\u003e \u003c/table\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eCircleCI server schedules CI jobs using the \u003ca href=\"https://www.nomadproject.io/\"\u003eNomad\u003c/a\u003e scheduler. The Nomad control plane runs inside of Kubernetes, while the Nomad clients, which are responsible for running scheduled CircleCI jobs, are provisioned outside the cluster. CircleCI server can run Docker jobs on the Nomad clients themselves or in a dedicated virtual machine (VM).\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eJob artifacts and outputs are sent directly from jobs in Nomad to object storage (S3, Google Cloud Storage, or other supported options). Audit logs and other items from the application are also stored in object storage, so both the Kubernetes cluster and the Nomad clients need access to object storage.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"services\"\u003eServices\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eCircleCI server v4.x consists of the following services. Find their descriptions and failure implications below:\u003c/p\u003e \u003c/div\u003e \u003ctable class=\"tableblock frame-all grid-all stripes-even stretch table table-striped\"\u003e \u003ccolgroup\u003e \u003ccol style=\"width: 20%;\"\u003e \u003ccol style=\"width: 20%;\"\u003e \u003ccol style=\"width: 20%;\"\u003e \u003ccol style=\"width: 20%;\"\u003e \u003ccol style=\"width: 20%;\"\u003e \u003c/colgroup\u003e \u003cthead\u003e \u003ctr\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eService\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eComponent\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eDescription\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eWhat happens if it fails?\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eNotes\u003c/th\u003e \u003c/tr\u003e \u003c/thead\u003e \u003ctbody\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003eapi-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eApp Core\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eProvides a GraphQL API that provides data to render the web frontend.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eMany parts of the UI (such as Contexts) will fail completely.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003eaudit-log-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eApp Core\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003ePersists audit log events to blob storage for long-term storage.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eSome events may not be recorded.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003ebranch-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eApp Core\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eA service responsible for listening to the event stream. Detects branch deletions, job updates, pushes, workflow updates.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003ebuilds-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eApp Core\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eIngests from www-api and sends to plans-service, workflows-conductor, and to orbs-service.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003ecircleci-mongodb\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eExecution\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003ePrimary datastore\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003ecircleci-postgres\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eData storage for microservices.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003ecircleci-rabbitmq\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003ePipelines and Execution\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eQueuing for workflow messaging, test results, usage, crons, output, notifications, and scheduler.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003ecircleci-redis\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eExecution\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eCaches data that will not be stored permanently (such as build logs), for request caching, and for rate limit calculations.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eA failed cache can result in rate limiting from the VCS if too many calls are made to it.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003ecircleci-telegraf\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eTelegraf collects statsd metrics. All white-boxed metrics in our services publish statsd metrics that are sent to Telegraf, but can also be configured to be exported to other places (such as Datadog or Prometheus).\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003ecircleci-vault\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eHashiCorp Vault to run encryption and decryption as a service for secrets.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003econtexts-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eApp Core\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eStores and provides encrypted contexts.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eAll builds using Contexts will fail.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003ecron-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003ePipelines\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eTriggers scheduled workflows.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eScheduled workflows will not run.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003edispatcher\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eExecution\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eSplit jobs into tasks and send them to scheduler to run.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eNo jobs will be sent to Nomad. The run queue will increase in size, but there should be no meaningful loss of data.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003edistributor-*\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eApp Core\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eResponsible for accepting build requests and distributing the job to appropriate queues.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003edomain-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eApp Core\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eStores and provides information about our domain model. Works with permissions and API.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eWorkflows will fail to start and some REST API calls may fail, causing 500 errors in the CircleCI UI. If LDAP authentication is in use, all logins will fail.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003efrontend\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eFrontend\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eCircleCI web app and www-api proxy.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eThe UI and REST API will be unavailable and no jobs will be triggered by GitHub/Enterprise. Running builds will be OK, but no updates will be seen.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eRate limit of 150 requests per second with a single user instantaneous limit of 300 requests.\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003einsights-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eMetrics\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eA service to aggregate build and usage metrics for exporting and analysis.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003ekong\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eApp Core\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eAPI management.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003elegacy-notifier\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eApp Core\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eHandles notifications to external services (for example, Slack or email).\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003enginx\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eApp Core / Frontend\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eHandles traffic redirection and ingress.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003enomad-autoscaler\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eNomad\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eManages scaling of Nomad clusters in AWS and GCP environments.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003enomad-server\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eNomad\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eResponsible for managing Nomad clients.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003eorb-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003ePipelines\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eHandles communication between orb registry and config.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003eoutput-processor\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eExecution\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eReceives job output and status updates and writes them to MongoDB. Also provides an API to running jobs to access caches, workspaces, store caches, workspaces, artifacts, \u0026amp; test results.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003epermissions-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eApp Core\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eProvides the CircleCI permissions interface.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eWorkflows will fail to start and some REST API calls may fail, causing 500 errors in the UI.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003escheduler\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eExecution\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eRuns tasks sent to it. Works with Nomad server.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eNo jobs will be sent to Nomad. The run queue will increase in size, but there should be no meaningful loss of data.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003esocketi\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eFrontend\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eWebsockets server.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003etelegraf\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eMetrics\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eCollection of metrics.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003etest-results-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eExecution\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eParses test result files and stores data.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eThere will be no test failure or timing data for jobs, but this will be back-filled once the service is restarted.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003evm-gc\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eCompute Management\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003ePeriodically checks for stale machine and remote Docker instances and requests that vm-service remove them.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eOld vm-service instances might not be destroyed until this service is restarted.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003evm-scaler\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eMachine\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003ePeriodically requests that vm-service provision more instances for running machine and remote Docker jobs.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eVM instances for machine and Remote Docker might not be provisioned, causing you to run out of capacity to run jobs with these executors.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eDifferent overlay for EKS versus GKE.\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003evm-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eMachine\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eInventory of available vm-service instances, and provisioning of new instances.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eJobs that use machine or remote Docker will fail.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003eweb-ui-*\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eFrontend\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eMicro Front End (MFE) services used to render the frontend web application GUI.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eThe respective services page will fail to load. Example: A \u003ccode\u003eweb-ui-server-admin\u003c/code\u003e failure means the server Admin page will fail to load.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eThe MFEs are used to render the web application located at app.\u0026lt;my domain here\u0026gt;\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003ewebhook-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eApp Core\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eService responsible for all webhooks, including management of state and handling events.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eworkflows-conductor-event-consumer\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003ePipelines\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eTakes in information from VCS to kick off pipelines.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eNew Pipelines will not be kicked off when there are changes in the VCS.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eworkflows-conductor-grpc\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003ePipelines\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eHelps translate the information through gRPC.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003c/tbody\u003e \u003c/table\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"platforms\"\u003ePlatforms\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eCircleCI server is designed to deploy within a Kubernetes cluster. The virtual machine service (VM Service) is able to leverage unique EKS or GKE offerings to dynamically create VM images.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eIf installing outside of EKS or GKE, additional work is required to access some of the same machine build features. Setting up CircleCI runner gives you access to the same feature set as VM service across a much wider range of operating systems and machine types (for example, macOS).\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eWe do our best to support a wide range of platforms for installation. We use environment-agnostic solutions wherever possible. However, we do not test all platforms and options. For that reason, we provide a list of tested environments, which we will continue to expand.\u003c/p\u003e \u003c/div\u003e \u003ctable class=\"tableblock frame-all grid-all stripes-even stretch table table-striped\"\u003e \u003ccolgroup\u003e \u003ccol style=\"width: 33.3333%;\"\u003e \u003ccol style=\"width: 33.3333%;\"\u003e \u003ccol style=\"width: 33.3334%;\"\u003e \u003c/colgroup\u003e \u003cthead\u003e \u003ctr\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eEnvironment\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eStatus\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eNotes\u003c/th\u003e \u003c/tr\u003e \u003c/thead\u003e \u003ctbody\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eEKS\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eTested\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eGKE\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eTested\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eLocal installation\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eTested\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eSee \u003ca href=\"../../air-gapped-installation/phase-1-prerequisites/\"\u003eAir-gapped installation\u003c/a\u003e docs\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eAzure\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eUntested\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eShould work with MinIO and Runner.\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eDigital Ocean\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eUntested\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eShould work with MinIO and Runner.\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eOpenShift\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eUntested\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eKnown not to work.\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eRancher\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eUntested\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eShould work with MinIO and Runner.\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003c/tbody\u003e \u003c/table\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"next-steps\"\u003eNext steps\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003e\u003ca href=\"../release-notes/\"\u003eCircleCI server v4.1 release notes\u003c/a\u003e\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003e\u003ca href=\"../../installation/phase-1-prerequisites/\"\u003eServer 4.x Installation Prerequisites\u003c/a\u003e\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e","frontMatter":{"draft":false,"categories":[],"last_modified_at":"04-Sep-24","hide":false,"search":true,"toc":true,"suggested":false,"sitemap":true,"readtime":true,"contentTags":{"platform":["Server v4.1","Server Admin"]},"sectionTags":null,"lang":"en","noindex":true,"title":"CircleCI server v4.1 overview","slug":"circleci-server-overview","ext":".adoc","tags":[],"excerpt":"\u003cdiv class=\"sect1\"\u003e\n\u003ch2 id=\"introduction\"\u003eIntroduction\u003c/h2\u003e\n\u003cdiv class=\"sectionbody\"\u003e\n\n\u003c/div\u003e\n\u003c/div\u003e","asciidoc":true,"layout":"classic-docs","liquid":"","description":"CircleCI server v4.1 is a continuous integration and continuous delivery (CI/CD) platform that you can install on your GCP or AWS Kubernetes cluster.","category":null,"tag":null,"excerpt_origin":"body","document":"#\u003cAsciidoctor::Document@10580 {doctype: \"article\", doctitle: \"CircleCI server v4.1 overview\", blocks: 4}\u003e","date":"2024-11-30 08:44:32 +0000","content":"\u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"introduction\"\u003eIntroduction\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eCircleCI server is an on-premises CI/CD platform for enterprise customers who have compliance or security needs that require them to operate within their firewall, in a private cloud, or in a data center.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eCircleCI server provides the same features as CircleCI’s cloud offering, but operates within your Kubernetes cluster.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"admonitionblock note\"\u003e \u003ctable\u003e \u003ctr\u003e \u003ctd class=\"icon\"\u003e \u003ci class=\"fa icon-note\" title=\"Note\"\u003e\u003c/i\u003e \u003c/td\u003e \u003ctd class=\"content\"\u003e For installation instructions, you have the option of either the \u003ca href=\"../../installation/phase-1-prerequisites/\"\u003eregular\u003c/a\u003e or \u003ca href=\"../../air-gapped-installation/phase-1-prerequisites/\"\u003eair-gapped\u003c/a\u003e installation guide. \u003c/td\u003e \u003c/tr\u003e \u003c/table\u003e \u003c/div\u003e \u003cdiv class=\"imageblock\"\u003e \u003cdiv class=\"content\"\u003e \u003cimg src=\"/docs/assets/img/docs/server-4-architecture-diagram.png\" alt=\"Server v4.x services architecture\"\u003e \u003c/div\u003e \u003cdiv class=\"title\"\u003eFigure 1. CircleCI server v4.x Architecture\u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eThe CircleCI server application exposes four services, using a single load balancer. If required, the load balancer can be made private, separating it from the public internet.\u003c/p\u003e \u003c/div\u003e \u003ctable class=\"tableblock frame-all grid-all stripes-even stretch table table-striped\"\u003e \u003ccolgroup\u003e \u003ccol style=\"width: 33.3333%;\"\u003e \u003ccol style=\"width: 33.3333%;\"\u003e \u003ccol style=\"width: 33.3334%;\"\u003e \u003c/colgroup\u003e \u003cthead\u003e \u003ctr\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eService\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003ePorts\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eDescription\u003c/th\u003e \u003c/tr\u003e \u003c/thead\u003e \u003ctbody\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eFrontend GUI Proxy \u0026amp; API\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e80 and 443\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eExposes the web application.\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eNomad Control Plane\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e4647\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eExposes an RPC protocol for Nomad clients.\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eOutput Processor\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e8585\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eIngests output from Nomad runners.\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eVM Service\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e3000\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eProvisions virtual machines.\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003c/tbody\u003e \u003c/table\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eThe application exposes a number of external ports. These ports are used for various functions as defined in the table below.\u003c/p\u003e \u003c/div\u003e \u003ctable class=\"tableblock frame-all grid-all stripes-even stretch table table-striped\"\u003e \u003ccolgroup\u003e \u003ccol style=\"width: 16.6666%;\"\u003e \u003ccol style=\"width: 16.6666%;\"\u003e \u003ccol style=\"width: 16.6666%;\"\u003e \u003ccol style=\"width: 16.6666%;\"\u003e \u003ccol style=\"width: 16.6666%;\"\u003e \u003ccol style=\"width: 16.667%;\"\u003e \u003c/colgroup\u003e \u003cthead\u003e \u003ctr\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003ePort number\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eProtocol\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eDirection\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eSource / Destination\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eUse\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eNotes\u003c/th\u003e \u003c/tr\u003e \u003c/thead\u003e \u003ctbody\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e80\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eTCP\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eInbound\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eEnd users\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eHTTP web app traffic\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e443\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eTCP\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eInbound\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eEnd users\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eHTTP web app traffic\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e22\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eTCP\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eInbound\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eAdministrators\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eSSH\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eOnly required for the bastion host.\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e64535-65535\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eTCP\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eInbound\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eSSH into builds\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eOnly required for the Nomad clients.\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003c/tbody\u003e \u003c/table\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eCircleCI server schedules CI jobs using the \u003ca href=\"https://www.nomadproject.io/\"\u003eNomad\u003c/a\u003e scheduler. The Nomad control plane runs inside of Kubernetes, while the Nomad clients, which are responsible for running scheduled CircleCI jobs, are provisioned outside the cluster. CircleCI server can run Docker jobs on the Nomad clients themselves or in a dedicated virtual machine (VM).\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eJob artifacts and outputs are sent directly from jobs in Nomad to object storage (S3, Google Cloud Storage, or other supported options). Audit logs and other items from the application are also stored in object storage, so both the Kubernetes cluster and the Nomad clients need access to object storage.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"services\"\u003eServices\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eCircleCI server v4.x consists of the following services. Find their descriptions and failure implications below:\u003c/p\u003e \u003c/div\u003e \u003ctable class=\"tableblock frame-all grid-all stripes-even stretch table table-striped\"\u003e \u003ccolgroup\u003e \u003ccol style=\"width: 20%;\"\u003e \u003ccol style=\"width: 20%;\"\u003e \u003ccol style=\"width: 20%;\"\u003e \u003ccol style=\"width: 20%;\"\u003e \u003ccol style=\"width: 20%;\"\u003e \u003c/colgroup\u003e \u003cthead\u003e \u003ctr\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eService\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eComponent\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eDescription\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eWhat happens if it fails?\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eNotes\u003c/th\u003e \u003c/tr\u003e \u003c/thead\u003e \u003ctbody\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003eapi-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eApp Core\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eProvides a GraphQL API that provides data to render the web frontend.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eMany parts of the UI (such as Contexts) will fail completely.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003eaudit-log-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eApp Core\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003ePersists audit log events to blob storage for long-term storage.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eSome events may not be recorded.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003ebranch-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eApp Core\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eA service responsible for listening to the event stream. Detects branch deletions, job updates, pushes, workflow updates.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003ebuilds-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eApp Core\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eIngests from www-api and sends to plans-service, workflows-conductor, and to orbs-service.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003ecircleci-mongodb\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eExecution\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003ePrimary datastore\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003ecircleci-postgres\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eData storage for microservices.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003ecircleci-rabbitmq\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003ePipelines and Execution\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eQueuing for workflow messaging, test results, usage, crons, output, notifications, and scheduler.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003ecircleci-redis\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eExecution\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eCaches data that will not be stored permanently (such as build logs), for request caching, and for rate limit calculations.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eA failed cache can result in rate limiting from the VCS if too many calls are made to it.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003ecircleci-telegraf\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eTelegraf collects statsd metrics. All white-boxed metrics in our services publish statsd metrics that are sent to Telegraf, but can also be configured to be exported to other places (such as Datadog or Prometheus).\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003ecircleci-vault\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eHashiCorp Vault to run encryption and decryption as a service for secrets.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003econtexts-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eApp Core\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eStores and provides encrypted contexts.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eAll builds using Contexts will fail.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003ecron-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003ePipelines\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eTriggers scheduled workflows.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eScheduled workflows will not run.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003edispatcher\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eExecution\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eSplit jobs into tasks and send them to scheduler to run.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eNo jobs will be sent to Nomad. The run queue will increase in size, but there should be no meaningful loss of data.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003edistributor-*\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eApp Core\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eResponsible for accepting build requests and distributing the job to appropriate queues.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003edomain-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eApp Core\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eStores and provides information about our domain model. Works with permissions and API.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eWorkflows will fail to start and some REST API calls may fail, causing 500 errors in the CircleCI UI. If LDAP authentication is in use, all logins will fail.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003efrontend\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eFrontend\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eCircleCI web app and www-api proxy.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eThe UI and REST API will be unavailable and no jobs will be triggered by GitHub/Enterprise. Running builds will be OK, but no updates will be seen.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eRate limit of 150 requests per second with a single user instantaneous limit of 300 requests.\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003einsights-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eMetrics\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eA service to aggregate build and usage metrics for exporting and analysis.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003ekong\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eApp Core\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eAPI management.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003elegacy-notifier\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eApp Core\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eHandles notifications to external services (for example, Slack or email).\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003enginx\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eApp Core / Frontend\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eHandles traffic redirection and ingress.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003enomad-autoscaler\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eNomad\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eManages scaling of Nomad clusters in AWS and GCP environments.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003enomad-server\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eNomad\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eResponsible for managing Nomad clients.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003eorb-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003ePipelines\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eHandles communication between orb registry and config.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003eoutput-processor\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eExecution\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eReceives job output and status updates and writes them to MongoDB. Also provides an API to running jobs to access caches, workspaces, store caches, workspaces, artifacts, \u0026amp; test results.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003epermissions-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eApp Core\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eProvides the CircleCI permissions interface.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eWorkflows will fail to start and some REST API calls may fail, causing 500 errors in the UI.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003escheduler\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eExecution\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eRuns tasks sent to it. Works with Nomad server.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eNo jobs will be sent to Nomad. The run queue will increase in size, but there should be no meaningful loss of data.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003esocketi\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eFrontend\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eWebsockets server.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003etelegraf\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eMetrics\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eCollection of metrics.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003etest-results-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eExecution\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eParses test result files and stores data.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eThere will be no test failure or timing data for jobs, but this will be back-filled once the service is restarted.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003evm-gc\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eCompute Management\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003ePeriodically checks for stale machine and remote Docker instances and requests that vm-service remove them.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eOld vm-service instances might not be destroyed until this service is restarted.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003evm-scaler\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eMachine\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003ePeriodically requests that vm-service provision more instances for running machine and remote Docker jobs.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eVM instances for machine and Remote Docker might not be provisioned, causing you to run out of capacity to run jobs with these executors.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eDifferent overlay for EKS versus GKE.\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003evm-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eMachine\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eInventory of available vm-service instances, and provisioning of new instances.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eJobs that use machine or remote Docker will fail.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003eweb-ui-*\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eFrontend\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eMicro Front End (MFE) services used to render the frontend web application GUI.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eThe respective services page will fail to load. Example: A \u003ccode\u003eweb-ui-server-admin\u003c/code\u003e failure means the server Admin page will fail to load.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eThe MFEs are used to render the web application located at app.\u0026lt;my domain here\u0026gt;\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003e\u003ccode\u003ewebhook-service\u003c/code\u003e\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eApp Core\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eService responsible for all webhooks, including management of state and handling events.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eworkflows-conductor-event-consumer\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003ePipelines\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eTakes in information from VCS to kick off pipelines.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eNew Pipelines will not be kicked off when there are changes in the VCS.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eworkflows-conductor-grpc\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003ePipelines\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eHelps translate the information through gRPC.\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003c/tbody\u003e \u003c/table\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"platforms\"\u003ePlatforms\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eCircleCI server is designed to deploy within a Kubernetes cluster. The virtual machine service (VM Service) is able to leverage unique EKS or GKE offerings to dynamically create VM images.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eIf installing outside of EKS or GKE, additional work is required to access some of the same machine build features. Setting up CircleCI runner gives you access to the same feature set as VM service across a much wider range of operating systems and machine types (for example, macOS).\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eWe do our best to support a wide range of platforms for installation. We use environment-agnostic solutions wherever possible. However, we do not test all platforms and options. For that reason, we provide a list of tested environments, which we will continue to expand.\u003c/p\u003e \u003c/div\u003e \u003ctable class=\"tableblock frame-all grid-all stripes-even stretch table table-striped\"\u003e \u003ccolgroup\u003e \u003ccol style=\"width: 33.3333%;\"\u003e \u003ccol style=\"width: 33.3333%;\"\u003e \u003ccol style=\"width: 33.3334%;\"\u003e \u003c/colgroup\u003e \u003cthead\u003e \u003ctr\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eEnvironment\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eStatus\u003c/th\u003e \u003cth class=\"tableblock halign-left valign-top\"\u003eNotes\u003c/th\u003e \u003c/tr\u003e \u003c/thead\u003e \u003ctbody\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eEKS\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eTested\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eGKE\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eTested\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eLocal installation\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eTested\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eSee \u003ca href=\"../../air-gapped-installation/phase-1-prerequisites/\"\u003eAir-gapped installation\u003c/a\u003e docs\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eAzure\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eUntested\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eShould work with MinIO and Runner.\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eDigital Ocean\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eUntested\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eShould work with MinIO and Runner.\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eOpenShift\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eUntested\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eKnown not to work.\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eRancher\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eUntested\u003c/p\u003e\u003c/td\u003e \u003ctd class=\"tableblock halign-left valign-top\"\u003e\u003cp class=\"tableblock\"\u003eShould work with MinIO and Runner.\u003c/p\u003e\u003c/td\u003e \u003c/tr\u003e \u003c/tbody\u003e \u003c/table\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"next-steps\"\u003eNext steps\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003e\u003ca href=\"../release-notes/\"\u003eCircleCI server v4.1 release notes\u003c/a\u003e\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003e\u003ca href=\"../../installation/phase-1-prerequisites/\"\u003eServer 4.x Installation Prerequisites\u003c/a\u003e\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e","file_name":"_cci2/server/v4.1/overview/circleci-server-overview.adoc"}},"__lang":"en","__namespaces":{"common":{"appName":"Docs","metaTitle":"Welcome to CircleCI Documentation","metaDescription":"Welcome to CircleCI Documentation"},"header":{"loginButton":{"loggedIn":{"text":"Go to Application","href":"https://app.circleci.com/"},"loggedOut":{"text":"Start Building for Free","href":"https://circleci.com/signup/"}}},"search":{"searchBarPlaceholder":"Search Documentation","docsTab":{"long":"Documentation","short":"Docs"},"orbsTab":{"long":"Orbs","short":"Orbs"},"imagesTab":{"long":"Convenience Images","short":"Images"},"noResults":"No {{type}} results"},"content":{"copyLink":{"copy":"Copy link","copied":"Copied!"},"pageMeta":{"lastUpdateReadTime":"Last updated • Read time","cloudServer":"This document is applicable to CircleCI {{platform}}"},"pageFooter":{"editTitle":"Suggest an edit to this page","makeContribution":"Make a contribution","learnContribution":"Learn how to contribute","helpTitle":"Still need help?","askCommunity":"Ask the CircleCI community","researchCommunity":"Join the research community","support":"Visit our Support site"},"on_this_page":"On This Page","translationInProgress":"This page is in the process of being translated."}},"__N_SSP":true},"page":"/[...slug]","query":{"slug":["server","v4.1","overview","circleci-server-overview"]},"buildId":"9e2f0ef33c33cd80cc959c1747acd17d270b8bd8","assetPrefix":"https://assets-docs.circleci.com/docs","runtimeConfig":{"basePath":"/docs","exceptionLoggerClientToken":"ca1befe4db724589813fc4a2a9642d4d","analyticsKey":"AbgkrgN4cbRhAVEwlzMkHbwvrXnxHh35","datadogRumApplicationId":"2a3e19ca-297e-4a53-a2cf-082e827d13d3","datadogRumClientToken":"pubdffb4b4dd07f1f43b42276901d58da91","isPreviewSite":false},"isFallback":false,"isExperimentalCompile":false,"gssp":true,"appGip":true,"locale":"en","locales":["en","ja"],"defaultLocale":"en","scriptLoader":[]}</script></body></html>