CINXE.COM
Reusable Config Reference Guide - 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>Reusable Config Reference Guide - CircleCI</title><meta name="description" content="Reference guide for CircleCI 2.1 Configuration"/><meta property="og:title" content="Reusable Config Reference Guide - CircleCI"/><meta property="og:description" content="Reference guide for CircleCI 2.1 Configuration"/><meta property="og:url" content="https://circleci.com/docs/reusing-config/"/><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/reusing-config/"/><link rel="alternate" hrefLang="en" href="https://circleci.com/docs/reusing-config/"/><link rel="alternate" hrefLang="ja" href="https://circleci.com/docs/ja/reusing-config/"/><link rel="alternate" hrefLang="x-default" href="https://circleci.com/docs/reusing-config/"/><meta name="twitter:card" content="summary_large_image"/><meta property="twitter:domain" content="circleci.com"/><meta property="twitter:url" content="https://circleci.com/docs/reusing-config/"/><meta name="twitter:title" content="Reusable Config Reference Guide - CircleCI"/><meta name="twitter:description" content="Reference guide for CircleCI 2.1 Configuration"/><meta name="twitter:image" content="https://circleci.com/docs/assets/meta/open-graph-cci-docs.jpg"/><meta name="next-head-count" content="19"/><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><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="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/configuration-reference/" 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">Configuration reference</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/concepts/" class="css-x7gnkn"><span class="css-8bro8e">Concepts</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/reusing-config/" 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">Reusable configuration reference</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/variables/" class="css-x7gnkn"><span class="css-8bro8e">Project values and variables</span></a></span></li><li class="css-7cjp2v"><span><a href="https://circleci.com/docs/api/v2" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"><span class="css-8bro8e">API v2 reference</span><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></li><li class="css-7cjp2v"><span><a href="https://circleci.com/docs/api/v1" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"><span class="css-8bro8e">API v1 reference</span><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></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/runner-api/" class="css-x7gnkn"><span class="css-8bro8e">Self-hosted runner API</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/optimizations/" class="css-x7gnkn"><span class="css-8bro8e">Optimization reference</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/insights-glossary/" class="css-x7gnkn"><span class="css-8bro8e">Insights metrics glossary</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/config-policy-reference/" class="css-x7gnkn"><span class="css-8bro8e">Config policy reference</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/webhooks-reference/" class="css-x7gnkn"><span class="css-8bro8e">Webhooks reference</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/FAQ/" class="css-x7gnkn"><span class="css-8bro8e">Frequently asked questions</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/troubleshoot/" class="css-x7gnkn"><span class="css-8bro8e">Troubleshoot</span></a></span></li></ul></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-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><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">Data</div><ul class="css-i6zvb9"><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/persist-data/" class="css-x7gnkn"><span class="css-8bro8e">Persisting data overview</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/caching/" class="css-x7gnkn"><span class="css-8bro8e">Caching dependencies</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/caching-strategy/" class="css-x7gnkn"><span class="css-8bro8e">Caching strategies</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/artifacts/" class="css-x7gnkn"><span class="css-8bro8e">Store build artifacts</span></a></span></li></ul></div><div class="subSection css-1n64q0m"><div class="css-4h1kga">Speed</div><ul class="css-i6zvb9"><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/concurrency/" class="css-x7gnkn"><span class="css-8bro8e">Concurrency</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/parallelism-faster-jobs/" class="css-x7gnkn"><span class="css-8bro8e">Test splitting and parallelism</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/docker-layer-caching/" class="css-x7gnkn"><span class="css-8bro8e">Docker layer caching overview</span></a></span></li></ul></div><div class="subSection css-1n64q0m"><div class="css-4h1kga">Configuration</div><ul class="css-i6zvb9"><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/dynamic-config/" class="css-x7gnkn"><span class="css-8bro8e">Dynamic configuration</span></a></span></li></ul></div><div class="subSection css-1n64q0m"><div class="css-4h1kga">Tutorials</div><ul class="css-i6zvb9"><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/test-splitting-tutorial/" class="css-x7gnkn"><span class="css-8bro8e">Speed up pipelines with test splitting</span></a></span></li></ul></div><div class="subSection css-1n64q0m"><div class="css-4h1kga">How-to guides</div><ul class="css-i6zvb9"><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/use-the-circleci-cli-to-split-tests/" class="css-x7gnkn"><span class="css-8bro8e">Use the CircleCI CLI to split tests</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/using-matrix-jobs/" class="css-x7gnkn"><span class="css-8bro8e">Use matrix jobs</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/using-dynamic-configuration/" class="css-x7gnkn"><span class="css-8bro8e">Use dynamic configuration</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/java-oom/" class="css-x7gnkn"><span class="css-8bro8e">Avoid and debug Java memory errors</span></a></span></li></ul></div><div class="subSection css-1n64q0m"><div class="css-4h1kga">Reference</div><ul class="css-i6zvb9"><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/reusing-config/" class="css-x7gnkn"><span class="css-1ouqygm">Reusable configuration reference</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/optimizations/" class="css-x7gnkn"><span class="css-8bro8e">Optimizations reference</span></a></span></li></ul></div></ul></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-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><ul class="css-i6zvb9"><div class="subSection css-1n64q0m"><div class="css-4h1kga">Use orbs</div><ul class="css-i6zvb9"><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/orb-intro/" class="css-x7gnkn"><span class="css-8bro8e">Orb introduction</span></a></span></li></ul></div><div class="subSection css-1n64q0m"><div class="css-4h1kga">Author orbs</div><ul class="css-i6zvb9"><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/orb-author-intro/" class="css-x7gnkn"><span class="css-8bro8e">Intro to authoring an orb</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/orb-author/" class="css-x7gnkn"><span class="css-8bro8e">Author an orb</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/orbs-best-practices/" class="css-x7gnkn"><span class="css-8bro8e">Orb authoring best practices</span></a></span></li></ul></div><div class="subSection css-1n64q0m"><div class="css-4h1kga">Test orbs</div><ul class="css-i6zvb9"><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/testing-orbs/" class="css-x7gnkn"><span class="css-8bro8e">Orb testing methodologies</span></a></span></li></ul></div><div class="subSection css-1n64q0m"><div class="css-4h1kga">Publish orbs</div><ul class="css-i6zvb9"><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/creating-orbs/" class="css-x7gnkn"><span class="css-8bro8e">Orb publishing process</span></a></span></li></ul></div><div class="subSection css-1n64q0m"><div class="css-4h1kga">Tutorials</div><ul class="css-i6zvb9"><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/create-an-orb/" class="css-x7gnkn"><span class="css-8bro8e">Create an orb</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/orb-author-validate-publish/" class="css-x7gnkn"><span class="css-8bro8e">Manually author an orb</span></a></span></li></ul></div><div class="subSection css-1n64q0m"><div class="css-4h1kga">How-to guides</div><ul class="css-i6zvb9"><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/deploy-service-update-to-aws-ecs/" class="css-x7gnkn"><span class="css-8bro8e">Deploy service update to ECS</span></a></span></li></ul></div><div class="subSection css-1n64q0m"><div class="css-4h1kga">Reference</div><ul class="css-i6zvb9"><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/orb-concepts/" class="css-x7gnkn"><span class="css-8bro8e">Orbs concepts</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/orbs-faq/" class="css-x7gnkn"><span class="css-8bro8e">Orbs FAQ</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/orb-author-faq/" class="css-x7gnkn"><span class="css-8bro8e">Orb author FAQ</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/reusing-config/" class="css-x7gnkn"><span class="css-1ouqygm">Reusing configuration</span></a></span></li></ul></div></ul></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><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/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">Reusable Config Reference Guide</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/reusing-config.md" target="_blank" rel="noopener noreferrer" data-testid="external-git-file-link" class="css-x7gnkn">1 week 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">12<!-- --> 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="Cloud"><style data-emotion-css="15alkjj">.css-15alkjj{line-height:1.5rem;}</style><span class="css-15alkjj">Cloud</span></div><div data-tip="true" data-for="Server v4.x"><span class="css-1sqa8jq">Server v4.x</span></div><div data-tip="true" data-for="Server v3.x"><span class="css-1sqa8jq">Server v3.x</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/reusing-config/#notes-on-reusable-configuration" class="css-x7gnkn">Notes on reusable configuration</a></span></li><li data-testid="toc-entry" class="css-15ss6d4"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#using-the-parameters-declaration" class="css-x7gnkn">Using the parameters declaration</a></span></li><style data-emotion-css="1kc30t0">.css-1kc30t0{list-style-type:none;margin:0.5rem 0;margin-left:1rem;padding:0 8px;}</style><li data-testid="toc-entry" class="css-1kc30t0"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#parameter-syntax" class="css-x7gnkn">Parameter syntax</a></span></li><li data-testid="toc-entry" class="css-1kc30t0"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#parameter-types" class="css-x7gnkn">Parameter types</a></span></li><style data-emotion-css="1puo75j">.css-1puo75j{list-style-type:none;margin:0.5rem 0;margin-left:2rem;padding:0 8px;}</style><li data-testid="toc-entry" class="css-1puo75j"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#string" class="css-x7gnkn">String</a></span></li><li data-testid="toc-entry" class="css-1puo75j"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#boolean" class="css-x7gnkn">Boolean</a></span></li><li data-testid="toc-entry" class="css-1puo75j"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#integer" class="css-x7gnkn">Integer</a></span></li><li data-testid="toc-entry" class="css-1puo75j"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#enum" class="css-x7gnkn">Enum</a></span></li><li data-testid="toc-entry" class="css-1puo75j"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#executor" class="css-x7gnkn">Executor</a></span></li><li data-testid="toc-entry" class="css-1puo75j"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#steps" class="css-x7gnkn">Steps</a></span></li><li data-testid="toc-entry" class="css-1puo75j"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#environment-variable-name" class="css-x7gnkn">Environment variable name</a></span></li><li data-testid="toc-entry" class="css-15ss6d4"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#authoring-reusable-commands" class="css-x7gnkn">Authoring reusable commands</a></span></li><li data-testid="toc-entry" class="css-1kc30t0"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#the-commands-key" class="css-x7gnkn">The commands key</a></span></li><li data-testid="toc-entry" class="css-1kc30t0"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#invoking-reusable-commands" class="css-x7gnkn">Invoking reusable commands</a></span></li><li data-testid="toc-entry" class="css-1kc30t0"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#invoking-other-commands-in-a-command" class="css-x7gnkn">Invoking other commands in a command</a></span></li><li data-testid="toc-entry" class="css-1kc30t0"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#special-keys" class="css-x7gnkn">Special keys</a></span></li><li data-testid="toc-entry" class="css-1kc30t0"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#commands-usage-examples" class="css-x7gnkn">Commands usage examples</a></span></li><li data-testid="toc-entry" class="css-15ss6d4"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#authoring-reusable-executors" class="css-x7gnkn">Authoring reusable executors</a></span></li><li data-testid="toc-entry" class="css-1kc30t0"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#the-executors-key" class="css-x7gnkn">The executors key</a></span></li><li data-testid="toc-entry" class="css-1kc30t0"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#invoking-reusable-executors" class="css-x7gnkn">Invoking reusable executors</a></span></li><li data-testid="toc-entry" class="css-1kc30t0"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#example-of-using-an-executor-declared-in-configyml-with-matrix-jobs" class="css-x7gnkn">Example of using an executor declared in config.yml with matrix jobs.</a></span></li><li data-testid="toc-entry" class="css-1kc30t0"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#using-executors-defined-in-an-orb" class="css-x7gnkn">Using executors defined in an orb</a></span></li><li data-testid="toc-entry" class="css-1kc30t0"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#overriding-keys-when-invoking-an-executor" class="css-x7gnkn">Overriding keys when invoking an executor</a></span></li><li data-testid="toc-entry" class="css-15ss6d4"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#authoring-parameterized-jobs" class="css-x7gnkn">Authoring parameterized jobs</a></span></li><li data-testid="toc-entry" class="css-1kc30t0"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#jobs-defined-in-an-orb" class="css-x7gnkn">Jobs defined in an orb</a></span></li><li data-testid="toc-entry" class="css-1kc30t0"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#using-parameters-in-executors" class="css-x7gnkn">Using parameters in executors</a></span></li><li data-testid="toc-entry" class="css-1puo75j"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#example-build-configuration-using-a-parameterized-executor" class="css-x7gnkn">Example build configuration using a parameterized executor</a></span></li><li data-testid="toc-entry" class="css-1kc30t0"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#the-scope-of-parameters" class="css-x7gnkn">The scope of parameters</a></span></li><li data-testid="toc-entry" class="css-1kc30t0"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#invoking-the-same-job-multiple-times" class="css-x7gnkn">Invoking the same job multiple times</a></span></li><li data-testid="toc-entry" class="css-1kc30t0"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#using-pre-and-post-steps" class="css-x7gnkn">Using pre and post steps</a></span></li><li data-testid="toc-entry" class="css-1kc30t0"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#defining-pre-and-post-steps" class="css-x7gnkn">Defining pre and post steps</a></span></li><li data-testid="toc-entry" class="css-15ss6d4"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#defining-conditional-steps" class="css-x7gnkn">Defining conditional steps</a></span></li><li data-testid="toc-entry" class="css-1kc30t0"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#the-when-step" class="css-x7gnkn">The when step</a></span></li><li data-testid="toc-entry" class="css-1kc30t0"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#the-unless-step" class="css-x7gnkn">The unless step</a></span></li><li data-testid="toc-entry" class="css-15ss6d4"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#writing-inline-orbs" class="css-x7gnkn">Writing inline orbs</a></span></li><li data-testid="toc-entry" class="css-15ss6d4"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/reusing-config/#see-also" class="css-x7gnkn">See also</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><p>This guide describes how to get started with reusable commands, jobs, executors and orbs. This guide also covers the use of parameters for creating parameterized reusable elements.</p> <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"><strong>Using Docker?</strong> Authenticating Docker pulls from image registries is recommended when using the Docker execution environment. Authenticated pulls allow access to private Docker images, and may also grant higher rate limits, depending on your registry provider. For further information see <span><a data-testid="link" href="/docs/private-images/" class="css-x7gnkn"> <!-- -->Using Docker authenticated pulls</a></span>.</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> <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="notes-on-reusable-configuration" data-testid="title-notes-on-reusable-configuration" class="css-sycgw4">Notes on reusable configuration</h2></div></div> <ul> <li> <p>Install the CircleCI CLI so that you have access to the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">circleci config process</code> command (optional). This command lets you see the expanded configuration with all reusable keys processed. Follow the <span><a data-testid="link" href="/docs/local-cli/" class="css-x7gnkn"> <!-- -->Using the CircleCI CLI</a></span> documentation for installation instructions and tips.</p> </li> <li> <p>CircleCI reusable configuration elements require a <strong><code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">version: 2.1</code></strong> <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">.circleci/config.yml</code> file.</p> </li> <li> <p>Command, job, executor, and parameter names must start with a letter and can only contain lowercase letters (<code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">a</code>-<code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">z</code>), digits (<code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">0</code>-<code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">9</code>), underscores (<code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">_</code>) and hyphens (<code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">-</code>).</p> </li> </ul> <div><div class="css-1gt1ibw"><h2 id="using-the-parameters-declaration" data-testid="title-using-the-parameters-declaration" class="css-sycgw4">Using the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">parameters</code> declaration</h2></div></div> <p>Parameters are declared by name under a job, command, or executor. <em>Pipeline parameters</em> are defined at the top level of a project configuration. See the <span><a data-testid="link" href="/docs/pipeline-variables/#pipeline-parameters-in-configuration" class="css-x7gnkn"> <!-- -->Pipeline Values and Parameters guide</a></span> for more information.</p> <p>The immediate children of the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">parameters</code> key are a set of keys in a map.</p> <p>In the following example, a command named <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">greeting</code> is designed with a single parameter named <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">to</code>. The <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">to</code> parameter is used within the steps to echo <em>Hello</em> back to the user.</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 commands: # a reusable command with parameters greeting: parameters: to: default: "world" type: string steps: - run: echo "Hello <<parameters.to>>" jobs: my-job: docker: - image: cimg/base:stable steps: - greeting: to: "My-Name" workflows: my-workflow: jobs: - my-job </code></pre></div></div> <div><div class="css-1gt1ibw"><style data-emotion-css="2s9iz">.css-2s9iz{margin-bottom:10px;margin-top:10px;-webkit-scroll-margin-top:100px;-moz-scroll-margin-top:100px;-ms-scroll-margin-top:100px;scroll-margin-top:100px;}</style><style data-emotion-css="ycntf9">.css-ycntf9{box-sizing:border-box;min-width:0;margin:0;color:#161616;font-size:1.5rem;font-weight:500;line-height:1.3333333;margin-bottom:10px;margin-top:10px;-webkit-scroll-margin-top:100px;-moz-scroll-margin-top:100px;-ms-scroll-margin-top:100px;scroll-margin-top:100px;}</style><h3 id="parameter-syntax" data-testid="title-parameter-syntax" class="css-ycntf9">Parameter syntax</h3></div></div> <p>A parameter can have the following keys as immediate children:</p> <div style="overflow:auto"><table class="table table-striped"><thead><tr><th>Key Name</th><th>Description</th><th>Default value</th></tr></thead><tbody><tr><td>description</td><td>Optional. Used to generate documentation for your orb.</td><td>N/A</td></tr><tr><td>type</td><td>Required. See <strong>Parameter Types</strong> in the section below for details.</td><td>N/A</td></tr><tr><td>default</td><td>The default value for the parameter. Required for pipeline parameters. For all other parameters, if not present, the parameter is implied to be required.</td><td>N/A</td></tr></tbody></table></div> <div><div class="css-1gt1ibw"><h3 id="parameter-types" data-testid="title-parameter-types" class="css-ycntf9">Parameter types</h3></div></div> <p>This section describes the types of parameters and their usage.</p> <p>The parameter types supported by orbs are:</p> <ul> <li><code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">string</code></li> <li><code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">boolean</code></li> <li><code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">integer</code></li> <li><code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">enum</code></li> <li><code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">executor</code></li> <li><code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">steps</code></li> <li>environment variable name</li> </ul> <p>The parameter types supported by pipeline parameters are:</p> <ul> <li><code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">string</code></li> <li><code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">boolean</code></li> <li><code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">integer</code></li> <li><code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">enum</code></li> </ul> <div><div class="css-1gt1ibw"><style data-emotion-css="19alzbx">.css-19alzbx{box-sizing:border-box;min-width:0;margin:0;color:#161616;font-size:1.25rem;font-weight:500;line-height:1.4;margin-bottom:10px;margin-top:10px;-webkit-scroll-margin-top:100px;-moz-scroll-margin-top:100px;-ms-scroll-margin-top:100px;scroll-margin-top:100px;}</style><h4 id="string" data-testid="title-string" class="css-19alzbx">String</h4></div></div> <p>Basic string parameters are described below:</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 commands: copy-markdown: parameters: destination: description: destination directory type: string default: docs steps: - run: cp *.md << parameters.destination >> </code></pre></div></div> <p>Strings must be enclosed in quotes if they would otherwise represent another type (such as boolean or number) or if they contain characters that have special meaning in YAML, particularly for the colon character. In all other instances, quotes are optional.</p> <p>Empty strings are treated as a falsy value in evaluation of <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">when</code> clauses, and all other strings are treated as truthy. Using an unquoted string value that YAML interprets as a boolean will result in a type error.</p> <div><div class="css-1gt1ibw"><h4 id="boolean" data-testid="title-boolean" class="css-19alzbx">Boolean</h4></div></div> <p>Boolean parameters are useful for conditionals:</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 commands: npm-install: parameters: clean: description: Perform a clean install type: boolean default: false steps: - when: condition: << parameters.clean >> steps: - run: npm clean-install - when: condition: not: << parameters.clean >> steps: - run: npm install </code></pre></div></div> <p>Boolean parameter evaluation is based on the <span><a href="https://yaml.org/type/bool.html" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"> <!-- -->values specified in YAML 1.1<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>:</p> <ul> <li>True: <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">y</code> <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">yes</code> <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">true</code> <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">on</code></li> <li>False: <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">n</code> <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">no</code> <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">false</code> <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">off</code></li> </ul> <p>Capitalized and uppercase versions of the above values are also valid.</p> <div class="css-bdwfpm"><div data-testid="compass-info-alert" role="alert" aria-live="polite" class="css-l2fvwh"><div class="css-1i7vmqf"><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><div id="collapsible-flex" class="css-45kv77"><div class="css-seohoz"><span class="css-1c1tyii">Boolean values may be returned as a ‘1’ for True and ‘0’ for False.</span></div><div class="css-1828gbe"> <!-- --> </div><div class="css-1828gbe"> <!-- --> </div></div></div></div></div> <div><div class="css-1gt1ibw"><h4 id="integer" data-testid="title-integer" class="css-19alzbx">Integer</h4></div></div> <p>Use the parameter type <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">integer</code> to pass a numeric integer value.</p> <p>The following example uses the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">integer</code> type to populate the value of <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">parallelism</code> in a job:</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 jobs: build: parameters: p: type: integer default: 1 parallelism: << parameters.p >> docker: - image: cimg/base:2023.11 steps: - checkout workflows: workflow: jobs: - build: p: 2 </code></pre></div></div> <div><div class="css-1gt1ibw"><h4 id="enum" data-testid="title-enum" class="css-19alzbx">Enum</h4></div></div> <p>The <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">enum</code> parameter may be a list of any values. Use the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">enum</code> parameter type when you want to enforce that the value must be one from a specific set of string values.</p> <p>The following example uses the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">enum</code> parameter to declare the target operating system for a binary:</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 commands: list-files: parameters: os: default: "linux" description: The target Operating System for the heroku binary. Must be one of "linux", "darwin", "win32". type: enum enum: ["linux", "darwin", "win32"] </code></pre></div></div> <p>The following <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">enum</code> type declaration is invalid because the default is not declared in the enum list.</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 commands: list-files: parameters: os: type: enum default: "windows" #invalid declaration of default that does not appear in the comma-separated enum list enum: ["darwin", "linux"] </code></pre></div></div> <div><div class="css-1gt1ibw"><h4 id="executor" data-testid="title-executor" class="css-19alzbx">Executor</h4></div></div> <p>Use an <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">executor</code> parameter type to allow the invoker of a job to decide what executor it will run on.</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 executors: xenial: parameters: some-value: type: string default: foo environment: SOME_VAR: << parameters.some-value >> docker: - image: ubuntu:xenial bionic: docker: - image: ubuntu:bionic jobs: test: parameters: e: type: executor executor: << parameters.e >> steps: - run: some-tests workflows: workflow: jobs: - test: e: bionic - test: e: name: xenial some-value: foobar </code></pre></div></div> <div><div class="css-1gt1ibw"><h4 id="steps" data-testid="title-steps" class="css-19alzbx">Steps</h4></div></div> <p>Steps are used when you have a job or command that needs to mix predefined and user-defined steps. When passed in to a command or job invocation, the steps passed as parameters are always defined as a sequence, even if only one step is provided.</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 commands: run-tests: parameters: after-deps: description: "Steps that will be executed after dependencies are installed, but before tests are run" type: steps default: [] steps: - run: make deps - steps: << parameters.after-deps >> - run: make test </code></pre></div></div> <p>The following example demonstrates that steps passed as parameters are given as the value of a <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">steps</code> declaration under the job’s <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">steps</code>.</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 commands: run-tests: parameters: after-deps: description: "Steps that will be executed after dependencies are installed, but before tests are run" type: steps default: [] steps: - run: make deps - steps: << parameters.after-deps >> - run: make test jobs: build: docker: - image: cimg/base:2023.11 steps: - run-tests: after-deps: - run: echo "The dependencies are installed" - run: echo "And now I'm going to run the tests" </code></pre></div></div> <p>The above will resolve to the following:</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 steps: - run: make deps - run: echo "The dependencies are installed" - run: echo "And now I'm going to run the tests" - run: make test </code></pre></div></div> <div><div class="css-1gt1ibw"><h4 id="environment-variable-name" data-testid="title-environment-variable-name" class="css-19alzbx">Environment variable name</h4></div></div> <p>The environment variable name (<code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">env_var_name</code>) parameter is a string that must match a POSIX_NAME regular expression (for example, there can be no spaces or special characters). The <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">env_var_name</code> parameter is a more meaningful parameter type that enables CircleCI to check that the string that has been passed can be used as an environment variable name. For more information on environment variables, see the guide to <span><a data-testid="link" href="/docs/env-vars/" class="css-x7gnkn"> <!-- -->Environment Variables</a></span>.</p> <p>The example below shows you how to use the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">env_var_name</code> parameter type for deploying to AWS S3 with a reusable <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">build</code> job. This example uses the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">AWS_ACCESS_KEY</code> and <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">AWS_SECRET_KEY</code> environment variables with the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">access-key</code> and <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">secret-key</code> parameters. If you have a deploy job that runs the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">s3cmd</code>, it is possible to create a reusable command that uses the needed authentication, but deploys to a custom bucket.</p> <p>Original <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">config.yml</code> file:</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 jobs: build: docker: - image: ubuntu:latest steps: - run: command: | s3cmd --access_key ${FOO_BAR} \ --secret_key ${BIN_BAZ} \ ls s3://some/where workflows: workflow: jobs: - build </code></pre></div></div> <p>New <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">config.yml</code> file:</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 jobs: build: parameters: access-key: type: env_var_name default: AWS_ACCESS_KEY secret-key: type: env_var_name default: AWS_SECRET_KEY command: type: string docker: - image: ubuntu:latest steps: - run: | s3cmd --access_key ${<< parameters.access-key >>} \\ --secret_key ${<< parameters.secret-key >>} \\ << parameters.command >> workflows: workflow: jobs: - build: access-key: FOO_BAR secret-key: BIN_BAZ command: ls s3://some/where </code></pre></div></div> <div><div class="css-1gt1ibw"><h2 id="authoring-reusable-commands" data-testid="title-authoring-reusable-commands" class="css-sycgw4">Authoring reusable commands</h2></div></div> <p>Commands are declared under the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">commands</code> key of a <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">.circleci/config.yml</code> file. The following example defines a command called <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">sayhello</code>, which accepts a string parameter <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">to</code>:</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 commands: sayhello: description: "A very simple command for demonstration purposes" parameters: to: type: string default: "World" steps: - run: echo Hello << parameters.to >> </code></pre></div></div> <div><div class="css-1gt1ibw"><h3 id="the-commands-key" data-testid="title-the-commands-key" class="css-ycntf9">The <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">commands</code> key</h3></div></div> <p>A command defines a sequence of steps as a map to be executed in a job, enabling you to reuse a single command definition across multiple jobs.</p> <div style="overflow:auto"><table class="table table-striped"><thead><tr><th>Key</th><th>Required</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>steps</td><td>Y</td><td>Sequence</td><td>A sequence of steps that run inside the job that calls the command.</td></tr><tr><td>parameters</td><td>N</td><td>Map</td><td>A map of parameter keys. See the <span><a data-testid="link" href="/docs/reusing-config/#parameter-syntax" class="css-x7gnkn"> <!-- -->Parameter Syntax</a></span> section for details.</td></tr><tr><td>description</td><td>N</td><td>String</td><td>A string that describes the purpose of the command. Used for generating documentation.</td></tr></tbody></table></div> <div><div class="css-1gt1ibw"><h3 id="invoking-reusable-commands" data-testid="title-invoking-reusable-commands" class="css-ycntf9">Invoking reusable commands</h3></div></div> <p>Reusable commands are invoked with specific parameters as steps inside a job. When using a command, the steps of that command are inserted at the location where the command is invoked. Commands may only be used as part of the sequence under <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">steps</code> in a job.</p> <p>The following example uses the same command from the previous example – <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">sayhello</code> – and invokes it in the job <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">myjob</code>, passing it a value for the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">to</code> parameter:</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 commands: sayhello: description: "A very simple command for demonstration purposes" parameters: to: type: string default: "World" steps: - run: echo Hello << parameters.to >> jobs: myjob: docker: - image: "cimg/base:stable" steps: - sayhello: # invoke command "sayhello" to: "Lev" </code></pre></div></div> <div><div class="css-1gt1ibw"><h3 id="invoking-other-commands-in-a-command" data-testid="title-invoking-other-commands-in-a-command" class="css-ycntf9">Invoking other commands in a command</h3></div></div> <p>Commands can use other commands in the scope of execution. For instance, if a command is declared inside an orb it can use other commands in that orb. It can also use commands defined in other orbs that you have imported (for example <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">some-orb/some-command</code>).</p> <div><div class="css-1gt1ibw"><h3 id="special-keys" data-testid="title-special-keys" class="css-ycntf9">Special keys</h3></div></div> <p>CircleCI has several special keys available to all <span><a data-testid="link" href="https://circleci.com" class="css-x7gnkn"> <!-- -->circleci.com</a></span> customers and available by default in CircleCI server installations. Examples of these keys are:</p> <ul> <li><code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">checkout</code></li> <li><code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">setup_remote_docker</code></li> <li><code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">persist_to_workspace</code></li> </ul> <div class="css-bdwfpm"><div data-testid="compass-info-alert" role="alert" aria-live="polite" class="css-l2fvwh"><div class="css-1i7vmqf"><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><div id="collapsible-flex" class="css-45kv77"><div class="css-seohoz"><span class="css-1c1tyii">It is possible to override the special keys with a custom command.</span></div><div class="css-1828gbe"> <!-- --> </div><div class="css-1828gbe"> <!-- --> </div></div></div></div></div> <div><div class="css-1gt1ibw"><h3 id="commands-usage-examples" data-testid="title-commands-usage-examples" class="css-ycntf9">Commands usage examples</h3></div></div> <p>The following is an example of part of the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">aws-s3</code> orb where a command called <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">sync</code> is defined:</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">#... sync: description: Syncs directories and S3 prefixes. parameters: arguments: default: "" description: | Optional additional arguments to pass to the `aws sync` command (e.g., `--acl public-read`). Note: if passing a multi-line value to this parameter, include `\` characters after each line, so the Bash shell can correctly interpret the entire command. type: string aws-access-key-id: default: AWS_ACCESS_KEY_ID description: aws access key id override type: env_var_name aws-region: default: AWS_REGION description: aws region override type: env_var_name aws-secret-access-key: default: AWS_SECRET_ACCESS_KEY description: aws secret access key override type: env_var_name from: description: A local *directory* path to sync with S3 type: string to: description: A URI to an S3 bucket, i.e. 's3://the-name-my-bucket' type: string steps: - aws-cli/setup: aws-access-key-id: << parameters.aws-access-key-id >> aws-region: << parameters.aws-region >> aws-secret-access-key: << parameters.aws-secret-access-key >> - deploy: command: | aws s3 sync \ <<parameters.from>> <<parameters.to>> <<parameters.arguments>> name: S3 Sync #... </code></pre></div></div> <p>To invoke this <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">sync</code> command in your 2.1 <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">.circleci/config.yml</code> file, see the following example:</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 orbs: aws-s3: circleci/aws-s3@4.1.0 jobs: deploy2s3: docker: - image: cimg/base:2023.06 steps: - aws-s3/sync: from: . to: "s3://mybucket_uri" workflows: build-test-deploy: jobs: - deploy2s3 </code></pre></div></div> <p>Defining a <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">build</code> job:</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 orbs: aws-cli: circleci/aws-cli@5.1.1 aws-s3: circleci/aws-s3@4.1.0 jobs: build: executor: aws-cli/default steps: - checkout - run: mkdir bucket && echo "lorum ipsum" > bucket/build_asset.txt - aws-s3/sync: from: bucket to: "s3://my-s3-bucket-name/prefix" - aws-s3/copy: from: bucket/build_asset.txt to: "s3://my-s3-bucket-name" arguments: --dryrun </code></pre></div></div> <div><div class="css-1gt1ibw"><h2 id="authoring-reusable-executors" data-testid="title-authoring-reusable-executors" class="css-sycgw4">Authoring reusable executors</h2></div></div> <p>Executors define the environment in which the steps of a job will be run. When declaring a <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">job</code> in CircleCI configuration, you define the type of execution environment (<code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">docker</code>, <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">machine</code>, <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">macos</code>. etc.) to run in, as well as any other parameters for that environment, including: environment variables to populate, which shell to use, what size <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">resource_class</code> to use, etc.</p> <p>Executor declarations outside of <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">jobs</code> can be used by all jobs in the scope of that declaration, allowing you to reuse a single executor definition across multiple jobs.</p> <p>An executor definition includes one or more of the following keys:</p> <ul> <li><code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">docker</code> or <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">machine</code> or <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">macos</code></li> <li><code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">environment</code></li> <li><code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">working_directory</code></li> <li><code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">shell</code></li> <li><code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">resource_class</code></li> </ul> <p>In the following example <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">my-executor</code> is used for running the job <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">my-job</code>.</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 executors: my-executor: docker: - image: cimg/ruby:2.5.1-browsers jobs: my-job: executor: my-executor steps: - run: echo outside the executor </code></pre></div></div> <div><div class="css-1gt1ibw"><h3 id="the-executors-key" data-testid="title-the-executors-key" class="css-ycntf9">The <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">executors</code> key</h3></div></div> <p>Executors define the environment in which the steps of a job will be run, allowing you to reuse a single executor definition across multiple jobs.</p> <div style="overflow:auto"><table class="table table-striped"><thead><tr><th>Key</th><th>Required</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>docker</td><td>Y <sup>(1)</sup></td><td>List</td><td>Options for <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">docker</code> executor.</td></tr><tr><td>resource_class</td><td>N</td><td>String</td><td>Amount of CPU and RAM allocated to each container in a job.</td></tr><tr><td>machine</td><td>Y <sup>(1)</sup></td><td>Map</td><td>Options for <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">machine</code> executor.</td></tr><tr><td>macos</td><td>Y <sup>(1)</sup></td><td>Map</td><td>Options for <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">macOS</code> executor.</td></tr><tr><td>shell</td><td>N</td><td>String</td><td>Shell to use for execution command in all steps. Can be overridden by <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">shell</code> in each step.</td></tr><tr><td>working_directory</td><td>N</td><td>String</td><td>The directory in which to run the steps.</td></tr><tr><td>environment</td><td>N</td><td>Map</td><td>A map of environment variable names and values.</td></tr></tbody></table></div> <p>Example:</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 executors: my-executor: docker: - image: cimg/ruby:2.5.1-browsers jobs: my-job: executor: my-executor steps: - run: echo outside the executor </code></pre></div></div> <div><div class="css-1gt1ibw"><h3 id="invoking-reusable-executors" data-testid="title-invoking-reusable-executors" class="css-ycntf9">Invoking reusable executors</h3></div></div> <p>The following example passes <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">my-executor</code> as the value of a <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">name</code> key under <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">executor</code> – this method is primarily employed when passing parameters to executor invocations:</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 executors: my-executor: docker: - image: cimg/ruby:3.2.2 jobs: my-job: executor: name: my-executor steps: - run: echo outside the executor </code></pre></div></div> <p>It is also possible to allow an orb to define the executor used by all of its commands. This allows users to execute the commands of that orb in the execution environment defined by the orb’s author.</p> <div><div class="css-1gt1ibw"><h3 id="example-of-using-an-executor-declared-in-configyml-with-matrix-jobs" data-testid="title-example-of-using-an-executor-declared-in-configyml-with-matrix-jobs" class="css-ycntf9">Example of using an executor declared in <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">config.yml</code> with matrix jobs.</h3></div></div> <p>The following example declares a Docker executor with a node image, <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">node-docker</code>. The tag portion of the image string is parameterized with a <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">version</code> parameter. A <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">version</code> parameter is also included in the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">test</code> job so that it can be passed through the job into the executor when the job is called from a workflow.</p> <p>When calling the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">test</code> job in the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">matrix-tests</code> workflow, <span><a data-testid="link" href="/docs/configuration-reference/#matrix" class="css-x7gnkn"> <!-- -->matrix jobs</a></span> are used to run the job multiple times, concurrently, each with a different set of parameters. The Node application is tested against many versions of Node.js:</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 executors: node-docker: # declares a reusable executor parameters: version: description: "version tag" default: "lts" type: string docker: - image: cimg/node:<<parameters.version>> jobs: test: parameters: version: description: "version tag" default: "lts" type: string executor: name: node-docker version: <<parameters.version>> steps: - checkout - run: echo "how are ya?" workflows: matrix-tests: jobs: - test: matrix: parameters: version: - 13.11.0 - 12.16.0 - 10.19.0 </code></pre></div></div> <div><div class="css-1gt1ibw"><h3 id="using-executors-defined-in-an-orb" data-testid="title-using-executors-defined-in-an-orb" class="css-ycntf9">Using executors defined in an orb</h3></div></div> <p>You can also refer to executors from other orbs. Users of an orb can invoke its executors. For example, <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">foo-orb</code> could define the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">bar</code> executor:</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 # Yaml from foo-orb executors: bar: docker: - image: cimg/base:2023.11 environment: RUN_TESTS: foobar </code></pre></div></div> <p><code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">baz-orb</code> could define the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">bar</code> executor too:</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 # Yaml from baz-orb executors: bar: docker: - image: cimg/base:stable </code></pre></div></div> <p>You may use either executor from your configuration file with:</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 # config.yml orbs: foo-orb: somenamespace/foo@1 baz-orb: someothernamespace/baz@3.3.1 jobs: some-job: executor: foo-orb/bar # prefixed executor some-other-job: executor: baz-orb/bar # prefixed executor </code></pre></div></div> <p><strong>Note:</strong> The <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">foo-orb/bar</code> and <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">baz-orb/bar</code> are different executors. They both have the local name <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">bar</code> relative to their orbs, but they are independent executors defined in different orbs.</p> <div><div class="css-1gt1ibw"><h3 id="overriding-keys-when-invoking-an-executor" data-testid="title-overriding-keys-when-invoking-an-executor" class="css-ycntf9">Overriding keys when invoking an executor</h3></div></div> <p>When invoking an executor in a <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">job</code>, any keys in the job itself will override those of the executor invoked. For example, if your job declares a <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">docker</code> stanza, it will be used, in its entirety, instead of the one in your executor.</p> <div class="css-bdwfpm"><div data-testid="compass-info-alert" role="alert" aria-live="polite" class="css-l2fvwh"><div class="css-1i7vmqf"><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><div id="collapsible-flex" class="css-45kv77"><div class="css-seohoz"><span class="css-1c1tyii">The <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">environment</code> variable maps are additive. If an <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">executor</code> has one of the same <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">environment</code> variables as the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">job</code>, the value in the job will be used. See the <span><a data-testid="link" href="/docs/env-vars/#order-of-precedence" class="css-x7gnkn"> <!-- -->Environment Variables guide</a></span> for more information.</span></div><div class="css-1828gbe"> <!-- --> </div><div class="css-1828gbe"> <!-- --> </div></div></div></div></div> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 executors: node: docker: - image: cimg/node:lts environment: ENV: ci jobs: build: docker: - image: cimg/base:stable # The test executor below will be overwritten by the more explicit "docker" executor. Any env vars will be added. executor: node steps: - run: echo "Node will not be installed." </code></pre></div></div> <p>The above config would resolve to the following:</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 jobs: build: docker: - image: cimg/base:stable environment: ENV: ci # From executor. steps: - run: echo "Node will not be installed." </code></pre></div></div> <div><div class="css-1gt1ibw"><h2 id="authoring-parameterized-jobs" data-testid="title-authoring-parameterized-jobs" class="css-sycgw4">Authoring parameterized jobs</h2></div></div> <p>It is possible to invoke the same job more than once in the workflows stanza of <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">.circleci/config.yml</code>, passing any necessary parameters as subkeys to the job. See the <span><a data-testid="link" href="/docs/reusing-config/#parameter-syntax" class="css-x7gnkn"> <!-- -->Parameters syntax section</a></span> above for details of syntax usage.</p> <p>Example of defining and invoking a parameterized job in a <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">config.yml</code>:</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 jobs: sayhello: # defines a parameterized job description: A job that does very little other than demonstrate what a parameterized job looks like parameters: saywhat: description: "To whom shall we say hello?" default: "World" type: string docker: - image: cimg/base:2023.11 steps: - run: echo "Hello << parameters.saywhat >>" workflows: build: jobs: - sayhello: # invokes the parameterized job saywhat: Everyone </code></pre></div></div> <div class="css-bdwfpm"><div data-testid="compass-info-alert" role="alert" aria-live="polite" class="css-l2fvwh"><div class="css-1i7vmqf"><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><div id="collapsible-flex" class="css-45kv77"><div class="css-seohoz"><span class="css-1c1tyii">When invoking the same job multiple times with parameters across any number of workflows, the build name will be changed (i.e. <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">sayhello-1</code>, <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">sayhello-2</code>, etc.). To ensure build numbers are not appended, utilize the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">name</code> key. The name you assign needs to be unique, otherwise the numbers will still be appended to the job name. As an example:</span></div><div class="css-1828gbe"> <!-- --> </div><div class="css-1828gbe"> <!-- --> </div></div></div></div></div> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">workflows: build: jobs: - sayhello: name: build-sayhello saywhat: Everyone deploy: jobs: - sayhello: name: deploy-sayhello saywhat: All </code></pre></div></div> <div><div class="css-1gt1ibw"><h3 id="jobs-defined-in-an-orb" data-testid="title-jobs-defined-in-an-orb" class="css-ycntf9">Jobs defined in an orb</h3></div></div> <p>If a job is declared inside an orb it can use commands in that orb or the global commands. It is not possible to call commands outside the scope of declaration of the job.</p> <p><strong>hello-orb</strong></p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 # partial yaml from hello-orb jobs: sayhello: parameters: saywhat: description: "To whom shall we say hello?" default: "World" type: string docker: - image: cimg/base:2023.11 steps: - saywhat: saywhat: "<< parameters.saywhat >>" commands: saywhat: parameters: saywhat: type: string steps: - run: echo "<< parameters.saywhat >>" </code></pre></div></div> <p><strong>Config leveraging hello-orb</strong></p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight"># config.yml version: 2.1 orbs: hello-orb: somenamespace/hello-orb@volatile workflows: build: jobs: - hello-orb/sayhello: saywhat: Everyone </code></pre></div></div> <div><div class="css-1gt1ibw"><h3 id="using-parameters-in-executors" data-testid="title-using-parameters-in-executors" class="css-ycntf9">Using parameters in executors</h3></div></div> <p>To use parameters in executors, define the parameters under the given executor. When you invoke the executor, pass the keys of the parameters as a map of keys under the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">executor:</code> declaration, each of which has the value of the parameter to pass in.</p> <p>Parameters in executors can be of the type <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">string</code>, <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">enum</code>, or <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">boolean</code>. Default values can be provided with the optional <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">default</code> key.</p> <div><div class="css-1gt1ibw"><h4 id="example-build-configuration-using-a-parameterized-executor" data-testid="title-example-build-configuration-using-a-parameterized-executor" class="css-19alzbx">Example build configuration using a parameterized executor</h4></div></div> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 executors: python: parameters: tag: type: string default: latest myspecialvar: type: string docker: - image: cimg/python:<< parameters.tag >> environment: MYPRECIOUS: << parameters.myspecialvar >> jobs: build: executor: name: python tag: "2.7" myspecialvar: "myspecialvalue" </code></pre></div></div> <p>The above would resolve to the following:</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 jobs: build: steps: [] docker: - image: cimg/python:2.7 environment: MYPRECIOUS: "myspecialvalue" </code></pre></div></div> <div><div class="css-1gt1ibw"><h3 id="the-scope-of-parameters" data-testid="title-the-scope-of-parameters" class="css-ycntf9">The scope of parameters</h3></div></div> <p>Parameters are in-scope only within the job or command that defined them. If you want a job or command to pass its parameters to a command it invokes, they must be passed explicitly.</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 jobs: sayhello: parameters: saywhat: description: "To whom shall we say hello?" default: "World" type: string docker: - image: cimg/base:2023.11 steps: - say: # Since the command "say" doesn't define a default # value for the "saywhat" parameter, it must be # passed in manually saywhat: << parameters.saywhat >> commands: say: parameters: saywhat: type: string steps: - run: echo "<< parameters.saywhat >>" workflows: build: jobs: - sayhello: saywhat: Everyone </code></pre></div></div> <div><div class="css-1gt1ibw"><h3 id="invoking-the-same-job-multiple-times" data-testid="title-invoking-the-same-job-multiple-times" class="css-ycntf9">Invoking the same job multiple times</h3></div></div> <p>A single configuration may invoke a job multiple times. At configuration processing time during build ingestion, CircleCI will auto-generate names if none are provided or you may name the duplicate jobs explicitly with the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">name</code> key.</p> <div class="css-bdwfpm"><div data-testid="compass-info-alert" role="alert" aria-live="polite" class="css-l2fvwh"><div class="css-1i7vmqf"><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><div id="collapsible-flex" class="css-45kv77"><div class="css-seohoz"><span class="css-1c1tyii">You must explicitly name repeat jobs when a repeat job should be upstream of another job in a workflow. For example, if a job is used under the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">requires</code> key of a job invocation in a workflow, you will need to explicitly name it.</span></div><div class="css-1828gbe"> <!-- --> </div><div class="css-1828gbe"> <!-- --> </div></div></div></div></div> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 workflows: build: jobs: - loadsay # This doesn't need an explicit name as it has no downstream dependencies - sayhello: saywhat: Everyone requires: - loadsay # This needs an explicit name for saygoodbye to require it as a job dependency - sayhello: name: SayHelloChad saywhat: Chad # Uses explicitly defined "sayhello" - saygoodbye: requires: - SayHelloChad </code></pre></div></div> <div><div class="css-1gt1ibw"><h3 id="using-pre-and-post-steps" data-testid="title-using-pre-and-post-steps" class="css-ycntf9">Using pre and post steps</h3></div></div> <p>Every job invocation may optionally accept two special arguments: <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">pre-steps</code> and <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">post-steps</code>. Steps under <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">pre-steps</code> are executed before any of the other steps in the job. The steps under <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">post-steps</code> are executed after all of the other steps.</p> <p>Pre and post steps allow you to execute steps in a given job without modifying the job. This is useful, for example, in running custom setup steps before job execution.</p> <div><div class="css-1gt1ibw"><h3 id="defining-pre-and-post-steps" data-testid="title-defining-pre-and-post-steps" class="css-ycntf9">Defining pre and post steps</h3></div></div> <div class="css-bdwfpm"><div data-testid="compass-info-alert" role="alert" aria-live="polite" class="css-l2fvwh"><div class="css-1i7vmqf"><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><div id="collapsible-flex" class="css-45kv77"><div class="css-seohoz"><span class="css-1c1tyii">The keys <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">pre-steps</code> and <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">post-steps</code> in jobs are available in configuration version 2.1 and later.</span></div><div class="css-1828gbe"> <!-- --> </div><div class="css-1828gbe"> <!-- --> </div></div></div></div></div> <p>The following example defines pre-steps and post-steps in the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">bar</code> job of the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">build</code> workflow:</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight"># config.yml version: 2.1 jobs: bar: docker: - image: cimg/base:2023.11 steps: - checkout - run: command: echo "building" - run: command: echo "testing" workflows: build: jobs: - bar: pre-steps: - run: command: echo "install custom dependency" post-steps: - run: command: echo "upload artifact to s3" </code></pre></div></div> <div><div class="css-1gt1ibw"><h2 id="defining-conditional-steps" data-testid="title-defining-conditional-steps" class="css-sycgw4">Defining conditional steps</h2></div></div> <div class="css-bdwfpm"><div data-testid="compass-info-alert" role="alert" aria-live="polite" class="css-l2fvwh"><div class="css-1i7vmqf"><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><div id="collapsible-flex" class="css-45kv77"><div class="css-seohoz"><span class="css-1c1tyii">Conditional steps are available in configuration version 2.1 and later.</span></div><div class="css-1828gbe"> <!-- --> </div><div class="css-1828gbe"> <!-- --> </div></div></div></div></div> <p>Conditional steps run only if a condition is met at config-compile time, before a workflow runs. This means, for example, that you may not use a condition to check an environment variable, as those are not injected until your steps are running in the shell of your execution environment.</p> <p>Conditional steps may be located anywhere a regular step could and may only use parameter values as inputs.</p> <p>For example, an orb could define a command that runs a set of steps <em>if</em> invoked with <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">myorb/foo: { dostuff: true }</code>, but not <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">myorb/foo: { dostuff: false }</code>.</p> <p>Furthermore, an orb author could define conditional steps in the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">steps</code> key of a Job or a Command.</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight"># Inside config.yml version: 2.1 jobs: myjob: parameters: preinstall-foo: type: boolean default: false docker: - image: cimg/base:2023.11 steps: - run: echo "preinstall is << parameters.preinstall-foo >>" - when: condition: << parameters.preinstall-foo >> steps: - run: echo "preinstall" - unless: condition: << parameters.preinstall-foo >> steps: - run: echo "don't preinstall" workflows: workflow: jobs: - myjob: preinstall-foo: false - myjob: preinstall-foo: true - myjob # The empty string is falsy </code></pre></div></div> <div><div class="css-1gt1ibw"><h3 id="the-when-step" data-testid="title-the-when-step" class="css-ycntf9"><strong>The <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">when</code> step</strong></h3></div></div> <p>Under the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">when</code> key are the subkeys <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">condition</code> and <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">steps</code>. The subkey <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">steps</code> are run only if the condition evaluates to a truthy value.</p> <div style="overflow:auto"><table class="table table-striped"><thead><tr><th>Key</th><th>Required</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>condition</td><td>Y</td><td>Logic</td><td><span><a data-testid="link" href="/docs/configuration-reference/#logic-statements" class="css-x7gnkn"> <!-- -->A logic statement</a></span></td></tr><tr><td>steps</td><td>Y</td><td>Sequence</td><td>A list of steps to execute when the condition is truthy.</td></tr></tbody></table></div> <div><div class="css-1gt1ibw"><h3 id="the-unless-step" data-testid="title-the-unless-step" class="css-ycntf9"><strong>The <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">unless</code> step</strong></h3></div></div> <p>Under the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">unless</code> key are the subkeys <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">condition</code> and <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">steps</code>. The subkey <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">steps</code> are run only if the condition evaluates to a falsy value.</p> <div style="overflow:auto"><table class="table table-striped"><thead><tr><th>Key</th><th>Required</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>condition</td><td>Y</td><td>Logic</td><td><span><a data-testid="link" href="/docs/configuration-reference/#logic-statements" class="css-x7gnkn"> <!-- -->A logic statement</a></span></td></tr><tr><td>steps</td><td>Y</td><td>Sequence</td><td>A list of steps to execute when the condition is falsy.</td></tr></tbody></table></div> <div><div class="css-1gt1ibw"><h2 id="writing-inline-orbs" data-testid="title-writing-inline-orbs" class="css-sycgw4">Writing inline orbs</h2></div></div> <p>When defining reusable configuration elements directly within your config, you can also wrap those elements within an inline orb. You may find inline orbs useful for development or for name-spacing elements that share names in a local config.</p> <p>To write an inline orb, place the orb elements under that orb’s key in the orbs declaration section of the configuration. For example, if you want to import one orb to use inside another inline orb, the config could look like the example shown below, in which the inline orb <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">my-orb</code> imports the <code class="language-plaintext highlighter-rouge" data-testid="code-snippet-highlight">node</code> orb:</p> <div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code class="" data-testid="code-snippet-highlight">version: 2.1 orbs: my-orb: orbs: node: circleci/node@3.0 commands: my_command: steps: - run: echo "Run my tests" jobs: my_job: executor: node/default # Node orb executor steps: - checkout - my_command - store_test_results: path: test-results workflows: main: jobs: - my-orb/my_job </code></pre></div></div> <div><div class="css-1gt1ibw"><h2 id="see-also" data-testid="title-see-also" class="css-sycgw4">See also</h2></div></div> <ul> <li>Refer to <span><a data-testid="link" href="/docs/sample-config/" class="css-x7gnkn"> <!-- -->Sample Configurations</a></span> for some sample configurations that you can use in your own CircleCI configuration.</li> <li>Refer to <span><a data-testid="link" href="/docs/postgres-config/" class="css-x7gnkn"> <!-- -->Database Examples</a></span> for database examples you can use in your CircleCI configuration.</li> </ul></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/reusing-config.md" 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-F3iyYhqUAyFn" 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-F3iyYhqUAyFn">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-fv7Em2MwdeKg" 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-fv7Em2MwdeKg">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-p1MUwHhCglK0" 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-p1MUwHhCglK0">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-6JttnAuNRe2H" 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-6JttnAuNRe2H">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-z7XxfodrPCDG" 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-z7XxfodrPCDG">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-KwGiOGoLIn7B" 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-KwGiOGoLIn7B">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":"\u003cp\u003eThis guide describes how to get started with reusable commands, jobs, executors and orbs. This guide also covers the use of parameters for creating parameterized reusable elements.\u003c/p\u003e \u003cp class=\"alert alert-info\"\u003e\u003cstrong\u003eUsing Docker?\u003c/strong\u003e Authenticating Docker pulls from image registries is recommended when using the Docker execution environment. Authenticated pulls allow access to private Docker images, and may also grant higher rate limits, depending on your registry provider. For further information see \u003ca href=\"/docs/private-images\"\u003eUsing Docker authenticated pulls\u003c/a\u003e.\u003c/p\u003e \u003ch2 id=\"notes-on-reusable-configuration\"\u003eNotes on reusable configuration\u003c/h2\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eInstall the CircleCI CLI so that you have access to the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ecircleci config process\u003c/code\u003e command (optional). This command lets you see the expanded configuration with all reusable keys processed. Follow the \u003ca href=\"/docs/local-cli/\"\u003eUsing the CircleCI CLI\u003c/a\u003e documentation for installation instructions and tips.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eCircleCI reusable configuration elements require a \u003cstrong\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003eversion: 2.1\u003c/code\u003e\u003c/strong\u003e \u003ccode class=\"language-plaintext highlighter-rouge\"\u003e.circleci/config.yml\u003c/code\u003e file.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eCommand, job, executor, and parameter names must start with a letter and can only contain lowercase letters (\u003ccode class=\"language-plaintext highlighter-rouge\"\u003ea\u003c/code\u003e-\u003ccode class=\"language-plaintext highlighter-rouge\"\u003ez\u003c/code\u003e), digits (\u003ccode class=\"language-plaintext highlighter-rouge\"\u003e0\u003c/code\u003e-\u003ccode class=\"language-plaintext highlighter-rouge\"\u003e9\u003c/code\u003e), underscores (\u003ccode class=\"language-plaintext highlighter-rouge\"\u003e_\u003c/code\u003e) and hyphens (\u003ccode class=\"language-plaintext highlighter-rouge\"\u003e-\u003c/code\u003e).\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003ch2 id=\"using-the-parameters-declaration\"\u003eUsing the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eparameters\u003c/code\u003e declaration\u003c/h2\u003e \u003cp\u003eParameters are declared by name under a job, command, or executor. \u003cem\u003ePipeline parameters\u003c/em\u003e are defined at the top level of a project configuration. See the \u003ca href=\"/docs/pipeline-variables/#pipeline-parameters-in-configuration\"\u003ePipeline Values and Parameters guide\u003c/a\u003e for more information.\u003c/p\u003e \u003cp\u003eThe immediate children of the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eparameters\u003c/code\u003e key are a set of keys in a map.\u003c/p\u003e \u003cp\u003eIn the following example, a command named \u003ccode class=\"language-plaintext highlighter-rouge\"\u003egreeting\u003c/code\u003e is designed with a single parameter named \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eto\u003c/code\u003e. The \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eto\u003c/code\u003e parameter is used within the steps to echo \u003cem\u003eHello\u003c/em\u003e back to the user.\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003ecommands\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"c1\"\u003e# a reusable command with parameters\u003c/span\u003e\n \u003cspan class=\"na\"\u003egreeting\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eto\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eworld\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"Hello \u0026lt;\u0026lt;parameters.to\u0026gt;\u0026gt;\"\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emy-job\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:stable\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003egreeting\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eto\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eMy-Name\"\u003c/span\u003e\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emy-workflow\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003emy-job\u003c/span\u003e\n\n\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch3 id=\"parameter-syntax\"\u003eParameter syntax\u003c/h3\u003e \u003cp\u003eA parameter can have the following keys as immediate children:\u003c/p\u003e \u003ctable class=\"table table-striped\"\u003e \u003cthead\u003e \u003ctr\u003e \u003cth\u003eKey Name\u003c/th\u003e \u003cth\u003eDescription\u003c/th\u003e \u003cth\u003eDefault value\u003c/th\u003e \u003c/tr\u003e \u003c/thead\u003e \u003ctbody\u003e \u003ctr\u003e \u003ctd\u003edescription\u003c/td\u003e \u003ctd\u003eOptional. Used to generate documentation for your orb.\u003c/td\u003e \u003ctd\u003eN/A\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003etype\u003c/td\u003e \u003ctd\u003eRequired. See \u003cstrong\u003eParameter Types\u003c/strong\u003e in the section below for details.\u003c/td\u003e \u003ctd\u003eN/A\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003edefault\u003c/td\u003e \u003ctd\u003eThe default value for the parameter. Required for pipeline parameters. For all other parameters, if not present, the parameter is implied to be required.\u003c/td\u003e \u003ctd\u003eN/A\u003c/td\u003e \u003c/tr\u003e \u003c/tbody\u003e \u003c/table\u003e \u003ch3 id=\"parameter-types\"\u003eParameter types\u003c/h3\u003e \u003cp\u003eThis section describes the types of parameters and their usage.\u003c/p\u003e \u003cp\u003eThe parameter types supported by orbs are:\u003c/p\u003e \u003cul\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003estring\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003eboolean\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003einteger\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenum\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003eexecutor\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003esteps\u003c/code\u003e\u003c/li\u003e \u003cli\u003eenvironment variable name\u003c/li\u003e \u003c/ul\u003e \u003cp\u003eThe parameter types supported by pipeline parameters are:\u003c/p\u003e \u003cul\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003estring\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003eboolean\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003einteger\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenum\u003c/code\u003e\u003c/li\u003e \u003c/ul\u003e \u003ch4 id=\"string\"\u003eString\u003c/h4\u003e \u003cp\u003eBasic string parameters are described below:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003ecommands\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ecopy-markdown\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edestination\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003edestination directory\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003edocs\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecp *.md \u0026lt;\u0026lt; parameters.destination \u0026gt;\u0026gt;\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003eStrings must be enclosed in quotes if they would otherwise represent another type (such as boolean or number) or if they contain characters that have special meaning in YAML, particularly for the colon character. In all other instances, quotes are optional.\u003c/p\u003e \u003cp\u003eEmpty strings are treated as a falsy value in evaluation of \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ewhen\u003c/code\u003e clauses, and all other strings are treated as truthy. Using an unquoted string value that YAML interprets as a boolean will result in a type error.\u003c/p\u003e \u003ch4 id=\"boolean\"\u003eBoolean\u003c/h4\u003e \u003cp\u003eBoolean parameters are useful for conditionals:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003ecommands\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003enpm-install\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eclean\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ePerform a clean install\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eboolean\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"no\"\u003efalse\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003ewhen\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003econdition\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.clean \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003enpm clean-install\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003ewhen\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003econdition\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003enot\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.clean \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003enpm install\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003eBoolean parameter evaluation is based on the \u003ca href=\"https://yaml.org/type/bool.html\"\u003evalues specified in YAML 1.1\u003c/a\u003e:\u003c/p\u003e \u003cul\u003e \u003cli\u003eTrue: \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ey\u003c/code\u003e \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eyes\u003c/code\u003e \u003ccode class=\"language-plaintext highlighter-rouge\"\u003etrue\u003c/code\u003e \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eon\u003c/code\u003e\u003c/li\u003e \u003cli\u003eFalse: \u003ccode class=\"language-plaintext highlighter-rouge\"\u003en\u003c/code\u003e \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eno\u003c/code\u003e \u003ccode class=\"language-plaintext highlighter-rouge\"\u003efalse\u003c/code\u003e \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eoff\u003c/code\u003e\u003c/li\u003e \u003c/ul\u003e \u003cp\u003eCapitalized and uppercase versions of the above values are also valid.\u003c/p\u003e \u003cp class=\"alert alert-info\"\u003eBoolean values may be returned as a ‘1’ for True and ‘0’ for False.\u003c/p\u003e \u003ch4 id=\"integer\"\u003eInteger\u003c/h4\u003e \u003cp\u003eUse the parameter type \u003ccode class=\"language-plaintext highlighter-rouge\"\u003einteger\u003c/code\u003e to pass a numeric integer value.\u003c/p\u003e \u003cp\u003eThe following example uses the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003einteger\u003c/code\u003e type to populate the value of \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eparallelism\u003c/code\u003e in a job:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ep\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003einteger\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparallelism\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.p \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:2023.11\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003echeckout\u003c/span\u003e\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eworkflow\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ep\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch4 id=\"enum\"\u003eEnum\u003c/h4\u003e \u003cp\u003eThe \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenum\u003c/code\u003e parameter may be a list of any values. Use the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenum\u003c/code\u003e parameter type when you want to enforce that the value must be one from a specific set of string values.\u003c/p\u003e \u003cp\u003eThe following example uses the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenum\u003c/code\u003e parameter to declare the target operating system for a binary:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ecommands\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003elist-files\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eos\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003elinux\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eThe target Operating System for the heroku binary. Must be one of \"linux\", \"darwin\", \"win32\".\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eenum\u003c/span\u003e\n \u003cspan class=\"na\"\u003eenum\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"pi\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003elinux\"\u003c/span\u003e\u003cspan class=\"pi\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003edarwin\"\u003c/span\u003e\u003cspan class=\"pi\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003ewin32\"\u003c/span\u003e\u003cspan class=\"pi\"\u003e]\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003eThe following \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenum\u003c/code\u003e type declaration is invalid because the default is not declared in the enum list.\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ecommands\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003elist-files\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eos\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eenum\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003ewindows\"\u003c/span\u003e \u003cspan class=\"c1\"\u003e#invalid declaration of default that does not appear in the comma-separated enum list\u003c/span\u003e\n \u003cspan class=\"na\"\u003eenum\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"pi\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003edarwin\"\u003c/span\u003e\u003cspan class=\"pi\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003elinux\"\u003c/span\u003e\u003cspan class=\"pi\"\u003e]\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch4 id=\"executor\"\u003eExecutor\u003c/h4\u003e \u003cp\u003eUse an \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eexecutor\u003c/code\u003e parameter type to allow the invoker of a job to decide what executor it will run on.\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003eexecutors\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003exenial\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esome-value\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003efoo\u003c/span\u003e\n \u003cspan class=\"na\"\u003eenvironment\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eSOME_VAR\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.some-value \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eubuntu:xenial\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebionic\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eubuntu:bionic\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etest\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ee\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eexecutor\u003c/span\u003e\n \u003cspan class=\"na\"\u003eexecutor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.e \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003esome-tests\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eworkflow\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003etest\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ee\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ebionic\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003etest\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ee\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003exenial\u003c/span\u003e\n \u003cspan class=\"na\"\u003esome-value\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003efoobar\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch4 id=\"steps\"\u003eSteps\u003c/h4\u003e \u003cp\u003eSteps are used when you have a job or command that needs to mix predefined and user-defined steps. When passed in to a command or job invocation, the steps passed as parameters are always defined as a sequence, even if only one step is provided.\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ecommands\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003erun-tests\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eafter-deps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eSteps\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ethat\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ewill\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ebe\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003eexecuted\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003eafter\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003edependencies\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003eare\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003einstalled,\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ebut\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ebefore\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003etests\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003eare\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003erun\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003esteps\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"pi\"\u003e[]\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003emake deps\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.after-deps \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003emake test\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003eThe following example demonstrates that steps passed as parameters are given as the value of a \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esteps\u003c/code\u003e declaration under the job’s \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esteps\u003c/code\u003e.\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ecommands\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003erun-tests\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eafter-deps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eSteps\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ethat\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ewill\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ebe\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003eexecuted\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003eafter\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003edependencies\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003eare\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003einstalled,\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ebut\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ebefore\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003etests\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003eare\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003erun\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003esteps\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"pi\"\u003e[]\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003emake deps\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.after-deps \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003emake test\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:2023.11\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun-tests\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eafter-deps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"The dependencies are installed\"\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"And now I'm going to run the tests\"\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003eThe above will resolve to the following:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003emake deps\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"The dependencies are installed\"\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"And now I'm going to run the tests\"\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003emake test\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch4 id=\"environment-variable-name\"\u003eEnvironment variable name\u003c/h4\u003e \u003cp\u003eThe environment variable name (\u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenv_var_name\u003c/code\u003e) parameter is a string that must match a POSIX_NAME regular expression (for example, there can be no spaces or special characters). The \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenv_var_name\u003c/code\u003e parameter is a more meaningful parameter type that enables CircleCI to check that the string that has been passed can be used as an environment variable name. For more information on environment variables, see the guide to \u003ca href=\"/docs/env-vars/\"\u003eEnvironment Variables\u003c/a\u003e.\u003c/p\u003e \u003cp\u003eThe example below shows you how to use the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenv_var_name\u003c/code\u003e parameter type for deploying to AWS S3 with a reusable \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ebuild\u003c/code\u003e job. This example uses the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eAWS_ACCESS_KEY\u003c/code\u003e and \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eAWS_SECRET_KEY\u003c/code\u003e environment variables with the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eaccess-key\u003c/code\u003e and \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esecret-key\u003c/code\u003e parameters. If you have a deploy job that runs the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003es3cmd\u003c/code\u003e, it is possible to create a reusable command that uses the needed authentication, but deploys to a custom bucket.\u003c/p\u003e \u003cp\u003eOriginal \u003ccode class=\"language-plaintext highlighter-rouge\"\u003econfig.yml\u003c/code\u003e file:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eubuntu:latest\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ecommand\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"pi\"\u003e|\u003c/span\u003e\n \u003cspan class=\"s\"\u003es3cmd --access_key ${FOO_BAR} \\\u003c/span\u003e\n \u003cspan class=\"s\"\u003e--secret_key ${BIN_BAZ} \\\u003c/span\u003e\n \u003cspan class=\"s\"\u003els s3://some/where\u003c/span\u003e\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eworkflow\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003ebuild\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003eNew \u003ccode class=\"language-plaintext highlighter-rouge\"\u003econfig.yml\u003c/code\u003e file:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eaccess-key\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eenv_var_name\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eAWS_ACCESS_KEY\u003c/span\u003e\n \u003cspan class=\"na\"\u003esecret-key\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eenv_var_name\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eAWS_SECRET_KEY\u003c/span\u003e\n \u003cspan class=\"na\"\u003ecommand\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eubuntu:latest\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"pi\"\u003e|\u003c/span\u003e\n \u003cspan class=\"s\"\u003es3cmd --access_key ${\u0026lt;\u0026lt; parameters.access-key \u0026gt;\u0026gt;} \\\\\u003c/span\u003e\n \u003cspan class=\"s\"\u003e--secret_key ${\u0026lt;\u0026lt; parameters.secret-key \u0026gt;\u0026gt;} \\\\\u003c/span\u003e\n \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.command \u0026gt;\u0026gt;\u003c/span\u003e\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eworkflow\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eaccess-key\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eFOO_BAR\u003c/span\u003e\n \u003cspan class=\"na\"\u003esecret-key\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eBIN_BAZ\u003c/span\u003e\n \u003cspan class=\"na\"\u003ecommand\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003els s3://some/where\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch2 id=\"authoring-reusable-commands\"\u003eAuthoring reusable commands\u003c/h2\u003e \u003cp\u003eCommands are declared under the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ecommands\u003c/code\u003e key of a \u003ccode class=\"language-plaintext highlighter-rouge\"\u003e.circleci/config.yml\u003c/code\u003e file. The following example defines a command called \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esayhello\u003c/code\u003e, which accepts a string parameter \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eto\u003c/code\u003e:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ecommands\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eA\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003every\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003esimple\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ecommand\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003efor\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003edemonstration\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003epurposes\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eto\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eWorld\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho Hello \u0026lt;\u0026lt; parameters.to \u0026gt;\u0026gt;\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch3 id=\"the-commands-key\"\u003eThe \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ecommands\u003c/code\u003e key\u003c/h3\u003e \u003cp\u003eA command defines a sequence of steps as a map to be executed in a job, enabling you to reuse a single command definition across multiple jobs.\u003c/p\u003e \u003ctable class=\"table table-striped\"\u003e \u003cthead\u003e \u003ctr\u003e \u003cth\u003eKey\u003c/th\u003e \u003cth\u003eRequired\u003c/th\u003e \u003cth\u003eType\u003c/th\u003e \u003cth\u003eDescription\u003c/th\u003e \u003c/tr\u003e \u003c/thead\u003e \u003ctbody\u003e \u003ctr\u003e \u003ctd\u003esteps\u003c/td\u003e \u003ctd\u003eY\u003c/td\u003e \u003ctd\u003eSequence\u003c/td\u003e \u003ctd\u003eA sequence of steps that run inside the job that calls the command.\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003eparameters\u003c/td\u003e \u003ctd\u003eN\u003c/td\u003e \u003ctd\u003eMap\u003c/td\u003e \u003ctd\u003eA map of parameter keys. See the \u003ca href=\"/docs/reusing-config/#parameter-syntax\"\u003eParameter Syntax\u003c/a\u003e section for details.\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003edescription\u003c/td\u003e \u003ctd\u003eN\u003c/td\u003e \u003ctd\u003eString\u003c/td\u003e \u003ctd\u003eA string that describes the purpose of the command. Used for generating documentation.\u003c/td\u003e \u003c/tr\u003e \u003c/tbody\u003e \u003c/table\u003e \u003ch3 id=\"invoking-reusable-commands\"\u003eInvoking reusable commands\u003c/h3\u003e \u003cp\u003eReusable commands are invoked with specific parameters as steps inside a job. When using a command, the steps of that command are inserted at the location where the command is invoked. Commands may only be used as part of the sequence under \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esteps\u003c/code\u003e in a job.\u003c/p\u003e \u003cp\u003eThe following example uses the same command from the previous example – \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esayhello\u003c/code\u003e – and invokes it in the job \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emyjob\u003c/code\u003e, passing it a value for the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eto\u003c/code\u003e parameter:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ecommands\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eA\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003every\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003esimple\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ecommand\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003efor\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003edemonstration\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003epurposes\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eto\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eWorld\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho Hello \u0026lt;\u0026lt; parameters.to \u0026gt;\u0026gt;\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emyjob\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003ecimg/base:stable\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003esayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"c1\"\u003e# invoke command \"sayhello\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003eto\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eLev\"\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch3 id=\"invoking-other-commands-in-a-command\"\u003eInvoking other commands in a command\u003c/h3\u003e \u003cp\u003eCommands can use other commands in the scope of execution. For instance, if a command is declared inside an orb it can use other commands in that orb. It can also use commands defined in other orbs that you have imported (for example \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esome-orb/some-command\u003c/code\u003e).\u003c/p\u003e \u003ch3 id=\"special-keys\"\u003eSpecial keys\u003c/h3\u003e \u003cp\u003eCircleCI has several special keys available to all \u003ca href=\"https://circleci.com\"\u003ecircleci.com\u003c/a\u003e customers and available by default in CircleCI server installations. Examples of these keys are:\u003c/p\u003e \u003cul\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003echeckout\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003esetup_remote_docker\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003epersist_to_workspace\u003c/code\u003e\u003c/li\u003e \u003c/ul\u003e \u003cp class=\"alert alert-info\"\u003eIt is possible to override the special keys with a custom command.\u003c/p\u003e \u003ch3 id=\"commands-usage-examples\"\u003eCommands usage examples\u003c/h3\u003e \u003cp\u003eThe following is an example of part of the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eaws-s3\u003c/code\u003e orb where a command called \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esync\u003c/code\u003e is defined:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"c1\"\u003e#...\u003c/span\u003e\n\u003cspan class=\"na\"\u003esync\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eSyncs directories and S3 prefixes.\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003earguments\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003e\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"pi\"\u003e|\u003c/span\u003e\n \u003cspan class=\"s\"\u003eOptional additional arguments to pass to the `aws sync` command (e.g., `--acl public-read`). Note: if passing a multi-line value to this parameter, include `\\` characters after each line, so the Bash shell can correctly interpret the entire command.\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003eaws-access-key-id\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eAWS_ACCESS_KEY_ID\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eaws access key id override\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eenv_var_name\u003c/span\u003e\n \u003cspan class=\"na\"\u003eaws-region\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eAWS_REGION\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eaws region override\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eenv_var_name\u003c/span\u003e\n \u003cspan class=\"na\"\u003eaws-secret-access-key\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eAWS_SECRET_ACCESS_KEY\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eaws secret access key override\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eenv_var_name\u003c/span\u003e\n \u003cspan class=\"na\"\u003efrom\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eA local *directory* path to sync with S3\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003eto\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eA URI to an S3 bucket, i.e. 's3://the-name-my-bucket'\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eaws-cli/setup\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eaws-access-key-id\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.aws-access-key-id \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"na\"\u003eaws-region\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.aws-region \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"na\"\u003eaws-secret-access-key\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.aws-secret-access-key \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003edeploy\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ecommand\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"pi\"\u003e|\u003c/span\u003e\n \u003cspan class=\"s\"\u003eaws s3 sync \\\u003c/span\u003e\n \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt;parameters.from\u0026gt;\u0026gt; \u0026lt;\u0026lt;parameters.to\u0026gt;\u0026gt; \u0026lt;\u0026lt;parameters.arguments\u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eS3 Sync\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e#...\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003eTo invoke this \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esync\u003c/code\u003e command in your 2.1 \u003ccode class=\"language-plaintext highlighter-rouge\"\u003e.circleci/config.yml\u003c/code\u003e file, see the following example:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003eorbs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eaws-s3\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecircleci/aws-s3@4.1.0\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edeploy2s3\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:2023.06\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eaws-s3/sync\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003efrom\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e.\u003c/span\u003e\n \u003cspan class=\"na\"\u003eto\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003es3://mybucket_uri\"\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild-test-deploy\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003edeploy2s3\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003eDefining a \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ebuild\u003c/code\u003e job:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003eorbs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eaws-cli\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecircleci/aws-cli@5.1.1\u003c/span\u003e\n \u003cspan class=\"na\"\u003eaws-s3\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecircleci/aws-s3@4.1.0\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eexecutor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eaws-cli/default\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003echeckout\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003emkdir bucket \u0026amp;\u0026amp; echo \"lorum ipsum\" \u0026gt; bucket/build_asset.txt\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eaws-s3/sync\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003efrom\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ebucket\u003c/span\u003e\n \u003cspan class=\"na\"\u003eto\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003es3://my-s3-bucket-name/prefix\"\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eaws-s3/copy\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003efrom\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ebucket/build_asset.txt\u003c/span\u003e\n \u003cspan class=\"na\"\u003eto\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003es3://my-s3-bucket-name\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003earguments\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e--dryrun\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch2 id=\"authoring-reusable-executors\"\u003eAuthoring reusable executors\u003c/h2\u003e \u003cp\u003eExecutors define the environment in which the steps of a job will be run. When declaring a \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ejob\u003c/code\u003e in CircleCI configuration, you define the type of execution environment (\u003ccode class=\"language-plaintext highlighter-rouge\"\u003edocker\u003c/code\u003e, \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emachine\u003c/code\u003e, \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emacos\u003c/code\u003e. etc.) to run in, as well as any other parameters for that environment, including: environment variables to populate, which shell to use, what size \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eresource_class\u003c/code\u003e to use, etc.\u003c/p\u003e \u003cp\u003eExecutor declarations outside of \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ejobs\u003c/code\u003e can be used by all jobs in the scope of that declaration, allowing you to reuse a single executor definition across multiple jobs.\u003c/p\u003e \u003cp\u003eAn executor definition includes one or more of the following keys:\u003c/p\u003e \u003cul\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003edocker\u003c/code\u003e or \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emachine\u003c/code\u003e or \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emacos\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenvironment\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003eworking_directory\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003eshell\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003eresource_class\u003c/code\u003e\u003c/li\u003e \u003c/ul\u003e \u003cp\u003eIn the following example \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emy-executor\u003c/code\u003e is used for running the job \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emy-job\u003c/code\u003e.\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003eexecutors\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emy-executor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/ruby:2.5.1-browsers\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emy-job\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eexecutor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003emy-executor\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho outside the executor\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch3 id=\"the-executors-key\"\u003eThe \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eexecutors\u003c/code\u003e key\u003c/h3\u003e \u003cp\u003eExecutors define the environment in which the steps of a job will be run, allowing you to reuse a single executor definition across multiple jobs.\u003c/p\u003e \u003ctable class=\"table table-striped\"\u003e \u003cthead\u003e \u003ctr\u003e \u003cth\u003eKey\u003c/th\u003e \u003cth\u003eRequired\u003c/th\u003e \u003cth\u003eType\u003c/th\u003e \u003cth\u003eDescription\u003c/th\u003e \u003c/tr\u003e \u003c/thead\u003e \u003ctbody\u003e \u003ctr\u003e \u003ctd\u003edocker\u003c/td\u003e \u003ctd\u003eY \u003csup\u003e(1)\u003c/sup\u003e\u003c/td\u003e \u003ctd\u003eList\u003c/td\u003e \u003ctd\u003eOptions for \u003ccode class=\"language-plaintext highlighter-rouge\"\u003edocker\u003c/code\u003e executor.\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003eresource_class\u003c/td\u003e \u003ctd\u003eN\u003c/td\u003e \u003ctd\u003eString\u003c/td\u003e \u003ctd\u003eAmount of CPU and RAM allocated to each container in a job.\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003emachine\u003c/td\u003e \u003ctd\u003eY \u003csup\u003e(1)\u003c/sup\u003e\u003c/td\u003e \u003ctd\u003eMap\u003c/td\u003e \u003ctd\u003eOptions for \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emachine\u003c/code\u003e executor.\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003emacos\u003c/td\u003e \u003ctd\u003eY \u003csup\u003e(1)\u003c/sup\u003e\u003c/td\u003e \u003ctd\u003eMap\u003c/td\u003e \u003ctd\u003eOptions for \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emacOS\u003c/code\u003e executor.\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003eshell\u003c/td\u003e \u003ctd\u003eN\u003c/td\u003e \u003ctd\u003eString\u003c/td\u003e \u003ctd\u003eShell to use for execution command in all steps. Can be overridden by \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eshell\u003c/code\u003e in each step.\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003eworking_directory\u003c/td\u003e \u003ctd\u003eN\u003c/td\u003e \u003ctd\u003eString\u003c/td\u003e \u003ctd\u003eThe directory in which to run the steps.\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003eenvironment\u003c/td\u003e \u003ctd\u003eN\u003c/td\u003e \u003ctd\u003eMap\u003c/td\u003e \u003ctd\u003eA map of environment variable names and values.\u003c/td\u003e \u003c/tr\u003e \u003c/tbody\u003e \u003c/table\u003e \u003cp\u003eExample:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003eexecutors\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emy-executor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/ruby:2.5.1-browsers\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emy-job\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eexecutor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003emy-executor\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho outside the executor\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch3 id=\"invoking-reusable-executors\"\u003eInvoking reusable executors\u003c/h3\u003e \u003cp\u003eThe following example passes \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emy-executor\u003c/code\u003e as the value of a \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ename\u003c/code\u003e key under \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eexecutor\u003c/code\u003e – this method is primarily employed when passing parameters to executor invocations:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003eexecutors\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emy-executor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/ruby:3.2.2\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emy-job\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eexecutor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003emy-executor\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho outside the executor\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003eIt is also possible to allow an orb to define the executor used by all of its commands. This allows users to execute the commands of that orb in the execution environment defined by the orb’s author.\u003c/p\u003e \u003ch3 id=\"example-of-using-an-executor-declared-in-configyml-with-matrix-jobs\"\u003eExample of using an executor declared in \u003ccode class=\"language-plaintext highlighter-rouge\"\u003econfig.yml\u003c/code\u003e with matrix jobs.\u003c/h3\u003e \u003cp\u003eThe following example declares a Docker executor with a node image, \u003ccode class=\"language-plaintext highlighter-rouge\"\u003enode-docker\u003c/code\u003e. The tag portion of the image string is parameterized with a \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eversion\u003c/code\u003e parameter. A \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eversion\u003c/code\u003e parameter is also included in the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003etest\u003c/code\u003e job so that it can be passed through the job into the executor when the job is called from a workflow.\u003c/p\u003e \u003cp\u003eWhen calling the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003etest\u003c/code\u003e job in the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ematrix-tests\u003c/code\u003e workflow, \u003ca href=\"/docs/configuration-reference/#matrix\"\u003ematrix jobs\u003c/a\u003e are used to run the job multiple times, concurrently, each with a different set of parameters. The Node application is tested against many versions of Node.js:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003eexecutors\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003enode-docker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"c1\"\u003e# declares a reusable executor\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eversion\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003etag\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003elts\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/node:\u0026lt;\u0026lt;parameters.version\u0026gt;\u0026gt;\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etest\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eversion\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003etag\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003elts\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003eexecutor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003enode-docker\u003c/span\u003e\n \u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt;parameters.version\u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003echeckout\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"how are ya?\"\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ematrix-tests\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003etest\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ematrix\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003e13.11.0\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003e12.16.0\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003e10.19.0\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch3 id=\"using-executors-defined-in-an-orb\"\u003eUsing executors defined in an orb\u003c/h3\u003e \u003cp\u003eYou can also refer to executors from other orbs. Users of an orb can invoke its executors. For example, \u003ccode class=\"language-plaintext highlighter-rouge\"\u003efoo-orb\u003c/code\u003e could define the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ebar\u003c/code\u003e executor:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e# Yaml from foo-orb\u003c/span\u003e\n\u003cspan class=\"na\"\u003eexecutors\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebar\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:2023.11\u003c/span\u003e\n \u003cspan class=\"na\"\u003eenvironment\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eRUN_TESTS\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003efoobar\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003ebaz-orb\u003c/code\u003e could define the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ebar\u003c/code\u003e executor too:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e# Yaml from baz-orb\u003c/span\u003e\n\u003cspan class=\"na\"\u003eexecutors\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebar\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:stable\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003eYou may use either executor from your configuration file with:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e# config.yml\u003c/span\u003e\n\u003cspan class=\"na\"\u003eorbs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003efoo-orb\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003esomenamespace/foo@1\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebaz-orb\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003esomeothernamespace/baz@3.3.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esome-job\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eexecutor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003efoo-orb/bar\u003c/span\u003e \u003cspan class=\"c1\"\u003e# prefixed executor\u003c/span\u003e\n \u003cspan class=\"na\"\u003esome-other-job\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eexecutor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ebaz-orb/bar\u003c/span\u003e \u003cspan class=\"c1\"\u003e# prefixed executor\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003e\u003cstrong\u003eNote:\u003c/strong\u003e The \u003ccode class=\"language-plaintext highlighter-rouge\"\u003efoo-orb/bar\u003c/code\u003e and \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ebaz-orb/bar\u003c/code\u003e are different executors. They both have the local name \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ebar\u003c/code\u003e relative to their orbs, but they are independent executors defined in different orbs.\u003c/p\u003e \u003ch3 id=\"overriding-keys-when-invoking-an-executor\"\u003eOverriding keys when invoking an executor\u003c/h3\u003e \u003cp\u003eWhen invoking an executor in a \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ejob\u003c/code\u003e, any keys in the job itself will override those of the executor invoked. For example, if your job declares a \u003ccode class=\"language-plaintext highlighter-rouge\"\u003edocker\u003c/code\u003e stanza, it will be used, in its entirety, instead of the one in your executor.\u003c/p\u003e \u003cp class=\"alert alert-info\"\u003eThe \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenvironment\u003c/code\u003e variable maps are additive. If an \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eexecutor\u003c/code\u003e has one of the same \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenvironment\u003c/code\u003e variables as the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ejob\u003c/code\u003e, the value in the job will be used. See the \u003ca href=\"/docs/env-vars/#order-of-precedence\"\u003eEnvironment Variables guide\u003c/a\u003e for more information.\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003eexecutors\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003enode\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/node:lts\u003c/span\u003e\n \u003cspan class=\"na\"\u003eenvironment\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eENV\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eci\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:stable\u003c/span\u003e\n \u003cspan class=\"c1\"\u003e# The test executor below will be overwritten by the more explicit \"docker\" executor. Any env vars will be added.\u003c/span\u003e\n \u003cspan class=\"na\"\u003eexecutor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003enode\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"Node will not be installed.\"\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003eThe above config would resolve to the following:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:stable\u003c/span\u003e\n \u003cspan class=\"na\"\u003eenvironment\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eENV\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eci\u003c/span\u003e \u003cspan class=\"c1\"\u003e# From executor.\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"Node will not be installed.\"\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch2 id=\"authoring-parameterized-jobs\"\u003eAuthoring parameterized jobs\u003c/h2\u003e \u003cp\u003eIt is possible to invoke the same job more than once in the workflows stanza of \u003ccode class=\"language-plaintext highlighter-rouge\"\u003e.circleci/config.yml\u003c/code\u003e, passing any necessary parameters as subkeys to the job. See the \u003ca href=\"#parameter-syntax\"\u003eParameters syntax section\u003c/a\u003e above for details of syntax usage.\u003c/p\u003e \u003cp\u003eExample of defining and invoking a parameterized job in a \u003ccode class=\"language-plaintext highlighter-rouge\"\u003econfig.yml\u003c/code\u003e:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"c1\"\u003e# defines a parameterized job\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eA job that does very little other than demonstrate what a parameterized job looks like\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eTo\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ewhom\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003eshall\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ewe\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003esay\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ehello?\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eWorld\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:2023.11\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"Hello \u0026lt;\u0026lt; parameters.saywhat \u0026gt;\u0026gt;\"\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003esayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"c1\"\u003e# invokes the parameterized job\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eEveryone\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp class=\"alert alert-info\"\u003eWhen invoking the same job multiple times with parameters across any number of workflows, the build name will be changed (i.e. \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esayhello-1\u003c/code\u003e, \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esayhello-2\u003c/code\u003e, etc.). To ensure build numbers are not appended, utilize the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ename\u003c/code\u003e key. The name you assign needs to be unique, otherwise the numbers will still be appended to the job name. As an example:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003esayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ebuild-sayhello\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eEveryone\u003c/span\u003e\n \u003cspan class=\"na\"\u003edeploy\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003esayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003edeploy-sayhello\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eAll\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch3 id=\"jobs-defined-in-an-orb\"\u003eJobs defined in an orb\u003c/h3\u003e \u003cp\u003eIf a job is declared inside an orb it can use commands in that orb or the global commands. It is not possible to call commands outside the scope of declaration of the job.\u003c/p\u003e \u003cp\u003e\u003cstrong\u003ehello-orb\u003c/strong\u003e\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e# partial yaml from hello-orb\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eTo\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ewhom\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003eshall\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ewe\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003esay\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ehello?\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eWorld\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:2023.11\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003eparameters.saywhat\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026gt;\u0026gt;\"\u003c/span\u003e\n\u003cspan class=\"na\"\u003ecommands\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"\u0026lt;\u0026lt; parameters.saywhat \u0026gt;\u0026gt;\"\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003e\u003cstrong\u003eConfig leveraging hello-orb\u003c/strong\u003e\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"c1\"\u003e# config.yml\u003c/span\u003e\n\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003eorbs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ehello-orb\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003esomenamespace/hello-orb@volatile\u003c/span\u003e\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003ehello-orb/sayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eEveryone\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch3 id=\"using-parameters-in-executors\"\u003eUsing parameters in executors\u003c/h3\u003e \u003cp\u003eTo use parameters in executors, define the parameters under the given executor. When you invoke the executor, pass the keys of the parameters as a map of keys under the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eexecutor:\u003c/code\u003e declaration, each of which has the value of the parameter to pass in.\u003c/p\u003e \u003cp\u003eParameters in executors can be of the type \u003ccode class=\"language-plaintext highlighter-rouge\"\u003estring\u003c/code\u003e, \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenum\u003c/code\u003e, or \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eboolean\u003c/code\u003e. Default values can be provided with the optional \u003ccode class=\"language-plaintext highlighter-rouge\"\u003edefault\u003c/code\u003e key.\u003c/p\u003e \u003ch4 id=\"example-build-configuration-using-a-parameterized-executor\"\u003eExample build configuration using a parameterized executor\u003c/h4\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003eexecutors\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003epython\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etag\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003elatest\u003c/span\u003e\n \u003cspan class=\"na\"\u003emyspecialvar\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/python:\u0026lt;\u0026lt; parameters.tag \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"na\"\u003eenvironment\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eMYPRECIOUS\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.myspecialvar \u0026gt;\u0026gt;\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eexecutor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003epython\u003c/span\u003e\n \u003cspan class=\"na\"\u003etag\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003e2.7\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003emyspecialvar\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003emyspecialvalue\"\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003eThe above would resolve to the following:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"pi\"\u003e[]\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/python:2.7\u003c/span\u003e\n \u003cspan class=\"na\"\u003eenvironment\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eMYPRECIOUS\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003emyspecialvalue\"\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch3 id=\"the-scope-of-parameters\"\u003eThe scope of parameters\u003c/h3\u003e \u003cp\u003eParameters are in-scope only within the job or command that defined them. If you want a job or command to pass its parameters to a command it invokes, they must be passed explicitly.\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eTo\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ewhom\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003eshall\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ewe\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003esay\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ehello?\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eWorld\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:2023.11\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003esay\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"c1\"\u003e# Since the command \"say\" doesn't define a default\u003c/span\u003e\n \u003cspan class=\"c1\"\u003e# value for the \"saywhat\" parameter, it must be\u003c/span\u003e\n \u003cspan class=\"c1\"\u003e# passed in manually\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.saywhat \u0026gt;\u0026gt;\u003c/span\u003e\n\u003cspan class=\"na\"\u003ecommands\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esay\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"\u0026lt;\u0026lt; parameters.saywhat \u0026gt;\u0026gt;\"\u003c/span\u003e\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003esayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eEveryone\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch3 id=\"invoking-the-same-job-multiple-times\"\u003eInvoking the same job multiple times\u003c/h3\u003e \u003cp\u003eA single configuration may invoke a job multiple times. At configuration processing time during build ingestion, CircleCI will auto-generate names if none are provided or you may name the duplicate jobs explicitly with the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ename\u003c/code\u003e key.\u003c/p\u003e \u003cp class=\"alert alert-info\"\u003eYou must explicitly name repeat jobs when a repeat job should be upstream of another job in a workflow. For example, if a job is used under the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003erequires\u003c/code\u003e key of a job invocation in a workflow, you will need to explicitly name it.\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003eloadsay\u003c/span\u003e\n \u003cspan class=\"c1\"\u003e# This doesn't need an explicit name as it has no downstream dependencies\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003esayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eEveryone\u003c/span\u003e\n \u003cspan class=\"na\"\u003erequires\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003eloadsay\u003c/span\u003e\n \u003cspan class=\"c1\"\u003e# This needs an explicit name for saygoodbye to require it as a job dependency\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003esayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eSayHelloChad\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eChad\u003c/span\u003e\n \u003cspan class=\"c1\"\u003e# Uses explicitly defined \"sayhello\"\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003esaygoodbye\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003erequires\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003eSayHelloChad\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch3 id=\"using-pre-and-post-steps\"\u003eUsing pre and post steps\u003c/h3\u003e \u003cp\u003eEvery job invocation may optionally accept two special arguments: \u003ccode class=\"language-plaintext highlighter-rouge\"\u003epre-steps\u003c/code\u003e and \u003ccode class=\"language-plaintext highlighter-rouge\"\u003epost-steps\u003c/code\u003e. Steps under \u003ccode class=\"language-plaintext highlighter-rouge\"\u003epre-steps\u003c/code\u003e are executed before any of the other steps in the job. The steps under \u003ccode class=\"language-plaintext highlighter-rouge\"\u003epost-steps\u003c/code\u003e are executed after all of the other steps.\u003c/p\u003e \u003cp\u003ePre and post steps allow you to execute steps in a given job without modifying the job. This is useful, for example, in running custom setup steps before job execution.\u003c/p\u003e \u003ch3 id=\"defining-pre-and-post-steps\"\u003eDefining pre and post steps\u003c/h3\u003e \u003cp class=\"alert alert-info\"\u003eThe keys \u003ccode class=\"language-plaintext highlighter-rouge\"\u003epre-steps\u003c/code\u003e and \u003ccode class=\"language-plaintext highlighter-rouge\"\u003epost-steps\u003c/code\u003e in jobs are available in configuration version 2.1 and later.\u003c/p\u003e \u003cp\u003eThe following example defines pre-steps and post-steps in the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ebar\u003c/code\u003e job of the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ebuild\u003c/code\u003e workflow:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"c1\"\u003e# config.yml\u003c/span\u003e\n\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebar\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:2023.11\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003echeckout\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ecommand\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"building\"\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ecommand\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"testing\"\u003c/span\u003e\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003ebar\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003epre-steps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ecommand\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"install custom dependency\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003epost-steps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ecommand\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"upload artifact to s3\"\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch2 id=\"defining-conditional-steps\"\u003eDefining conditional steps\u003c/h2\u003e \u003cp class=\"alert alert-info\"\u003eConditional steps are available in configuration version 2.1 and later.\u003c/p\u003e \u003cp\u003eConditional steps run only if a condition is met at config-compile time, before a workflow runs. This means, for example, that you may not use a condition to check an environment variable, as those are not injected until your steps are running in the shell of your execution environment.\u003c/p\u003e \u003cp\u003eConditional steps may be located anywhere a regular step could and may only use parameter values as inputs.\u003c/p\u003e \u003cp\u003eFor example, an orb could define a command that runs a set of steps \u003cem\u003eif\u003c/em\u003e invoked with \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emyorb/foo: { dostuff: true }\u003c/code\u003e, but not \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emyorb/foo: { dostuff: false }\u003c/code\u003e.\u003c/p\u003e \u003cp\u003eFurthermore, an orb author could define conditional steps in the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esteps\u003c/code\u003e key of a Job or a Command.\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"c1\"\u003e# Inside config.yml\u003c/span\u003e\n\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emyjob\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003epreinstall-foo\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eboolean\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"no\"\u003efalse\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:2023.11\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"preinstall is \u0026lt;\u0026lt; parameters.preinstall-foo \u0026gt;\u0026gt;\"\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003ewhen\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003econdition\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.preinstall-foo \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"preinstall\"\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eunless\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003econdition\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.preinstall-foo \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"don't preinstall\"\u003c/span\u003e\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eworkflow\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003emyjob\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003epreinstall-foo\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"no\"\u003efalse\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003emyjob\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003epreinstall-foo\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"no\"\u003etrue\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003emyjob\u003c/span\u003e \u003cspan class=\"c1\"\u003e# The empty string is falsy\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch3 id=\"the-when-step\"\u003e\u003cstrong\u003eThe \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ewhen\u003c/code\u003e step\u003c/strong\u003e\u003c/h3\u003e \u003cp\u003eUnder the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ewhen\u003c/code\u003e key are the subkeys \u003ccode class=\"language-plaintext highlighter-rouge\"\u003econdition\u003c/code\u003e and \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esteps\u003c/code\u003e. The subkey \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esteps\u003c/code\u003e are run only if the condition evaluates to a truthy value.\u003c/p\u003e \u003ctable class=\"table table-striped\"\u003e \u003cthead\u003e \u003ctr\u003e \u003cth\u003eKey\u003c/th\u003e \u003cth\u003eRequired\u003c/th\u003e \u003cth\u003eType\u003c/th\u003e \u003cth\u003eDescription\u003c/th\u003e \u003c/tr\u003e \u003c/thead\u003e \u003ctbody\u003e \u003ctr\u003e \u003ctd\u003econdition\u003c/td\u003e \u003ctd\u003eY\u003c/td\u003e \u003ctd\u003eLogic\u003c/td\u003e \u003ctd\u003e\u003ca href=\"/docs/configuration-reference/#logic-statements\"\u003eA logic statement\u003c/a\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003esteps\u003c/td\u003e \u003ctd\u003eY\u003c/td\u003e \u003ctd\u003eSequence\u003c/td\u003e \u003ctd\u003eA list of steps to execute when the condition is truthy.\u003c/td\u003e \u003c/tr\u003e \u003c/tbody\u003e \u003c/table\u003e \u003ch3 id=\"the-unless-step\"\u003e\u003cstrong\u003eThe \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eunless\u003c/code\u003e step\u003c/strong\u003e\u003c/h3\u003e \u003cp\u003eUnder the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eunless\u003c/code\u003e key are the subkeys \u003ccode class=\"language-plaintext highlighter-rouge\"\u003econdition\u003c/code\u003e and \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esteps\u003c/code\u003e. The subkey \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esteps\u003c/code\u003e are run only if the condition evaluates to a falsy value.\u003c/p\u003e \u003ctable class=\"table table-striped\"\u003e \u003cthead\u003e \u003ctr\u003e \u003cth\u003eKey\u003c/th\u003e \u003cth\u003eRequired\u003c/th\u003e \u003cth\u003eType\u003c/th\u003e \u003cth\u003eDescription\u003c/th\u003e \u003c/tr\u003e \u003c/thead\u003e \u003ctbody\u003e \u003ctr\u003e \u003ctd\u003econdition\u003c/td\u003e \u003ctd\u003eY\u003c/td\u003e \u003ctd\u003eLogic\u003c/td\u003e \u003ctd\u003e\u003ca href=\"/docs/configuration-reference/#logic-statements\"\u003eA logic statement\u003c/a\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003esteps\u003c/td\u003e \u003ctd\u003eY\u003c/td\u003e \u003ctd\u003eSequence\u003c/td\u003e \u003ctd\u003eA list of steps to execute when the condition is falsy.\u003c/td\u003e \u003c/tr\u003e \u003c/tbody\u003e \u003c/table\u003e \u003ch2 id=\"writing-inline-orbs\"\u003eWriting inline orbs\u003c/h2\u003e \u003cp\u003eWhen defining reusable configuration elements directly within your config, you can also wrap those elements within an inline orb. You may find inline orbs useful for development or for name-spacing elements that share names in a local config.\u003c/p\u003e \u003cp\u003eTo write an inline orb, place the orb elements under that orb’s key in the orbs declaration section of the configuration. For example, if you want to import one orb to use inside another inline orb, the config could look like the example shown below, in which the inline orb \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emy-orb\u003c/code\u003e imports the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003enode\u003c/code\u003e orb:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003eorbs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emy-orb\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eorbs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003enode\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecircleci/node@3.0\u003c/span\u003e\n \u003cspan class=\"na\"\u003ecommands\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emy_command\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"Run my tests\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emy_job\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eexecutor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003enode/default\u003c/span\u003e \u003cspan class=\"c1\"\u003e# Node orb executor\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003echeckout\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003emy_command\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003estore_test_results\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003epath\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003etest-results\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emain\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003emy-orb/my_job\u003c/span\u003e\n\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch2 id=\"see-also\"\u003eSee also\u003c/h2\u003e \u003cul\u003e \u003cli\u003eRefer to \u003ca href=\"/docs/sample-config/\"\u003eSample Configurations\u003c/a\u003e for some sample configurations that you can use in your own CircleCI configuration.\u003c/li\u003e \u003cli\u003eRefer to \u003ca href=\"/docs/postgres-config/\"\u003eDatabase Examples\u003c/a\u003e for database examples you can use in your CircleCI configuration.\u003c/li\u003e \u003c/ul\u003e","frontMatter":{"draft":false,"categories":["configuration"],"last_modified_at":"20-Nov-24","hide":false,"search":true,"toc":true,"suggested":false,"sitemap":true,"readtime":true,"contentTags":{"platform":["Cloud","Server v4.x","Server v3.x"]},"sectionTags":null,"lang":"en","layout":"classic-docs","title":"Reusable Config Reference Guide","short-title":"Reusable Config Reference","description":"Reference guide for CircleCI 2.1 Configuration","order":1,"slug":"reusing-config","ext":".md","tags":[],"excerpt":"\u003cp\u003eThis guide describes how to get started with reusable commands, jobs, executors and orbs. This guide also covers the use of parameters for creating parameterized reusable elements.\u003c/p\u003e\n","date":"2024-12-02 15:13:57 +0000","content":"\u003cp\u003eThis guide describes how to get started with reusable commands, jobs, executors and orbs. This guide also covers the use of parameters for creating parameterized reusable elements.\u003c/p\u003e \u003cp class=\"alert alert-info\"\u003e\u003cstrong\u003eUsing Docker?\u003c/strong\u003e Authenticating Docker pulls from image registries is recommended when using the Docker execution environment. Authenticated pulls allow access to private Docker images, and may also grant higher rate limits, depending on your registry provider. For further information see \u003ca href=\"/docs/private-images\"\u003eUsing Docker authenticated pulls\u003c/a\u003e.\u003c/p\u003e \u003ch2 id=\"notes-on-reusable-configuration\"\u003eNotes on reusable configuration\u003c/h2\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eInstall the CircleCI CLI so that you have access to the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ecircleci config process\u003c/code\u003e command (optional). This command lets you see the expanded configuration with all reusable keys processed. Follow the \u003ca href=\"/docs/local-cli/\"\u003eUsing the CircleCI CLI\u003c/a\u003e documentation for installation instructions and tips.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eCircleCI reusable configuration elements require a \u003cstrong\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003eversion: 2.1\u003c/code\u003e\u003c/strong\u003e \u003ccode class=\"language-plaintext highlighter-rouge\"\u003e.circleci/config.yml\u003c/code\u003e file.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eCommand, job, executor, and parameter names must start with a letter and can only contain lowercase letters (\u003ccode class=\"language-plaintext highlighter-rouge\"\u003ea\u003c/code\u003e-\u003ccode class=\"language-plaintext highlighter-rouge\"\u003ez\u003c/code\u003e), digits (\u003ccode class=\"language-plaintext highlighter-rouge\"\u003e0\u003c/code\u003e-\u003ccode class=\"language-plaintext highlighter-rouge\"\u003e9\u003c/code\u003e), underscores (\u003ccode class=\"language-plaintext highlighter-rouge\"\u003e_\u003c/code\u003e) and hyphens (\u003ccode class=\"language-plaintext highlighter-rouge\"\u003e-\u003c/code\u003e).\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003ch2 id=\"using-the-parameters-declaration\"\u003eUsing the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eparameters\u003c/code\u003e declaration\u003c/h2\u003e \u003cp\u003eParameters are declared by name under a job, command, or executor. \u003cem\u003ePipeline parameters\u003c/em\u003e are defined at the top level of a project configuration. See the \u003ca href=\"/docs/pipeline-variables/#pipeline-parameters-in-configuration\"\u003ePipeline Values and Parameters guide\u003c/a\u003e for more information.\u003c/p\u003e \u003cp\u003eThe immediate children of the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eparameters\u003c/code\u003e key are a set of keys in a map.\u003c/p\u003e \u003cp\u003eIn the following example, a command named \u003ccode class=\"language-plaintext highlighter-rouge\"\u003egreeting\u003c/code\u003e is designed with a single parameter named \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eto\u003c/code\u003e. The \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eto\u003c/code\u003e parameter is used within the steps to echo \u003cem\u003eHello\u003c/em\u003e back to the user.\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003ecommands\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"c1\"\u003e# a reusable command with parameters\u003c/span\u003e\n \u003cspan class=\"na\"\u003egreeting\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eto\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eworld\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"Hello \u0026lt;\u0026lt;parameters.to\u0026gt;\u0026gt;\"\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emy-job\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:stable\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003egreeting\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eto\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eMy-Name\"\u003c/span\u003e\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emy-workflow\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003emy-job\u003c/span\u003e\n\n\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch3 id=\"parameter-syntax\"\u003eParameter syntax\u003c/h3\u003e \u003cp\u003eA parameter can have the following keys as immediate children:\u003c/p\u003e \u003ctable class=\"table table-striped\"\u003e \u003cthead\u003e \u003ctr\u003e \u003cth\u003eKey Name\u003c/th\u003e \u003cth\u003eDescription\u003c/th\u003e \u003cth\u003eDefault value\u003c/th\u003e \u003c/tr\u003e \u003c/thead\u003e \u003ctbody\u003e \u003ctr\u003e \u003ctd\u003edescription\u003c/td\u003e \u003ctd\u003eOptional. Used to generate documentation for your orb.\u003c/td\u003e \u003ctd\u003eN/A\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003etype\u003c/td\u003e \u003ctd\u003eRequired. See \u003cstrong\u003eParameter Types\u003c/strong\u003e in the section below for details.\u003c/td\u003e \u003ctd\u003eN/A\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003edefault\u003c/td\u003e \u003ctd\u003eThe default value for the parameter. Required for pipeline parameters. For all other parameters, if not present, the parameter is implied to be required.\u003c/td\u003e \u003ctd\u003eN/A\u003c/td\u003e \u003c/tr\u003e \u003c/tbody\u003e \u003c/table\u003e \u003ch3 id=\"parameter-types\"\u003eParameter types\u003c/h3\u003e \u003cp\u003eThis section describes the types of parameters and their usage.\u003c/p\u003e \u003cp\u003eThe parameter types supported by orbs are:\u003c/p\u003e \u003cul\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003estring\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003eboolean\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003einteger\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenum\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003eexecutor\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003esteps\u003c/code\u003e\u003c/li\u003e \u003cli\u003eenvironment variable name\u003c/li\u003e \u003c/ul\u003e \u003cp\u003eThe parameter types supported by pipeline parameters are:\u003c/p\u003e \u003cul\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003estring\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003eboolean\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003einteger\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenum\u003c/code\u003e\u003c/li\u003e \u003c/ul\u003e \u003ch4 id=\"string\"\u003eString\u003c/h4\u003e \u003cp\u003eBasic string parameters are described below:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003ecommands\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ecopy-markdown\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edestination\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003edestination directory\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003edocs\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecp *.md \u0026lt;\u0026lt; parameters.destination \u0026gt;\u0026gt;\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003eStrings must be enclosed in quotes if they would otherwise represent another type (such as boolean or number) or if they contain characters that have special meaning in YAML, particularly for the colon character. In all other instances, quotes are optional.\u003c/p\u003e \u003cp\u003eEmpty strings are treated as a falsy value in evaluation of \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ewhen\u003c/code\u003e clauses, and all other strings are treated as truthy. Using an unquoted string value that YAML interprets as a boolean will result in a type error.\u003c/p\u003e \u003ch4 id=\"boolean\"\u003eBoolean\u003c/h4\u003e \u003cp\u003eBoolean parameters are useful for conditionals:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003ecommands\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003enpm-install\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eclean\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ePerform a clean install\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eboolean\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"no\"\u003efalse\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003ewhen\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003econdition\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.clean \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003enpm clean-install\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003ewhen\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003econdition\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003enot\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.clean \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003enpm install\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003eBoolean parameter evaluation is based on the \u003ca href=\"https://yaml.org/type/bool.html\"\u003evalues specified in YAML 1.1\u003c/a\u003e:\u003c/p\u003e \u003cul\u003e \u003cli\u003eTrue: \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ey\u003c/code\u003e \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eyes\u003c/code\u003e \u003ccode class=\"language-plaintext highlighter-rouge\"\u003etrue\u003c/code\u003e \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eon\u003c/code\u003e\u003c/li\u003e \u003cli\u003eFalse: \u003ccode class=\"language-plaintext highlighter-rouge\"\u003en\u003c/code\u003e \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eno\u003c/code\u003e \u003ccode class=\"language-plaintext highlighter-rouge\"\u003efalse\u003c/code\u003e \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eoff\u003c/code\u003e\u003c/li\u003e \u003c/ul\u003e \u003cp\u003eCapitalized and uppercase versions of the above values are also valid.\u003c/p\u003e \u003cp class=\"alert alert-info\"\u003eBoolean values may be returned as a ‘1’ for True and ‘0’ for False.\u003c/p\u003e \u003ch4 id=\"integer\"\u003eInteger\u003c/h4\u003e \u003cp\u003eUse the parameter type \u003ccode class=\"language-plaintext highlighter-rouge\"\u003einteger\u003c/code\u003e to pass a numeric integer value.\u003c/p\u003e \u003cp\u003eThe following example uses the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003einteger\u003c/code\u003e type to populate the value of \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eparallelism\u003c/code\u003e in a job:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ep\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003einteger\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparallelism\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.p \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:2023.11\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003echeckout\u003c/span\u003e\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eworkflow\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ep\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch4 id=\"enum\"\u003eEnum\u003c/h4\u003e \u003cp\u003eThe \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenum\u003c/code\u003e parameter may be a list of any values. Use the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenum\u003c/code\u003e parameter type when you want to enforce that the value must be one from a specific set of string values.\u003c/p\u003e \u003cp\u003eThe following example uses the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenum\u003c/code\u003e parameter to declare the target operating system for a binary:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ecommands\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003elist-files\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eos\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003elinux\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eThe target Operating System for the heroku binary. Must be one of \"linux\", \"darwin\", \"win32\".\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eenum\u003c/span\u003e\n \u003cspan class=\"na\"\u003eenum\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"pi\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003elinux\"\u003c/span\u003e\u003cspan class=\"pi\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003edarwin\"\u003c/span\u003e\u003cspan class=\"pi\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003ewin32\"\u003c/span\u003e\u003cspan class=\"pi\"\u003e]\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003eThe following \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenum\u003c/code\u003e type declaration is invalid because the default is not declared in the enum list.\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ecommands\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003elist-files\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eos\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eenum\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003ewindows\"\u003c/span\u003e \u003cspan class=\"c1\"\u003e#invalid declaration of default that does not appear in the comma-separated enum list\u003c/span\u003e\n \u003cspan class=\"na\"\u003eenum\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"pi\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003edarwin\"\u003c/span\u003e\u003cspan class=\"pi\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003elinux\"\u003c/span\u003e\u003cspan class=\"pi\"\u003e]\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch4 id=\"executor\"\u003eExecutor\u003c/h4\u003e \u003cp\u003eUse an \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eexecutor\u003c/code\u003e parameter type to allow the invoker of a job to decide what executor it will run on.\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003eexecutors\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003exenial\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esome-value\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003efoo\u003c/span\u003e\n \u003cspan class=\"na\"\u003eenvironment\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eSOME_VAR\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.some-value \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eubuntu:xenial\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebionic\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eubuntu:bionic\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etest\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ee\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eexecutor\u003c/span\u003e\n \u003cspan class=\"na\"\u003eexecutor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.e \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003esome-tests\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eworkflow\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003etest\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ee\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ebionic\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003etest\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ee\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003exenial\u003c/span\u003e\n \u003cspan class=\"na\"\u003esome-value\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003efoobar\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch4 id=\"steps\"\u003eSteps\u003c/h4\u003e \u003cp\u003eSteps are used when you have a job or command that needs to mix predefined and user-defined steps. When passed in to a command or job invocation, the steps passed as parameters are always defined as a sequence, even if only one step is provided.\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ecommands\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003erun-tests\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eafter-deps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eSteps\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ethat\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ewill\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ebe\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003eexecuted\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003eafter\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003edependencies\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003eare\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003einstalled,\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ebut\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ebefore\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003etests\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003eare\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003erun\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003esteps\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"pi\"\u003e[]\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003emake deps\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.after-deps \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003emake test\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003eThe following example demonstrates that steps passed as parameters are given as the value of a \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esteps\u003c/code\u003e declaration under the job’s \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esteps\u003c/code\u003e.\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ecommands\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003erun-tests\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eafter-deps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eSteps\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ethat\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ewill\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ebe\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003eexecuted\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003eafter\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003edependencies\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003eare\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003einstalled,\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ebut\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ebefore\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003etests\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003eare\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003erun\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003esteps\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"pi\"\u003e[]\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003emake deps\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.after-deps \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003emake test\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:2023.11\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun-tests\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eafter-deps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"The dependencies are installed\"\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"And now I'm going to run the tests\"\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003eThe above will resolve to the following:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003emake deps\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"The dependencies are installed\"\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"And now I'm going to run the tests\"\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003emake test\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch4 id=\"environment-variable-name\"\u003eEnvironment variable name\u003c/h4\u003e \u003cp\u003eThe environment variable name (\u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenv_var_name\u003c/code\u003e) parameter is a string that must match a POSIX_NAME regular expression (for example, there can be no spaces or special characters). The \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenv_var_name\u003c/code\u003e parameter is a more meaningful parameter type that enables CircleCI to check that the string that has been passed can be used as an environment variable name. For more information on environment variables, see the guide to \u003ca href=\"/docs/env-vars/\"\u003eEnvironment Variables\u003c/a\u003e.\u003c/p\u003e \u003cp\u003eThe example below shows you how to use the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenv_var_name\u003c/code\u003e parameter type for deploying to AWS S3 with a reusable \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ebuild\u003c/code\u003e job. This example uses the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eAWS_ACCESS_KEY\u003c/code\u003e and \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eAWS_SECRET_KEY\u003c/code\u003e environment variables with the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eaccess-key\u003c/code\u003e and \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esecret-key\u003c/code\u003e parameters. If you have a deploy job that runs the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003es3cmd\u003c/code\u003e, it is possible to create a reusable command that uses the needed authentication, but deploys to a custom bucket.\u003c/p\u003e \u003cp\u003eOriginal \u003ccode class=\"language-plaintext highlighter-rouge\"\u003econfig.yml\u003c/code\u003e file:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eubuntu:latest\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ecommand\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"pi\"\u003e|\u003c/span\u003e\n \u003cspan class=\"s\"\u003es3cmd --access_key ${FOO_BAR} \\\u003c/span\u003e\n \u003cspan class=\"s\"\u003e--secret_key ${BIN_BAZ} \\\u003c/span\u003e\n \u003cspan class=\"s\"\u003els s3://some/where\u003c/span\u003e\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eworkflow\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003ebuild\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003eNew \u003ccode class=\"language-plaintext highlighter-rouge\"\u003econfig.yml\u003c/code\u003e file:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eaccess-key\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eenv_var_name\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eAWS_ACCESS_KEY\u003c/span\u003e\n \u003cspan class=\"na\"\u003esecret-key\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eenv_var_name\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eAWS_SECRET_KEY\u003c/span\u003e\n \u003cspan class=\"na\"\u003ecommand\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eubuntu:latest\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"pi\"\u003e|\u003c/span\u003e\n \u003cspan class=\"s\"\u003es3cmd --access_key ${\u0026lt;\u0026lt; parameters.access-key \u0026gt;\u0026gt;} \\\\\u003c/span\u003e\n \u003cspan class=\"s\"\u003e--secret_key ${\u0026lt;\u0026lt; parameters.secret-key \u0026gt;\u0026gt;} \\\\\u003c/span\u003e\n \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.command \u0026gt;\u0026gt;\u003c/span\u003e\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eworkflow\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eaccess-key\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eFOO_BAR\u003c/span\u003e\n \u003cspan class=\"na\"\u003esecret-key\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eBIN_BAZ\u003c/span\u003e\n \u003cspan class=\"na\"\u003ecommand\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003els s3://some/where\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch2 id=\"authoring-reusable-commands\"\u003eAuthoring reusable commands\u003c/h2\u003e \u003cp\u003eCommands are declared under the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ecommands\u003c/code\u003e key of a \u003ccode class=\"language-plaintext highlighter-rouge\"\u003e.circleci/config.yml\u003c/code\u003e file. The following example defines a command called \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esayhello\u003c/code\u003e, which accepts a string parameter \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eto\u003c/code\u003e:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ecommands\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eA\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003every\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003esimple\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ecommand\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003efor\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003edemonstration\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003epurposes\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eto\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eWorld\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho Hello \u0026lt;\u0026lt; parameters.to \u0026gt;\u0026gt;\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch3 id=\"the-commands-key\"\u003eThe \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ecommands\u003c/code\u003e key\u003c/h3\u003e \u003cp\u003eA command defines a sequence of steps as a map to be executed in a job, enabling you to reuse a single command definition across multiple jobs.\u003c/p\u003e \u003ctable class=\"table table-striped\"\u003e \u003cthead\u003e \u003ctr\u003e \u003cth\u003eKey\u003c/th\u003e \u003cth\u003eRequired\u003c/th\u003e \u003cth\u003eType\u003c/th\u003e \u003cth\u003eDescription\u003c/th\u003e \u003c/tr\u003e \u003c/thead\u003e \u003ctbody\u003e \u003ctr\u003e \u003ctd\u003esteps\u003c/td\u003e \u003ctd\u003eY\u003c/td\u003e \u003ctd\u003eSequence\u003c/td\u003e \u003ctd\u003eA sequence of steps that run inside the job that calls the command.\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003eparameters\u003c/td\u003e \u003ctd\u003eN\u003c/td\u003e \u003ctd\u003eMap\u003c/td\u003e \u003ctd\u003eA map of parameter keys. See the \u003ca href=\"/docs/reusing-config/#parameter-syntax\"\u003eParameter Syntax\u003c/a\u003e section for details.\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003edescription\u003c/td\u003e \u003ctd\u003eN\u003c/td\u003e \u003ctd\u003eString\u003c/td\u003e \u003ctd\u003eA string that describes the purpose of the command. Used for generating documentation.\u003c/td\u003e \u003c/tr\u003e \u003c/tbody\u003e \u003c/table\u003e \u003ch3 id=\"invoking-reusable-commands\"\u003eInvoking reusable commands\u003c/h3\u003e \u003cp\u003eReusable commands are invoked with specific parameters as steps inside a job. When using a command, the steps of that command are inserted at the location where the command is invoked. Commands may only be used as part of the sequence under \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esteps\u003c/code\u003e in a job.\u003c/p\u003e \u003cp\u003eThe following example uses the same command from the previous example – \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esayhello\u003c/code\u003e – and invokes it in the job \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emyjob\u003c/code\u003e, passing it a value for the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eto\u003c/code\u003e parameter:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ecommands\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eA\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003every\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003esimple\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ecommand\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003efor\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003edemonstration\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003epurposes\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eto\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eWorld\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho Hello \u0026lt;\u0026lt; parameters.to \u0026gt;\u0026gt;\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emyjob\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003ecimg/base:stable\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003esayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"c1\"\u003e# invoke command \"sayhello\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003eto\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eLev\"\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch3 id=\"invoking-other-commands-in-a-command\"\u003eInvoking other commands in a command\u003c/h3\u003e \u003cp\u003eCommands can use other commands in the scope of execution. For instance, if a command is declared inside an orb it can use other commands in that orb. It can also use commands defined in other orbs that you have imported (for example \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esome-orb/some-command\u003c/code\u003e).\u003c/p\u003e \u003ch3 id=\"special-keys\"\u003eSpecial keys\u003c/h3\u003e \u003cp\u003eCircleCI has several special keys available to all \u003ca href=\"https://circleci.com\"\u003ecircleci.com\u003c/a\u003e customers and available by default in CircleCI server installations. Examples of these keys are:\u003c/p\u003e \u003cul\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003echeckout\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003esetup_remote_docker\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003epersist_to_workspace\u003c/code\u003e\u003c/li\u003e \u003c/ul\u003e \u003cp class=\"alert alert-info\"\u003eIt is possible to override the special keys with a custom command.\u003c/p\u003e \u003ch3 id=\"commands-usage-examples\"\u003eCommands usage examples\u003c/h3\u003e \u003cp\u003eThe following is an example of part of the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eaws-s3\u003c/code\u003e orb where a command called \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esync\u003c/code\u003e is defined:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"c1\"\u003e#...\u003c/span\u003e\n\u003cspan class=\"na\"\u003esync\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eSyncs directories and S3 prefixes.\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003earguments\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003e\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"pi\"\u003e|\u003c/span\u003e\n \u003cspan class=\"s\"\u003eOptional additional arguments to pass to the `aws sync` command (e.g., `--acl public-read`). Note: if passing a multi-line value to this parameter, include `\\` characters after each line, so the Bash shell can correctly interpret the entire command.\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003eaws-access-key-id\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eAWS_ACCESS_KEY_ID\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eaws access key id override\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eenv_var_name\u003c/span\u003e\n \u003cspan class=\"na\"\u003eaws-region\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eAWS_REGION\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eaws region override\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eenv_var_name\u003c/span\u003e\n \u003cspan class=\"na\"\u003eaws-secret-access-key\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eAWS_SECRET_ACCESS_KEY\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eaws secret access key override\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eenv_var_name\u003c/span\u003e\n \u003cspan class=\"na\"\u003efrom\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eA local *directory* path to sync with S3\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003eto\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eA URI to an S3 bucket, i.e. 's3://the-name-my-bucket'\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eaws-cli/setup\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eaws-access-key-id\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.aws-access-key-id \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"na\"\u003eaws-region\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.aws-region \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"na\"\u003eaws-secret-access-key\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.aws-secret-access-key \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003edeploy\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ecommand\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"pi\"\u003e|\u003c/span\u003e\n \u003cspan class=\"s\"\u003eaws s3 sync \\\u003c/span\u003e\n \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt;parameters.from\u0026gt;\u0026gt; \u0026lt;\u0026lt;parameters.to\u0026gt;\u0026gt; \u0026lt;\u0026lt;parameters.arguments\u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eS3 Sync\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e#...\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003eTo invoke this \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esync\u003c/code\u003e command in your 2.1 \u003ccode class=\"language-plaintext highlighter-rouge\"\u003e.circleci/config.yml\u003c/code\u003e file, see the following example:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003eorbs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eaws-s3\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecircleci/aws-s3@4.1.0\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edeploy2s3\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:2023.06\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eaws-s3/sync\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003efrom\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e.\u003c/span\u003e\n \u003cspan class=\"na\"\u003eto\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003es3://mybucket_uri\"\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild-test-deploy\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003edeploy2s3\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003eDefining a \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ebuild\u003c/code\u003e job:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003eorbs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eaws-cli\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecircleci/aws-cli@5.1.1\u003c/span\u003e\n \u003cspan class=\"na\"\u003eaws-s3\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecircleci/aws-s3@4.1.0\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eexecutor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eaws-cli/default\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003echeckout\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003emkdir bucket \u0026amp;\u0026amp; echo \"lorum ipsum\" \u0026gt; bucket/build_asset.txt\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eaws-s3/sync\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003efrom\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ebucket\u003c/span\u003e\n \u003cspan class=\"na\"\u003eto\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003es3://my-s3-bucket-name/prefix\"\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eaws-s3/copy\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003efrom\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ebucket/build_asset.txt\u003c/span\u003e\n \u003cspan class=\"na\"\u003eto\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003es3://my-s3-bucket-name\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003earguments\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e--dryrun\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch2 id=\"authoring-reusable-executors\"\u003eAuthoring reusable executors\u003c/h2\u003e \u003cp\u003eExecutors define the environment in which the steps of a job will be run. When declaring a \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ejob\u003c/code\u003e in CircleCI configuration, you define the type of execution environment (\u003ccode class=\"language-plaintext highlighter-rouge\"\u003edocker\u003c/code\u003e, \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emachine\u003c/code\u003e, \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emacos\u003c/code\u003e. etc.) to run in, as well as any other parameters for that environment, including: environment variables to populate, which shell to use, what size \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eresource_class\u003c/code\u003e to use, etc.\u003c/p\u003e \u003cp\u003eExecutor declarations outside of \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ejobs\u003c/code\u003e can be used by all jobs in the scope of that declaration, allowing you to reuse a single executor definition across multiple jobs.\u003c/p\u003e \u003cp\u003eAn executor definition includes one or more of the following keys:\u003c/p\u003e \u003cul\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003edocker\u003c/code\u003e or \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emachine\u003c/code\u003e or \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emacos\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenvironment\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003eworking_directory\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003eshell\u003c/code\u003e\u003c/li\u003e \u003cli\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003eresource_class\u003c/code\u003e\u003c/li\u003e \u003c/ul\u003e \u003cp\u003eIn the following example \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emy-executor\u003c/code\u003e is used for running the job \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emy-job\u003c/code\u003e.\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003eexecutors\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emy-executor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/ruby:2.5.1-browsers\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emy-job\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eexecutor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003emy-executor\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho outside the executor\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch3 id=\"the-executors-key\"\u003eThe \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eexecutors\u003c/code\u003e key\u003c/h3\u003e \u003cp\u003eExecutors define the environment in which the steps of a job will be run, allowing you to reuse a single executor definition across multiple jobs.\u003c/p\u003e \u003ctable class=\"table table-striped\"\u003e \u003cthead\u003e \u003ctr\u003e \u003cth\u003eKey\u003c/th\u003e \u003cth\u003eRequired\u003c/th\u003e \u003cth\u003eType\u003c/th\u003e \u003cth\u003eDescription\u003c/th\u003e \u003c/tr\u003e \u003c/thead\u003e \u003ctbody\u003e \u003ctr\u003e \u003ctd\u003edocker\u003c/td\u003e \u003ctd\u003eY \u003csup\u003e(1)\u003c/sup\u003e\u003c/td\u003e \u003ctd\u003eList\u003c/td\u003e \u003ctd\u003eOptions for \u003ccode class=\"language-plaintext highlighter-rouge\"\u003edocker\u003c/code\u003e executor.\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003eresource_class\u003c/td\u003e \u003ctd\u003eN\u003c/td\u003e \u003ctd\u003eString\u003c/td\u003e \u003ctd\u003eAmount of CPU and RAM allocated to each container in a job.\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003emachine\u003c/td\u003e \u003ctd\u003eY \u003csup\u003e(1)\u003c/sup\u003e\u003c/td\u003e \u003ctd\u003eMap\u003c/td\u003e \u003ctd\u003eOptions for \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emachine\u003c/code\u003e executor.\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003emacos\u003c/td\u003e \u003ctd\u003eY \u003csup\u003e(1)\u003c/sup\u003e\u003c/td\u003e \u003ctd\u003eMap\u003c/td\u003e \u003ctd\u003eOptions for \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emacOS\u003c/code\u003e executor.\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003eshell\u003c/td\u003e \u003ctd\u003eN\u003c/td\u003e \u003ctd\u003eString\u003c/td\u003e \u003ctd\u003eShell to use for execution command in all steps. Can be overridden by \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eshell\u003c/code\u003e in each step.\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003eworking_directory\u003c/td\u003e \u003ctd\u003eN\u003c/td\u003e \u003ctd\u003eString\u003c/td\u003e \u003ctd\u003eThe directory in which to run the steps.\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003eenvironment\u003c/td\u003e \u003ctd\u003eN\u003c/td\u003e \u003ctd\u003eMap\u003c/td\u003e \u003ctd\u003eA map of environment variable names and values.\u003c/td\u003e \u003c/tr\u003e \u003c/tbody\u003e \u003c/table\u003e \u003cp\u003eExample:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003eexecutors\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emy-executor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/ruby:2.5.1-browsers\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emy-job\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eexecutor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003emy-executor\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho outside the executor\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch3 id=\"invoking-reusable-executors\"\u003eInvoking reusable executors\u003c/h3\u003e \u003cp\u003eThe following example passes \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emy-executor\u003c/code\u003e as the value of a \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ename\u003c/code\u003e key under \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eexecutor\u003c/code\u003e – this method is primarily employed when passing parameters to executor invocations:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003eexecutors\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emy-executor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/ruby:3.2.2\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emy-job\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eexecutor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003emy-executor\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho outside the executor\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003eIt is also possible to allow an orb to define the executor used by all of its commands. This allows users to execute the commands of that orb in the execution environment defined by the orb’s author.\u003c/p\u003e \u003ch3 id=\"example-of-using-an-executor-declared-in-configyml-with-matrix-jobs\"\u003eExample of using an executor declared in \u003ccode class=\"language-plaintext highlighter-rouge\"\u003econfig.yml\u003c/code\u003e with matrix jobs.\u003c/h3\u003e \u003cp\u003eThe following example declares a Docker executor with a node image, \u003ccode class=\"language-plaintext highlighter-rouge\"\u003enode-docker\u003c/code\u003e. The tag portion of the image string is parameterized with a \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eversion\u003c/code\u003e parameter. A \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eversion\u003c/code\u003e parameter is also included in the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003etest\u003c/code\u003e job so that it can be passed through the job into the executor when the job is called from a workflow.\u003c/p\u003e \u003cp\u003eWhen calling the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003etest\u003c/code\u003e job in the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ematrix-tests\u003c/code\u003e workflow, \u003ca href=\"/docs/configuration-reference/#matrix\"\u003ematrix jobs\u003c/a\u003e are used to run the job multiple times, concurrently, each with a different set of parameters. The Node application is tested against many versions of Node.js:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003eexecutors\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003enode-docker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"c1\"\u003e# declares a reusable executor\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eversion\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003etag\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003elts\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/node:\u0026lt;\u0026lt;parameters.version\u0026gt;\u0026gt;\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etest\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eversion\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003etag\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003elts\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003eexecutor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003enode-docker\u003c/span\u003e\n \u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt;parameters.version\u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003echeckout\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"how are ya?\"\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ematrix-tests\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003etest\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ematrix\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003e13.11.0\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003e12.16.0\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003e10.19.0\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch3 id=\"using-executors-defined-in-an-orb\"\u003eUsing executors defined in an orb\u003c/h3\u003e \u003cp\u003eYou can also refer to executors from other orbs. Users of an orb can invoke its executors. For example, \u003ccode class=\"language-plaintext highlighter-rouge\"\u003efoo-orb\u003c/code\u003e could define the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ebar\u003c/code\u003e executor:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e# Yaml from foo-orb\u003c/span\u003e\n\u003cspan class=\"na\"\u003eexecutors\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebar\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:2023.11\u003c/span\u003e\n \u003cspan class=\"na\"\u003eenvironment\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eRUN_TESTS\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003efoobar\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003e\u003ccode class=\"language-plaintext highlighter-rouge\"\u003ebaz-orb\u003c/code\u003e could define the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ebar\u003c/code\u003e executor too:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e# Yaml from baz-orb\u003c/span\u003e\n\u003cspan class=\"na\"\u003eexecutors\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebar\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:stable\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003eYou may use either executor from your configuration file with:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e# config.yml\u003c/span\u003e\n\u003cspan class=\"na\"\u003eorbs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003efoo-orb\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003esomenamespace/foo@1\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebaz-orb\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003esomeothernamespace/baz@3.3.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esome-job\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eexecutor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003efoo-orb/bar\u003c/span\u003e \u003cspan class=\"c1\"\u003e# prefixed executor\u003c/span\u003e\n \u003cspan class=\"na\"\u003esome-other-job\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eexecutor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ebaz-orb/bar\u003c/span\u003e \u003cspan class=\"c1\"\u003e# prefixed executor\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003e\u003cstrong\u003eNote:\u003c/strong\u003e The \u003ccode class=\"language-plaintext highlighter-rouge\"\u003efoo-orb/bar\u003c/code\u003e and \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ebaz-orb/bar\u003c/code\u003e are different executors. They both have the local name \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ebar\u003c/code\u003e relative to their orbs, but they are independent executors defined in different orbs.\u003c/p\u003e \u003ch3 id=\"overriding-keys-when-invoking-an-executor\"\u003eOverriding keys when invoking an executor\u003c/h3\u003e \u003cp\u003eWhen invoking an executor in a \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ejob\u003c/code\u003e, any keys in the job itself will override those of the executor invoked. For example, if your job declares a \u003ccode class=\"language-plaintext highlighter-rouge\"\u003edocker\u003c/code\u003e stanza, it will be used, in its entirety, instead of the one in your executor.\u003c/p\u003e \u003cp class=\"alert alert-info\"\u003eThe \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenvironment\u003c/code\u003e variable maps are additive. If an \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eexecutor\u003c/code\u003e has one of the same \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenvironment\u003c/code\u003e variables as the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ejob\u003c/code\u003e, the value in the job will be used. See the \u003ca href=\"/docs/env-vars/#order-of-precedence\"\u003eEnvironment Variables guide\u003c/a\u003e for more information.\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003eexecutors\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003enode\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/node:lts\u003c/span\u003e\n \u003cspan class=\"na\"\u003eenvironment\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eENV\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eci\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:stable\u003c/span\u003e\n \u003cspan class=\"c1\"\u003e# The test executor below will be overwritten by the more explicit \"docker\" executor. Any env vars will be added.\u003c/span\u003e\n \u003cspan class=\"na\"\u003eexecutor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003enode\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"Node will not be installed.\"\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003eThe above config would resolve to the following:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:stable\u003c/span\u003e\n \u003cspan class=\"na\"\u003eenvironment\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eENV\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eci\u003c/span\u003e \u003cspan class=\"c1\"\u003e# From executor.\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"Node will not be installed.\"\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch2 id=\"authoring-parameterized-jobs\"\u003eAuthoring parameterized jobs\u003c/h2\u003e \u003cp\u003eIt is possible to invoke the same job more than once in the workflows stanza of \u003ccode class=\"language-plaintext highlighter-rouge\"\u003e.circleci/config.yml\u003c/code\u003e, passing any necessary parameters as subkeys to the job. See the \u003ca href=\"#parameter-syntax\"\u003eParameters syntax section\u003c/a\u003e above for details of syntax usage.\u003c/p\u003e \u003cp\u003eExample of defining and invoking a parameterized job in a \u003ccode class=\"language-plaintext highlighter-rouge\"\u003econfig.yml\u003c/code\u003e:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"c1\"\u003e# defines a parameterized job\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eA job that does very little other than demonstrate what a parameterized job looks like\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eTo\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ewhom\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003eshall\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ewe\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003esay\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ehello?\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eWorld\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:2023.11\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"Hello \u0026lt;\u0026lt; parameters.saywhat \u0026gt;\u0026gt;\"\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003esayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"c1\"\u003e# invokes the parameterized job\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eEveryone\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp class=\"alert alert-info\"\u003eWhen invoking the same job multiple times with parameters across any number of workflows, the build name will be changed (i.e. \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esayhello-1\u003c/code\u003e, \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esayhello-2\u003c/code\u003e, etc.). To ensure build numbers are not appended, utilize the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ename\u003c/code\u003e key. The name you assign needs to be unique, otherwise the numbers will still be appended to the job name. As an example:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003esayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ebuild-sayhello\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eEveryone\u003c/span\u003e\n \u003cspan class=\"na\"\u003edeploy\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003esayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003edeploy-sayhello\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eAll\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch3 id=\"jobs-defined-in-an-orb\"\u003eJobs defined in an orb\u003c/h3\u003e \u003cp\u003eIf a job is declared inside an orb it can use commands in that orb or the global commands. It is not possible to call commands outside the scope of declaration of the job.\u003c/p\u003e \u003cp\u003e\u003cstrong\u003ehello-orb\u003c/strong\u003e\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e# partial yaml from hello-orb\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eTo\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ewhom\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003eshall\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ewe\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003esay\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ehello?\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eWorld\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:2023.11\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003eparameters.saywhat\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026gt;\u0026gt;\"\u003c/span\u003e\n\u003cspan class=\"na\"\u003ecommands\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"\u0026lt;\u0026lt; parameters.saywhat \u0026gt;\u0026gt;\"\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003e\u003cstrong\u003eConfig leveraging hello-orb\u003c/strong\u003e\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"c1\"\u003e# config.yml\u003c/span\u003e\n\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003eorbs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ehello-orb\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003esomenamespace/hello-orb@volatile\u003c/span\u003e\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003ehello-orb/sayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eEveryone\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch3 id=\"using-parameters-in-executors\"\u003eUsing parameters in executors\u003c/h3\u003e \u003cp\u003eTo use parameters in executors, define the parameters under the given executor. When you invoke the executor, pass the keys of the parameters as a map of keys under the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eexecutor:\u003c/code\u003e declaration, each of which has the value of the parameter to pass in.\u003c/p\u003e \u003cp\u003eParameters in executors can be of the type \u003ccode class=\"language-plaintext highlighter-rouge\"\u003estring\u003c/code\u003e, \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eenum\u003c/code\u003e, or \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eboolean\u003c/code\u003e. Default values can be provided with the optional \u003ccode class=\"language-plaintext highlighter-rouge\"\u003edefault\u003c/code\u003e key.\u003c/p\u003e \u003ch4 id=\"example-build-configuration-using-a-parameterized-executor\"\u003eExample build configuration using a parameterized executor\u003c/h4\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003eexecutors\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003epython\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etag\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003elatest\u003c/span\u003e\n \u003cspan class=\"na\"\u003emyspecialvar\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/python:\u0026lt;\u0026lt; parameters.tag \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"na\"\u003eenvironment\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eMYPRECIOUS\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.myspecialvar \u0026gt;\u0026gt;\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eexecutor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003epython\u003c/span\u003e\n \u003cspan class=\"na\"\u003etag\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003e2.7\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003emyspecialvar\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003emyspecialvalue\"\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003cp\u003eThe above would resolve to the following:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"pi\"\u003e[]\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/python:2.7\u003c/span\u003e\n \u003cspan class=\"na\"\u003eenvironment\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eMYPRECIOUS\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003emyspecialvalue\"\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch3 id=\"the-scope-of-parameters\"\u003eThe scope of parameters\u003c/h3\u003e \u003cp\u003eParameters are in-scope only within the job or command that defined them. If you want a job or command to pass its parameters to a command it invokes, they must be passed explicitly.\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edescription\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eTo\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ewhom\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003eshall\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ewe\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003esay\u003c/span\u003e\u003cspan class=\"nv\"\u003e \u003c/span\u003e\u003cspan class=\"s\"\u003ehello?\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\"\u003c/span\u003e\u003cspan class=\"s\"\u003eWorld\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:2023.11\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003esay\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"c1\"\u003e# Since the command \"say\" doesn't define a default\u003c/span\u003e\n \u003cspan class=\"c1\"\u003e# value for the \"saywhat\" parameter, it must be\u003c/span\u003e\n \u003cspan class=\"c1\"\u003e# passed in manually\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.saywhat \u0026gt;\u0026gt;\u003c/span\u003e\n\u003cspan class=\"na\"\u003ecommands\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esay\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003estring\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"\u0026lt;\u0026lt; parameters.saywhat \u0026gt;\u0026gt;\"\u003c/span\u003e\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003esayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eEveryone\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch3 id=\"invoking-the-same-job-multiple-times\"\u003eInvoking the same job multiple times\u003c/h3\u003e \u003cp\u003eA single configuration may invoke a job multiple times. At configuration processing time during build ingestion, CircleCI will auto-generate names if none are provided or you may name the duplicate jobs explicitly with the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ename\u003c/code\u003e key.\u003c/p\u003e \u003cp class=\"alert alert-info\"\u003eYou must explicitly name repeat jobs when a repeat job should be upstream of another job in a workflow. For example, if a job is used under the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003erequires\u003c/code\u003e key of a job invocation in a workflow, you will need to explicitly name it.\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003eloadsay\u003c/span\u003e\n \u003cspan class=\"c1\"\u003e# This doesn't need an explicit name as it has no downstream dependencies\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003esayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eEveryone\u003c/span\u003e\n \u003cspan class=\"na\"\u003erequires\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003eloadsay\u003c/span\u003e\n \u003cspan class=\"c1\"\u003e# This needs an explicit name for saygoodbye to require it as a job dependency\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003esayhello\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eSayHelloChad\u003c/span\u003e\n \u003cspan class=\"na\"\u003esaywhat\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eChad\u003c/span\u003e\n \u003cspan class=\"c1\"\u003e# Uses explicitly defined \"sayhello\"\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003esaygoodbye\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003erequires\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003eSayHelloChad\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch3 id=\"using-pre-and-post-steps\"\u003eUsing pre and post steps\u003c/h3\u003e \u003cp\u003eEvery job invocation may optionally accept two special arguments: \u003ccode class=\"language-plaintext highlighter-rouge\"\u003epre-steps\u003c/code\u003e and \u003ccode class=\"language-plaintext highlighter-rouge\"\u003epost-steps\u003c/code\u003e. Steps under \u003ccode class=\"language-plaintext highlighter-rouge\"\u003epre-steps\u003c/code\u003e are executed before any of the other steps in the job. The steps under \u003ccode class=\"language-plaintext highlighter-rouge\"\u003epost-steps\u003c/code\u003e are executed after all of the other steps.\u003c/p\u003e \u003cp\u003ePre and post steps allow you to execute steps in a given job without modifying the job. This is useful, for example, in running custom setup steps before job execution.\u003c/p\u003e \u003ch3 id=\"defining-pre-and-post-steps\"\u003eDefining pre and post steps\u003c/h3\u003e \u003cp class=\"alert alert-info\"\u003eThe keys \u003ccode class=\"language-plaintext highlighter-rouge\"\u003epre-steps\u003c/code\u003e and \u003ccode class=\"language-plaintext highlighter-rouge\"\u003epost-steps\u003c/code\u003e in jobs are available in configuration version 2.1 and later.\u003c/p\u003e \u003cp\u003eThe following example defines pre-steps and post-steps in the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ebar\u003c/code\u003e job of the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ebuild\u003c/code\u003e workflow:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"c1\"\u003e# config.yml\u003c/span\u003e\n\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebar\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:2023.11\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003echeckout\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ecommand\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"building\"\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ecommand\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"testing\"\u003c/span\u003e\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ebuild\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003ebar\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003epre-steps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ecommand\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"install custom dependency\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003epost-steps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ecommand\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"upload artifact to s3\"\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch2 id=\"defining-conditional-steps\"\u003eDefining conditional steps\u003c/h2\u003e \u003cp class=\"alert alert-info\"\u003eConditional steps are available in configuration version 2.1 and later.\u003c/p\u003e \u003cp\u003eConditional steps run only if a condition is met at config-compile time, before a workflow runs. This means, for example, that you may not use a condition to check an environment variable, as those are not injected until your steps are running in the shell of your execution environment.\u003c/p\u003e \u003cp\u003eConditional steps may be located anywhere a regular step could and may only use parameter values as inputs.\u003c/p\u003e \u003cp\u003eFor example, an orb could define a command that runs a set of steps \u003cem\u003eif\u003c/em\u003e invoked with \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emyorb/foo: { dostuff: true }\u003c/code\u003e, but not \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emyorb/foo: { dostuff: false }\u003c/code\u003e.\u003c/p\u003e \u003cp\u003eFurthermore, an orb author could define conditional steps in the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esteps\u003c/code\u003e key of a Job or a Command.\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"c1\"\u003e# Inside config.yml\u003c/span\u003e\n\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emyjob\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eparameters\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003epreinstall-foo\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eboolean\u003c/span\u003e\n \u003cspan class=\"na\"\u003edefault\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"no\"\u003efalse\u003c/span\u003e\n \u003cspan class=\"na\"\u003edocker\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecimg/base:2023.11\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"preinstall is \u0026lt;\u0026lt; parameters.preinstall-foo \u0026gt;\u0026gt;\"\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003ewhen\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003econdition\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.preinstall-foo \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"preinstall\"\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003eunless\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003econdition\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; parameters.preinstall-foo \u0026gt;\u0026gt;\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"don't preinstall\"\u003c/span\u003e\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eworkflow\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003emyjob\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003epreinstall-foo\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"no\"\u003efalse\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003emyjob\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003epreinstall-foo\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"no\"\u003etrue\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003emyjob\u003c/span\u003e \u003cspan class=\"c1\"\u003e# The empty string is falsy\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch3 id=\"the-when-step\"\u003e\u003cstrong\u003eThe \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ewhen\u003c/code\u003e step\u003c/strong\u003e\u003c/h3\u003e \u003cp\u003eUnder the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003ewhen\u003c/code\u003e key are the subkeys \u003ccode class=\"language-plaintext highlighter-rouge\"\u003econdition\u003c/code\u003e and \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esteps\u003c/code\u003e. The subkey \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esteps\u003c/code\u003e are run only if the condition evaluates to a truthy value.\u003c/p\u003e \u003ctable class=\"table table-striped\"\u003e \u003cthead\u003e \u003ctr\u003e \u003cth\u003eKey\u003c/th\u003e \u003cth\u003eRequired\u003c/th\u003e \u003cth\u003eType\u003c/th\u003e \u003cth\u003eDescription\u003c/th\u003e \u003c/tr\u003e \u003c/thead\u003e \u003ctbody\u003e \u003ctr\u003e \u003ctd\u003econdition\u003c/td\u003e \u003ctd\u003eY\u003c/td\u003e \u003ctd\u003eLogic\u003c/td\u003e \u003ctd\u003e\u003ca href=\"/docs/configuration-reference/#logic-statements\"\u003eA logic statement\u003c/a\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003esteps\u003c/td\u003e \u003ctd\u003eY\u003c/td\u003e \u003ctd\u003eSequence\u003c/td\u003e \u003ctd\u003eA list of steps to execute when the condition is truthy.\u003c/td\u003e \u003c/tr\u003e \u003c/tbody\u003e \u003c/table\u003e \u003ch3 id=\"the-unless-step\"\u003e\u003cstrong\u003eThe \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eunless\u003c/code\u003e step\u003c/strong\u003e\u003c/h3\u003e \u003cp\u003eUnder the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eunless\u003c/code\u003e key are the subkeys \u003ccode class=\"language-plaintext highlighter-rouge\"\u003econdition\u003c/code\u003e and \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esteps\u003c/code\u003e. The subkey \u003ccode class=\"language-plaintext highlighter-rouge\"\u003esteps\u003c/code\u003e are run only if the condition evaluates to a falsy value.\u003c/p\u003e \u003ctable class=\"table table-striped\"\u003e \u003cthead\u003e \u003ctr\u003e \u003cth\u003eKey\u003c/th\u003e \u003cth\u003eRequired\u003c/th\u003e \u003cth\u003eType\u003c/th\u003e \u003cth\u003eDescription\u003c/th\u003e \u003c/tr\u003e \u003c/thead\u003e \u003ctbody\u003e \u003ctr\u003e \u003ctd\u003econdition\u003c/td\u003e \u003ctd\u003eY\u003c/td\u003e \u003ctd\u003eLogic\u003c/td\u003e \u003ctd\u003e\u003ca href=\"/docs/configuration-reference/#logic-statements\"\u003eA logic statement\u003c/a\u003e\u003c/td\u003e \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003esteps\u003c/td\u003e \u003ctd\u003eY\u003c/td\u003e \u003ctd\u003eSequence\u003c/td\u003e \u003ctd\u003eA list of steps to execute when the condition is falsy.\u003c/td\u003e \u003c/tr\u003e \u003c/tbody\u003e \u003c/table\u003e \u003ch2 id=\"writing-inline-orbs\"\u003eWriting inline orbs\u003c/h2\u003e \u003cp\u003eWhen defining reusable configuration elements directly within your config, you can also wrap those elements within an inline orb. You may find inline orbs useful for development or for name-spacing elements that share names in a local config.\u003c/p\u003e \u003cp\u003eTo write an inline orb, place the orb elements under that orb’s key in the orbs declaration section of the configuration. For example, if you want to import one orb to use inside another inline orb, the config could look like the example shown below, in which the inline orb \u003ccode class=\"language-plaintext highlighter-rouge\"\u003emy-orb\u003c/code\u003e imports the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003enode\u003c/code\u003e orb:\u003c/p\u003e \u003cdiv class=\"language-yaml highlighter-rouge\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"highlight\"\u003e\u003ccode\u003e\u003cspan class=\"na\"\u003eversion\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"m\"\u003e2.1\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003eorbs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emy-orb\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eorbs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003enode\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003ecircleci/node@3.0\u003c/span\u003e\n \u003cspan class=\"na\"\u003ecommands\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emy_command\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003erun\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003eecho \"Run my tests\"\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emy_job\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003eexecutor\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003enode/default\u003c/span\u003e \u003cspan class=\"c1\"\u003e# Node orb executor\u003c/span\u003e\n \u003cspan class=\"na\"\u003esteps\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003echeckout\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003emy_command\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"na\"\u003estore_test_results\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003epath\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e \u003cspan class=\"s\"\u003etest-results\u003c/span\u003e\n\n\u003cspan class=\"na\"\u003eworkflows\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003emain\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"na\"\u003ejobs\u003c/span\u003e\u003cspan class=\"pi\"\u003e:\u003c/span\u003e\n \u003cspan class=\"pi\"\u003e-\u003c/span\u003e \u003cspan class=\"s\"\u003emy-orb/my_job\u003c/span\u003e\n\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e \u003ch2 id=\"see-also\"\u003eSee also\u003c/h2\u003e \u003cul\u003e \u003cli\u003eRefer to \u003ca href=\"/docs/sample-config/\"\u003eSample Configurations\u003c/a\u003e for some sample configurations that you can use in your own CircleCI configuration.\u003c/li\u003e \u003cli\u003eRefer to \u003ca href=\"/docs/postgres-config/\"\u003eDatabase Examples\u003c/a\u003e for database examples you can use in your CircleCI configuration.\u003c/li\u003e \u003c/ul\u003e","file_name":"_cci2/reusing-config.md"}},"__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":["reusing-config"]},"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>