CINXE.COM

Deploy ImageLabeller with GitLab | Atlassian

<!DOCTYPE html> <html id="magnolia" lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta property="fb:pages" content="115407078489594" /> <meta name="description" content="Use GitLab to deploy ImageLabeller, a simple demo application from Atlassian built on AWS that uses machine learning to apply labels to images."> <meta name="author" content="Atlassian"> <link rel="canonical" href="https://support.atlassian.com/jira-software-cloud/docs/deploy-imagelabeller-with-gitlab"/> <title> Deploy ImageLabeller with GitLab | Atlassian </title> <link rel="preload" href="https://wac-cdn.atlassian.com/static/master/8974/assets/build/fonts/charlie-sans/charlie-text/Charlie_Text-Regular.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="https://wac-cdn.atlassian.com/static/master/8974/assets/build/fonts/charlie-sans/charlie-text/Charlie_Text-Semibold.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="https://wac-cdn.atlassian.com/static/master/8974/assets/build/fonts/charlie-sans/charlie-text/Charlie_Text-Bold.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="https://wac-cdn.atlassian.com/static/master/8974/assets/build/fonts/charlie-sans/charlie-text/Charlie_Text-Black.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="https://wac-cdn.atlassian.com/static/master/8974/assets/build/fonts/charlie-sans/charlie-display/Charlie_Display-Semibold.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="https://wac-cdn.atlassian.com/static/master/8974/assets/build/fonts/charlie-sans/charlie-display/Charlie_Display-Black.woff2" as="font" type="font/woff2" crossorigin> <link rel="stylesheet" href="https://wac-cdn.atlassian.com/static/master/8974/assets/build/css/wpl-main.css?cdnVersion=2631" id="main-css" /> <link href="https://wac-cdn.atlassian.com" rel="preconnect"> <script type="text/javascript" src="https://wac-cdn.atlassian.com/static/master/8974/assets/build/js/head.js?cdnVersion=2631"></script> <link rel="alternate" href="https://www.atlassian.com/devops/deploy-imagelabeller/gitlab" hreflang="x-default" /> <link rel="alternate" href="https://www.atlassian.com/devops/deploy-imagelabeller/gitlab" hreflang="en" /> <link rel="alternate" href="https://www.atlassian.com/ja/devops/deploy-imagelabeller/gitlab" hreflang="ja" /> <link rel="alternate" href="https://www.atlassian.com/fr/devops/deploy-imagelabeller/gitlab" hreflang="fr" /> <link rel="alternate" href="https://www.atlassian.com/de/devops/deploy-imagelabeller/gitlab" hreflang="de" /> <link rel="alternate" href="https://www.atlassian.com/es/devops/deploy-imagelabeller/gitlab" hreflang="es" /> <link rel="alternate" href="https://www.atlassian.com/br/devops/deploy-imagelabeller/gitlab" hreflang="pt-BR" /> <link rel="alternate" href="https://www.atlassian.com/zh/devops/deploy-imagelabeller/gitlab" hreflang="zh-Hans" /> <link rel="alternate" href="https://www.atlassian.com/ko/devops/deploy-imagelabeller/gitlab" hreflang="ko" /> <link rel="alternate" href="https://www.atlassian.com/ru/devops/deploy-imagelabeller/gitlab" hreflang="ru" /> <link rel="alternate" href="https://www.atlassian.com/pl/devops/deploy-imagelabeller/gitlab" hreflang="pl" /> <link rel="alternate" href="https://www.atlassian.com/it/devops/deploy-imagelabeller/gitlab" hreflang="it" /> <link rel="alternate" href="https://www.atlassian.com/nl/devops/deploy-imagelabeller/gitlab" hreflang="nl" /> <link rel="apple-touch-icon" sizes="16x16" href="/favicon-16x16.png" /> <link rel="apple-touch-icon" sizes="32x32" href="/favicon-32x32.png" /> <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" /> <link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32" /> <meta name="theme-color" content="#205081"> <meta property="og:title" content="Deploy ImageLabeller with GitLab | Atlassian" /> <meta property="og:description" content="Use GitLab to deploy ImageLabeller, a simple demo application from Atlassian built on AWS that uses machine learning to apply labels to images." /> <meta property="og:type" content="website" /> <meta property="og:url" content="https://support.atlassian.com/jira-software-cloud/docs/deploy-imagelabeller-with-gitlab" /> <meta property="og:site_name" content="Atlassian" /> <meta name="twitter:card" content="summary" /> <meta name="twitter:site" content="@Atlassian" /> <script src="https://wac-cdn.atlassian.com/static/master/8974/assets/build/js/jquery.js?cdnVersion=2631"></script> <style> .inline-code { display:inline; background-color:#ebecf0; padding: 0 2px 0 5px; letter-spacing:-1px !important; text-indent:-3px; text-rendering:optimizeLegibility; word-spacing:-1px; white-space:nowrap; } #author h5.heading { margin-bottom: 5px; } .logos { margin-right: 40px; margin-bottom: -10px; } .logo-wrapper { margin-bottom: 0px; } </style> <script type="text/javascript"> window.featureFlags = "".split('&amp;') .reduce((flags, flagStr) => { const [flagKey, flagValue] = flagStr.split('='); return { ...flags, [flagKey]: flagValue }; }, {}) </script> <script type="text/javascript"> window.cmsPageVariant = window.cmsPageVariant ? window.cmsPageVariant : window.featureFlags?.cmsVariant; </script> <script type="text/javascript"> var LOCALIZED_PRICING_CONTENTFUL_SPACE = "3s3v3nq72la0"; var LOCALIZED_PRICING_CONTENTFUL_ENVIRONMENT = "master"; var LOCALIZED_PRICING_CONTENTFUL_ACCESS_TOKEN = "v5nSeyuO6dUxZX_Gh5OWEHOJHt3GYSKtyB7ySulLgHg"; var LOCALIZED_CCP_PRICING_CONTENTFUL_ENVIRONMENT = "master"; var LOCALIZED_CCP_PRICING_CONTENTFUL_ACCESS_TOKEN = "v5nSeyuO6dUxZX_Gh5OWEHOJHt3GYSKtyB7ySulLgHg"; var LOCALIZED_PRICING_USE_GEO_CURRENCY = true; </script> </head> <body id="gitlab" class="wac devops deploy-imagelabeller gitlab" data-headerless-path="gitlab"> <div class="language-selector-banner "> <script type="text/x-component"> { "type":"imkt.components.LanguageSwitcherNav", "params": { } } </script> <span class="language-selector-banner__close-banner">Close</span> <div class="language-selector-banner__inner-container"> <div class="language-selector-banner__language-suggestion"> <a href="#">View this page in <span class="preferred-locale-detected">your language</span>?</a> </div> <div class="language-selector-banner__language-selector"> <a href="#" class="language-selector-banner__language-selector__trigger">All languages</a> <div class="language-selector-banner__language-selector__options"> <div class="language-selector-banner__language-selector__options__header"> <span>Choose your language</span> </div> <ul class="language-selector-banner__language-selector__options__list"> <li class="language-selector-banner__language-selector__options__list__item"> <a aria-label="中文" data-event="clicked" data-uuid="212a1c0b-40-0" data-event-component="linkButton" data-event-container="languageSelectorBanner" data-schema-version="1" data-lang="zh" class="notranslate SL_opaque" data-locale-url="https://www.atlassian.com/zh/devops/deploy-imagelabeller/gitlab" href="https://www.atlassian.com/zh/devops/deploy-imagelabeller/gitlab">中文</a> </li> <li class="language-selector-banner__language-selector__options__list__item"> <a aria-label="Deutsch" data-event="clicked" data-uuid="212a1c0b-40-1" data-event-component="linkButton" data-event-container="languageSelectorBanner" data-schema-version="1" data-lang="de" class="notranslate SL_opaque" data-locale-url="https://www.atlassian.com/de/devops/deploy-imagelabeller/gitlab" href="https://www.atlassian.com/de/devops/deploy-imagelabeller/gitlab">Deutsch</a> </li> <li class="language-selector-banner__language-selector__options__list__item"> <a aria-label="English" data-event="clicked" data-uuid="212a1c0b-40-2" data-event-component="linkButton" data-event-container="languageSelectorBanner" data-schema-version="1" data-lang="en" class="notranslate SL_opaque" data-locale-url="https://www.atlassian.com/devops/deploy-imagelabeller/gitlab" href="https://www.atlassian.com/devops/deploy-imagelabeller/gitlab">English</a> </li> <li class="language-selector-banner__language-selector__options__list__item"> <a aria-label="Español" data-event="clicked" data-uuid="212a1c0b-40-3" data-event-component="linkButton" data-event-container="languageSelectorBanner" data-schema-version="1" data-lang="es" class="notranslate SL_opaque" data-locale-url="https://www.atlassian.com/es/devops/deploy-imagelabeller/gitlab" href="https://www.atlassian.com/es/devops/deploy-imagelabeller/gitlab">Español</a> </li> <li class="language-selector-banner__language-selector__options__list__item"> <a aria-label="Français" data-event="clicked" data-uuid="212a1c0b-40-4" data-event-component="linkButton" data-event-container="languageSelectorBanner" data-schema-version="1" data-lang="fr" class="notranslate SL_opaque" data-locale-url="https://www.atlassian.com/fr/devops/deploy-imagelabeller/gitlab" href="https://www.atlassian.com/fr/devops/deploy-imagelabeller/gitlab">Français</a> </li> <li class="language-selector-banner__language-selector__options__list__item"> <a aria-label="Italiano" data-event="clicked" data-uuid="212a1c0b-40-5" data-event-component="linkButton" data-event-container="languageSelectorBanner" data-schema-version="1" data-lang="it" class="notranslate SL_opaque" data-locale-url="https://www.atlassian.com/it/devops/deploy-imagelabeller/gitlab" href="https://www.atlassian.com/it/devops/deploy-imagelabeller/gitlab">Italiano</a> </li> <li class="language-selector-banner__language-selector__options__list__item"> <a aria-label="한국어" data-event="clicked" data-uuid="212a1c0b-40-6" data-event-component="linkButton" data-event-container="languageSelectorBanner" data-schema-version="1" data-lang="ko" class="notranslate SL_opaque" data-locale-url="https://www.atlassian.com/ko/devops/deploy-imagelabeller/gitlab" href="https://www.atlassian.com/ko/devops/deploy-imagelabeller/gitlab">한국어</a> </li> <li class="language-selector-banner__language-selector__options__list__item"> <a aria-label="Nederlands" data-event="clicked" data-uuid="212a1c0b-40-7" data-event-component="linkButton" data-event-container="languageSelectorBanner" data-schema-version="1" data-lang="nl" class="notranslate SL_opaque" data-locale-url="https://www.atlassian.com/nl/devops/deploy-imagelabeller/gitlab" href="https://www.atlassian.com/nl/devops/deploy-imagelabeller/gitlab">Nederlands</a> </li> <li class="language-selector-banner__language-selector__options__list__item"> <a aria-label="日本語" data-event="clicked" data-uuid="212a1c0b-40-8" data-event-component="linkButton" data-event-container="languageSelectorBanner" data-schema-version="1" data-lang="ja" class="notranslate SL_opaque" data-locale-url="https://www.atlassian.com/ja/devops/deploy-imagelabeller/gitlab" href="https://www.atlassian.com/ja/devops/deploy-imagelabeller/gitlab">日本語</a> </li> <li class="language-selector-banner__language-selector__options__list__item"> <a aria-label="Português" data-event="clicked" data-uuid="212a1c0b-40-9" data-event-component="linkButton" data-event-container="languageSelectorBanner" data-schema-version="1" data-lang="br" class="notranslate SL_opaque" data-locale-url="https://www.atlassian.com/br/devops/deploy-imagelabeller/gitlab" href="https://www.atlassian.com/br/devops/deploy-imagelabeller/gitlab">Português</a> </li> <li class="language-selector-banner__language-selector__options__list__item"> <a aria-label="Pусский" data-event="clicked" data-uuid="212a1c0b-40-10" data-event-component="linkButton" data-event-container="languageSelectorBanner" data-schema-version="1" data-lang="ru" class="notranslate SL_opaque" data-locale-url="https://www.atlassian.com/ru/devops/deploy-imagelabeller/gitlab" href="https://www.atlassian.com/ru/devops/deploy-imagelabeller/gitlab">Pусский</a> </li> <li class="language-selector-banner__language-selector__options__list__item"> <a aria-label="Polski" data-event="clicked" data-uuid="212a1c0b-40-11" data-event-component="linkButton" data-event-container="languageSelectorBanner" data-schema-version="1" data-lang="pl" class="notranslate SL_opaque" data-locale-url="https://www.atlassian.com/pl/devops/deploy-imagelabeller/gitlab" href="https://www.atlassian.com/pl/devops/deploy-imagelabeller/gitlab">Polski</a> </li> </ul> </div> </div> </div> </div> <header class="header header--wac"> <style> @media (min-width: 1024px) { #adg4-global-nav .adg4-nav-link-products .dropdown-content { left: -100px; width: 912px; } } .adg4-nav-link-teams .dropdown-content, .adg4-nav-link-why-atlassian .dropdown-content { width: 696px; left: 5px; } .adg4-nav-link-resources .dropdown-content { width: 912px; right: -170px; } #adg4-global-nav .intra-div.n10 { background: #F8F8F8; } #adg4-global-nav div.h5:before { content: "\00A0"; display: block; } #adg4-global-nav a.component__link.default { font-size: 0.875rem; margin: 0; padding: 5px 0; line-height: 1.8; display: block; color: inherit; } #adg4-global-nav a.component__link.default:hover { text-decoration: none; color: #0052CC; } #adg4-global-nav h3 { font-size: 0.875rem; margin: 0; font-weight: 600; } #adg4-global-nav p { font-size: 0.75rem; margin: 0; color: #505258; } #adg4-global-nav .products-tab-contents .component__image--left img { border-radius: 5px; padding: 5px; background-color: #f8f8f8; margin: 0; } #adg4-global-nav .products-tab-contents a.component--block__link:hover .component__image--left img { background-color: #F0F1F2; } #adg4-global-nav .dropdown-content a.component--block__link:hover h3 { color: #1868DB; } .nav-two-col .intra-div.flexRow.wrap, .nav-three-col .intra-div.flexRow.wrap, .nav-four-col .intra-div.flexRow.wrap, .bottom-three-col .intra-div.flexRow.wrap, .bottom-four-col .intra-div.flexRow.wrap { display: grid; gap: 32px; } .nav-two-col .intra-div.flexRow.wrap { grid-template-columns: 1fr 1fr; padding: 40px 32px 40px 40px; } .bottom-three-col .intra-div.flexRow.wrap, .nav-three-col .intra-div.flexRow.wrap { grid-template-columns: 1fr 1fr 1fr; padding: 40px; } .bottom-four-col .intra-div.flexRow.wrap, .nav-four-col .intra-div.flexRow.wrap { grid-template-columns: 1fr 1fr 1fr 1fr; padding: 40px; } @media (max-width: 1023px) { .bottom-three-col .intra-div.flexRow.wrap, .bottom-four-col .intra-div.flexRow.wrap, .nav-two-col .intra-div.flexRow.wrap, .nav-three-col .intra-div.flexRow.wrap, .nav-four-col .intra-div.flexRow.wrap { padding: 20px; grid-template-columns: 1fr; } } .component.s0.between.component--block.team-card { position: relative; } .component.s0.between.component--block.team-card .hoverable { position: absolute; opacity: 0; width: 1px; height: 1px; top: 0px; left: 0px; } .component.s0.between.component--block.team-card:hover .component--image-heading-textblock img { opacity: 0; } .component.s0.between.component--block.team-card:hover .hoverable { width: auto; height: 28px; opacity: 1; } #adg4-global-nav .component--image-heading-textblock.with-flex { display: flex; } #adg4-global-nav .component--image-heading-textblock.with-flex div.component__image { margin-right: 8px; } #adg4-global-nav .component--image-heading-textblock.with-flex div.component__heading-textblock { margin-left: 8px; } #adg4-global-nav span.lozenge { border: 0; background: #cfe1fd; border-radius: 30px; font-size: .625rem; font-weight: 600; text-transform: uppercase; padding: 1px 6px; letter-spacing: .3px; line-height: 1.45; white-space: nowrap; vertical-align: middle; } .imkt-sticky-wrapper { border-top: 1px solid #DDDEE1; } .imkt-sticky-wrapper .imkt-navbar .imkt-navbar__main-section { min-height: 72px } </style> <nav id="adg4-global-nav" class="adg4-global-nav globalNav prod-view "> <div class="nav-space"> <div class="adg4-nav-inner"> <div class="overlay-style overlay-color"></div> <div class="overlay-style overlay-clickable"><button class="close-all"></button></div> <a href="/" class="header-link" data-event="clicked" data-uuid="0703b6c2-3e-logo-link" data-event-component="linkButton" data-event-container="globalNavWac-ADG4" data-schema-version="1" > <img class="header-logo" alt="Atlassian" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/AtlassianHeaderLogo.svg" style="aspect-ratio: 180/24;"> </a> <button class="mobile-toggle" title="Mobile menu"> <hr class="top" /> <hr class="mid mid1" /> <hr class="mid mid2" /> <hr class="bot" /> </button> <div class="menu-right"> <div class="menu-popout"> <div class="inter-popout-container"> <ul class="nav-links"> <li class="cta-mobile"> <a class="cta button--one button--regular button--primary" href="/try" data-event="clicked" data-uuid="0703b6c2-3e-cta-mobile" data-event-component="linkButton" data-event-container="globalNav-cta-mobile" data-schema-version="1" data-label-english="Get it free" >Get it free</a> </li> <li class="outline-element"></li> <li id="adg4-nav-link-products" class="nav-link globalNav has-dropdown multi adg4-nav-link-products"> <button class="nav-link-button main current-page-false" data-navlinkid="nav-link-22d568a6-9ff4-4125-bc6b-05c6e1965a64" data-event="clicked" data-uuid="22d568a6-9f-link" data-event-component="linkButton" data-event-container="globalNav-navigation-link" data-schema-version="1" > Products <svg class="desktop" width="11" height="6" viewBox="0 0 11 6" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.19995 1.18182L5.19995 4.81818L1.19995 1.18182" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg> </button> <button class="mobile-nav-link nav-link-button" data-tabid="tab-d3062495-a1fa-455d-af4a-1deb514d7223" data-navlinkid="nav-link-22d568a6-9ff4-4125-bc6b-05c6e1965a64"> Featured <svg class="mobile" width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1.36377 1L5.00013 5L1.36377 9" stroke="#101214" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> </button> <button class="mobile-nav-link nav-link-button" data-tabid="tab-e0500fdf-b128-45d6-93b4-b062a202b657" data-navlinkid="nav-link-22d568a6-9ff4-4125-bc6b-05c6e1965a64"> Developers <svg class="mobile" width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1.36377 1L5.00013 5L1.36377 9" stroke="#101214" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> </button> <button class="mobile-nav-link nav-link-button" data-tabid="tab-c014fb24-377d-4a31-89c4-6071c19f8a95" data-navlinkid="nav-link-22d568a6-9ff4-4125-bc6b-05c6e1965a64"> Product Managers <svg class="mobile" width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1.36377 1L5.00013 5L1.36377 9" stroke="#101214" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> </button> <button class="mobile-nav-link nav-link-button" data-tabid="tab-3d19a5a4-952c-4fb1-9f13-7892fa162cec" data-navlinkid="nav-link-22d568a6-9ff4-4125-bc6b-05c6e1965a64"> IT professionals <svg class="mobile" width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1.36377 1L5.00013 5L1.36377 9" stroke="#101214" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> </button> <button class="mobile-nav-link nav-link-button" data-tabid="tab-e3ef4fba-ad10-4f84-af12-2f6f6d1efd67" data-navlinkid="nav-link-22d568a6-9ff4-4125-bc6b-05c6e1965a64"> Business Teams <svg class="mobile" width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1.36377 1L5.00013 5L1.36377 9" stroke="#101214" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> </button> <button class="mobile-nav-link nav-link-button" data-tabid="tab-7d0e41e0-832f-4327-9102-52887f676ce2" data-navlinkid="nav-link-22d568a6-9ff4-4125-bc6b-05c6e1965a64"> Leadership Teams <svg class="mobile" width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1.36377 1L5.00013 5L1.36377 9" stroke="#101214" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> </button> <div class="dropdown-content" id="nav-link-22d568a6-9ff4-4125-bc6b-05c6e1965a64"> <div class="dropdown-content-inner"> <div class="tab-buttons-area"> <button class="tab-button active" data-navlinkid="nav-link-22d568a6-9ff4-4125-bc6b-05c6e1965a64" data-tabid="tab-d3062495-a1fa-455d-af4a-1deb514d7223" data-event="clicked" data-uuid="d3062495-a1-tab-butotn" data-event-component="linkButton" data-event-container="globalNav-tab-button" data-schema-version="1" > Featured </button> <button class="tab-button " data-navlinkid="nav-link-22d568a6-9ff4-4125-bc6b-05c6e1965a64" data-tabid="tab-e0500fdf-b128-45d6-93b4-b062a202b657" data-event="clicked" data-uuid="e0500fdf-b1-tab-butotn" data-event-component="linkButton" data-event-container="globalNav-tab-button" data-schema-version="1" > Developers </button> <button class="tab-button " data-navlinkid="nav-link-22d568a6-9ff4-4125-bc6b-05c6e1965a64" data-tabid="tab-c014fb24-377d-4a31-89c4-6071c19f8a95" data-event="clicked" data-uuid="c014fb24-37-tab-butotn" data-event-component="linkButton" data-event-container="globalNav-tab-button" data-schema-version="1" > Product Managers </button> <button class="tab-button " data-navlinkid="nav-link-22d568a6-9ff4-4125-bc6b-05c6e1965a64" data-tabid="tab-3d19a5a4-952c-4fb1-9f13-7892fa162cec" data-event="clicked" data-uuid="3d19a5a4-95-tab-butotn" data-event-component="linkButton" data-event-container="globalNav-tab-button" data-schema-version="1" > IT professionals </button> <button class="tab-button " data-navlinkid="nav-link-22d568a6-9ff4-4125-bc6b-05c6e1965a64" data-tabid="tab-e3ef4fba-ad10-4f84-af12-2f6f6d1efd67" data-event="clicked" data-uuid="e3ef4fba-ad-tab-butotn" data-event-component="linkButton" data-event-container="globalNav-tab-button" data-schema-version="1" > Business Teams </button> <button class="tab-button " data-navlinkid="nav-link-22d568a6-9ff4-4125-bc6b-05c6e1965a64" data-tabid="tab-7d0e41e0-832f-4327-9102-52887f676ce2" data-event="clicked" data-uuid="7d0e41e0-83-tab-butotn" data-event-component="linkButton" data-event-container="globalNav-tab-button" data-schema-version="1" > Leadership Teams </button> <div class="link-in-dropdown"> <a class="easy-link-arrow" href="/software" data-event="clicked" data-uuid="7d0e41e0-83" data-event-component="linkButton" data-event-container="globalNav-tab-link-in-dropdown" data-schema-version="1" > See all products </a> </div> </div> <div class="tab-content-area globalNav cols-6"> <div id="tab-d3062495-a1fa-455d-af4a-1deb514d7223" class="singular-tab-content active"> <h5 class="mobile-title eyebrows"> Featured </h5> <div class="component component--block products-tab-contents nav-two-col" style="margin:0;" > <div class="intra-div flexRow alignContentStart alignItemsStart justifyStart wrap no s0 between flexColSm has-border border-color- padding-24 padding-style-allSides allSides border-radius-default border-width-0"> <div class="component s0 between component--block" style="margin:4px 0;padding:0;" > <a href="/software/jira" class="component--block__link" data-event="clicked" data-uuid="866c24d9-b0" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="a15115f1" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Jira.svg" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Jira </h3> <p>Flexible project management</p> </div> </div> </a> </div> <div class="component s0 between component--block" style="margin:4px 0;padding:0;" > <a href="/software/confluence" class="component--block__link" data-event="clicked" data-uuid="561b5cff-b0" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="c58719b2" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Confluence.svg" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Confluence </h3> <p>Knowledge, all in one place</p> </div> </div> </a> </div> <div class="component s0 between component--block" style="margin:4px 0;padding:0;" > <a href="/software/jira/service-management" class="component--block__link" data-event="clicked" data-uuid="94838acb-4e" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="402ab225" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Jira-Service-Management.svg" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Jira Service Management </h3> <p>High-velocity service delivery</p> </div> </div> </a> </div> <div class="component s0 between hide-all component--block" style="margin:4px 0;padding:0;" > <a href="https://trello.com/home" class="component--block__link" data-event="clicked" data-uuid="1cf0174b-9a" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="6069d7e9" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Trello.svg" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Trello </h3> <p>Organized & visualized work</p> </div> </div> </a> </div> <div class="component s0 between component--block" style="margin:4px 0;padding:0;" > <a href="/software/rovo" class="component--block__link" data-event="clicked" data-uuid="154e84e5-f5" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="1a28c744" alt="Rovo icon" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn-bfldr.atlassian.com/K3MHR9G8/at/k5xhw8hpqxghzb55nfktt4/logo-light_Rovo_mark_brand_RGB.svg" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Rovo <span class="lozenge blue200 text-adg4secondarynavy">NEW</span> </h3> <p>Unlock enterprise knowledge</p> </div> </div> </a> </div> <div class="component s0 between component--block" style="margin:4px 0;padding:0;" > <a href="/software/jira/product-discovery" class="component--block__link" data-event="clicked" data-uuid="44176d6a-9a" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="61053761" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Jira-Product-Discovery.svg" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Jira Product Discovery <span class="lozenge blue200 text-adg4secondarynavy">NEW</span> </h3> <p>Capture & prioritize ideas</p> </div> </div> </a> </div> <div class="component s0 between component--block" style="margin:4px 0;padding:0;" > <a href="/software/compass" class="component--block__link" data-event="clicked" data-uuid="a182ac56-4e" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="659f8f31" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Compass.svg" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Compass <span class="lozenge blue200 text-adg4secondarynavy">NEW</span> </h3> <p>Optimize software health</p> </div> </div> </a> </div> <div class="component s0 between component--block" style="margin:4px 0;padding:0;" > <a href="/software/guard" class="component--block__link" data-event="clicked" data-uuid="50063449-6b" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="58aaa51d" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Guard.svg" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Guard <span class="lozenge blue200 text-adg4secondarynavy">NEW</span> </h3> <p>Enhanced cloud security</p> </div> </div> </a> </div> <div class="component s0 between component--block" style="margin:4px 0;padding:0;" > <a href="/software/loom" class="component--block__link" data-event="clicked" data-uuid="6ee54a1e-1e" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="e12ac81c" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Loom.svg" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Loom <span class="lozenge blue200 text-adg4secondarynavy">NEW</span> </h3> <p>Quick, async video updates</p> </div> </div> </a> </div> </div> </div> </div> <div id="tab-e0500fdf-b128-45d6-93b4-b062a202b657" class="singular-tab-content "> <h5 class="mobile-title eyebrows"> Developers </h5> <div class="component component--block products-tab-contents nav-two-col" style="margin:0;" > <div class="intra-div flexRow alignContentStart alignItemsStart justifyStart wrap no s0 between flexColSm has-border border-color- padding-24 padding-style-allSides allSides border-radius-default border-width-0"> <div class="component s0 between component--block" style="margin:4px 0;padding:0;" > <a href="/software/jira" class="component--block__link" data-event="clicked" data-uuid="676acbb3-62" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="29306f11" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Jira.svg" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Jira </h3> <p>Flexible project management</p> </div> </div> </a> </div> <div class="component s0 between component--block" style="margin:4px 0;padding:0;" > <a href="/software/bitbucket" class="component--block__link" data-event="clicked" data-uuid="c33432cf-d2" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="04091352" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Bitbucket.svg" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Bitbucket </h3> <p>Collaborative code repos</p> </div> </div> </a> </div> <div class="component s0 between component--block" style="margin:4px 0;padding:0;" > <a href="/software/compass" class="component--block__link" data-event="clicked" data-uuid="b189cc6c-90" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="461b52ba" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Compass.svg" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Compass <span class="lozenge blue200 text-adg4secondarynavy">NEW</span> </h3> <p>Optimize software health</p> </div> </div> </a> </div> </div> </div> </div> <div id="tab-c014fb24-377d-4a31-89c4-6071c19f8a95" class="singular-tab-content "> <h5 class="mobile-title eyebrows"> Product Managers </h5> <div class="component component--block products-tab-contents nav-two-col" style="margin:0;" > <div class="intra-div flexRow alignContentStart alignItemsStart justifyStart wrap no s0 between flexColSm has-border border-color- padding-24 padding-style-allSides allSides border-radius-default border-width-0"> <div class="component s0 between component--block" style="margin:4px 0;padding:0;" > <a href="/software/jira" class="component--block__link" data-event="clicked" data-uuid="290c4dc3-76" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="a76bb88f" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Jira.svg" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Jira </h3> <p>Flexible project management</p> </div> </div> </a> </div> <div class="component s0 between component--block" style="margin:4px 0;padding:0;" > <a href="/software/confluence" class="component--block__link" data-event="clicked" data-uuid="6ce391a6-10" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="50f44221" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Confluence.svg" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Confluence </h3> <p>Knowledge, all in one place</p> </div> </div> </a> </div> <div class="component s0 between component--block" style="margin:4px 0 ;padding:0;" > <a href="/software/jira/product-discovery" class="component--block__link" data-event="clicked" data-uuid="b6e816c2-90" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="38733354" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Jira-Product-Discovery.svg" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Jira Product Discovery <span class="lozenge blue200 text-adg4secondarynavy">NEW</span> </h3> <p>Capture & prioritize ideas</p> </div> </div> </a> </div> </div> </div> </div> <div id="tab-3d19a5a4-952c-4fb1-9f13-7892fa162cec" class="singular-tab-content "> <h5 class="mobile-title eyebrows"> IT professionals </h5> <div class="component component--block products-tab-contents nav-two-col" style="margin:0;" > <div class="intra-div flexRow alignContentStart alignItemsStart justifyStart wrap no s0 between flexColSm has-border border-color- padding-24 padding-style-allSides allSides border-radius-default border-width-0"> <div class="component s0 between component--block" style="margin:4px 0;padding:0;" > <a href="/software/jira/service-management" class="component--block__link" data-event="clicked" data-uuid="1c45f049-49" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="74cb2c5b" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Jira-Service-Management.svg" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Jira Service Management </h3> <p>High-velocity service delivery</p> </div> </div> </a> </div> <div class="component s0 between component--block" style="margin:4px 0;padding:0;" > <a href="/software/guard" class="component--block__link" data-event="clicked" data-uuid="923a9b01-40" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="cd74c518" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Guard.svg" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Guard <span class="lozenge blue200 text-adg4secondarynavy">NEW</span> </h3> <p>Enhanced cloud security</p> </div> </div> </a> </div> </div> </div> </div> <div id="tab-e3ef4fba-ad10-4f84-af12-2f6f6d1efd67" class="singular-tab-content "> <h5 class="mobile-title eyebrows"> Business Teams </h5> <div class="component component--block products-tab-contents nav-two-col" style="margin:0;" > <div class="intra-div flexRow alignContentStart alignItemsStart justifyStart wrap no s0 between flexColSm has-border border-color- padding-24 padding-style-allSides allSides border-radius-default border-width-0"> <div class="component s0 between component--block" style="margin:4px 0;padding:0;" > <a href="/software/jira" class="component--block__link" data-event="clicked" data-uuid="13474f83-26" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="1ef222e7" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Jira.svg" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Jira </h3> <p>Flexible project management</p> </div> </div> </a> </div> <div class="component s0 between component--block" style="margin:4px 0;padding:0;" > <a href="/software/confluence" class="component--block__link" data-event="clicked" data-uuid="4b6d0074-94" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="5dc02e14" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Confluence.svg" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Confluence </h3> <p>Knowledge, all in one place</p> </div> </div> </a> </div> <div class="component alignContentStretch alignItemsStretch justifyStart noWrap no s0 between component--block" style="margin:4px 0;padding:0;:;" > <a href="https://trello.com/home" class="component--block__link" data-event="clicked" data-uuid="05036e06-dd" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="f5faeacd" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Trello.svg" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Trello </h3> <p>Organized & visualized work</p> </div> </div> </a> </div> <div class="component s0 between component--block" style="margin:4px 0;padding:0;" > <a href="/software/loom" class="component--block__link" data-event="clicked" data-uuid="c3dcae40-95" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="4d83dea7" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Loom.svg" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Loom <span class="lozenge blue200 text-adg4secondarynavy">NEW</span> </h3> <p>Quick, async video updates</p> </div> </div> </a> </div> </div> </div> </div> <div id="tab-7d0e41e0-832f-4327-9102-52887f676ce2" class="singular-tab-content "> <h5 class="mobile-title eyebrows"> Leadership Teams </h5> <div class="component component--block products-tab-contents nav-two-col" style="margin:0;" > <div class="intra-div flexRow alignContentStart alignItemsStart justifyStart wrap no s0 between flexColSm has-border border-color- padding-24 padding-style-allSides allSides border-radius-default border-width-0"> <div class="component s0 between component--block" style="margin:4px 0 ;padding:0;" > <a href="/software/jira" class="component--block__link" data-event="clicked" data-uuid="3c258fc0-fc" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="a891fdc9" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Jira.svg" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Jira </h3> <p>Flexible project management</p> </div> </div> </a> </div> <div class="component s0 between component--block" style="margin:4px 0 ;padding:0;" > <a href="https://loom.com" class="component--block__link" data-event="clicked" data-uuid="21331073-0f" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="3bbb9fed" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Confluence.svg" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Confluence </h3> <p>Knowledge, all in one place</p> </div> </div> </a> </div> <div class="component s0 between component--block" style="margin:4px 0 ;padding:0;" > <a href="/software/loom" class="component--block__link" data-event="clicked" data-uuid="b30cd095-78" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="c3942edb" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Loom.svg" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Loom <span class="lozenge blue200 text-adg4secondarynavy">NEW</span> </h3> <p>Quick, async video updates</p> </div> </div> </a> </div> <div class="component s0 between component--block" style="margin:4px 0 ;padding:0;" > <a href="/software/jira-align" class="component--block__link" data-event="clicked" data-uuid="e177e36d-f2" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="c3d49c45" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Jira-Align.svg" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Jira Align </h3> <p>Enterprise-wide work planning & value</p> </div> </div> </a> </div> </div> </div> </div> </div></div> <button class="mobile-back-button"> <svg width="16" height="15" viewBox="0 0 16 15" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M7.77087 14.5334C7.87109 14.4335 7.9506 14.3148 8.00485 14.1841C8.0591 14.0535 8.08702 13.9134 8.08702 13.772C8.08702 13.6306 8.0591 13.4905 8.00485 13.3599C7.9506 13.2292 7.87109 13.1105 7.77087 13.0106L3.68091 8.92576L14.0174 8.92576C14.3034 8.92576 14.5777 8.8123 14.7799 8.61033C14.9821 8.40837 15.0957 8.13444 15.0957 7.84882C15.0957 7.5632 14.9821 7.28927 14.7799 7.08731C14.5777 6.88534 14.3034 6.77188 14.0174 6.77188L3.68091 6.77188L7.77087 2.68705C7.87109 2.58712 7.9506 2.46843 8.00485 2.33778C8.0591 2.20714 8.08702 2.06709 8.08702 1.92565C8.08702 1.78421 8.0591 1.64416 8.00485 1.51351C7.9506 1.38286 7.87109 1.26418 7.77087 1.16425C7.35033 0.744243 6.6667 0.744243 6.24508 1.16425L0.315557 7.08742C0.120278 7.28171 0.00717735 7.54348 -0.00038147 7.81867V7.88005C0.00734234 8.15489 0.120439 8.41626 0.315557 8.61022L6.24508 14.5334C6.34523 14.6335 6.46415 14.713 6.59505 14.7672C6.72596 14.8213 6.86627 14.8492 7.00798 14.8492C7.14968 14.8492 7.28999 14.8213 7.4209 14.7672C7.5518 14.713 7.67072 14.6335 7.77087 14.5334Z" fill="#1868DB"/> </svg> Back </button> </div> </li> <li id="adg4-nav-link-teams" class="nav-link globalNav has-dropdown single adg4-nav-link-teams"> <button class="nav-link-button main current-page-false" data-navlinkid="nav-link-c7337bad-f071-4c96-b5a3-99d33e6c73bd" data-event="clicked" data-uuid="c7337bad-f0-link" data-event-component="linkButton" data-event-container="globalNav-navigation-link" data-schema-version="1" > Teams <svg class="desktop" width="11" height="6" viewBox="0 0 11 6" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.19995 1.18182L5.19995 4.81818L1.19995 1.18182" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg> </button> <div class="dropdown-content" id="nav-link-c7337bad-f071-4c96-b5a3-99d33e6c73bd"> <div class="dropdown-content-inner"> <div class="tab-buttons-area"> </div> <div class="tab-content-area globalNav cols-1"> <div id="tab-8212b0b7-5103-48a7-8a92-ac9fbd91d1b4" class="singular-tab-content active"> <h5 class="mobile-title eyebrows"> Teams </h5> <div class="component component--block nav-three-col" style="margin:0;" > <div class="intra-div flexRow alignContentStart alignItemsStretch justifyStart wrap no s0 between flexColSm has-border border-color- padding-24 padding-style-allSides allSides border-radius-default border-width-0"> <div class="component s0 between component--block team-card" style="margin:0;" > <a href="/teams/software-development" class="component--block__link" data-event="clicked" data-uuid="f708e77a-a5" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock"> <div class="component__image"> <img id="90d05cb9" alt="" class="component__image xs-compact-bottom xs-none-top" style="width:28px;height:28px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/nav-software.svg" loading="lazy" /> </div> <div class="component__heading-textblock"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Software </h3> <p>Ship high-quality, innovative software faster</p> </div> </div> <div class="component component--image hoverable"> <img id="38496121" alt="" class="component__image" style="width:28px;height:28px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/nav-software-hover.svg" loading="lazy" /> </div> </a> </div> <div class="component s0 between component--block team-card" style="margin:0;" > <a href="/teams/marketing" class="component--block__link" data-event="clicked" data-uuid="6fe6061e-15" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock"> <div class="component__image"> <img id="1126eb5b" alt="" class="component__image xs-none-top xs-compact-bottom" style="width:44px;height:28px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/nav-marketing.svg" loading="lazy" /> </div> <div class="component__heading-textblock"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Marketing </h3> <p>Collaborative strategies for marketing success</p> </div> </div> <div class="component component--image hoverable"> <img id="663b0d9c" alt="" class="component__image" style="width:44px;height:28px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/nav-marketing-hover.svg" loading="lazy" /> </div> </a> </div> <div class="component s0 between component--block team-card" style="margin:0;" > <a href="/teams/it" class="component--block__link" data-event="clicked" data-uuid="bd6097b7-ae" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--image-heading-textblock"> <div class="component__image"> <img id="c99a84f3" alt="" class="component__image xs-none-top xs-compact-bottom" style="width:32px;height:28px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/nav-it.svg" loading="lazy" /> </div> <div class="component__heading-textblock"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > IT </h3> <p>Deliver exceptional operations and support services.</p> </div> </div> <div class="component component--image hoverable"> <img id="b459ac25" alt="" class="component__image" style="width:32px;height:28px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/nav-it-hover.svg" loading="lazy" /> </div> </a> </div> </div> </div> <div class="component component--block bottom-three-col" style="margin-top:0;" > <div class="intra-div flexRow alignContentStart alignItemsStretch justifyStart wrap no s0 between flexColSm component--block__background neutral100 has-border border-color- padding-24 padding-style-allSides allSides border-radius-default border-width-0"> <div class="component s0 between component--block col-1" style="margin:0;" > <div class="component component--heading"> <h5 class="fnt-wt font-wt-600 fnt-mg font-mgn-16 fnt-ln font-lnh- heading" > solution </h5> </div> <div class="component component--link-button "> <a href="/solutions/work-management" data-event="clicked" data-uuid="b179f79d-e5" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Work Management" data-label-english="Work Management" class="component__link default " > Work Management </a> </div> <div class="component component--link-button "> <a href="/solutions/itsm" data-event="clicked" data-uuid="5ad93cb6-9a" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="IT Service Management" data-label-english="IT Service Management" class="component__link default " > IT Service Management </a> </div> <div class="component component--link-button "> <a href="/solutions/devops" data-event="clicked" data-uuid="d013113f-55" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Agile &amp; DevOps" data-label-english="Agile & DevOps" class="component__link default " > Agile &amp; DevOps </a> </div> </div> <div class="component s0 between component--block col-1" > <div class="component component--heading"> <h5 class="fnt-wt font-wt-600 fnt-mg font-mgn-16 fnt-ln font-lnh- heading" > By team size </h5> </div> <div class="component component--link-button "> <a href="/enterprise" data-event="clicked" data-uuid="f56440e6-51" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Enterprise" data-label-english="Enterprise" class="component__link default " > Enterprise </a> </div> <div class="component component--link-button "> <a href="/software/small-business" data-event="clicked" data-uuid="7515a7d2-b8" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Small business" data-label-english="Small business" class="component__link default " > Small business </a> </div> <div class="component component--link-button "> <a href="/software/startups" data-event="clicked" data-uuid="7dd4032c-05" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Startup" data-label-english="Startup" class="component__link default " > Startup </a> </div> <div class="component component--link-button "> <a href="/teams/nonprofits" data-event="clicked" data-uuid="ecd56900-50" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Non-profit" data-label-english="Non-profit" class="component__link default " > Non-profit </a> </div> </div> <div class="component s0 between component--block col-1" > <div class="component component--heading"> <h5 class="fnt-wt font-wt-600 fnt-mg font-mgn-16 fnt-ln font-lnh- heading" > By industry </h5> </div> <div class="component component--link-button "> <a href="/industries/retail" data-event="clicked" data-uuid="d1ccbcfe-58" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Retail" data-label-english="Retail" class="component__link default " > Retail </a> </div> <div class="component component--link-button "> <a href="/industries/telecom" data-event="clicked" data-uuid="3c615ef5-97" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Telecommunications" data-label-english="Telecommunications" class="component__link default " > Telecommunications </a> </div> <div class="component component--link-button "> <a href="/industries/professional-services" data-event="clicked" data-uuid="4926e993-46" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Professional services" data-label-english="Professional services" class="component__link default " > Professional services </a> </div> <div class="component component--link-button "> <a href="/government" data-event="clicked" data-uuid="89d1956c-e2" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Government" data-label-english="Government" class="component__link default " > Government </a> </div> </div> </div> </div> </div> </div></div> <button class="mobile-back-button"> <svg width="16" height="15" viewBox="0 0 16 15" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M7.77087 14.5334C7.87109 14.4335 7.9506 14.3148 8.00485 14.1841C8.0591 14.0535 8.08702 13.9134 8.08702 13.772C8.08702 13.6306 8.0591 13.4905 8.00485 13.3599C7.9506 13.2292 7.87109 13.1105 7.77087 13.0106L3.68091 8.92576L14.0174 8.92576C14.3034 8.92576 14.5777 8.8123 14.7799 8.61033C14.9821 8.40837 15.0957 8.13444 15.0957 7.84882C15.0957 7.5632 14.9821 7.28927 14.7799 7.08731C14.5777 6.88534 14.3034 6.77188 14.0174 6.77188L3.68091 6.77188L7.77087 2.68705C7.87109 2.58712 7.9506 2.46843 8.00485 2.33778C8.0591 2.20714 8.08702 2.06709 8.08702 1.92565C8.08702 1.78421 8.0591 1.64416 8.00485 1.51351C7.9506 1.38286 7.87109 1.26418 7.77087 1.16425C7.35033 0.744243 6.6667 0.744243 6.24508 1.16425L0.315557 7.08742C0.120278 7.28171 0.00717735 7.54348 -0.00038147 7.81867V7.88005C0.00734234 8.15489 0.120439 8.41626 0.315557 8.61022L6.24508 14.5334C6.34523 14.6335 6.46415 14.713 6.59505 14.7672C6.72596 14.8213 6.86627 14.8492 7.00798 14.8492C7.14968 14.8492 7.28999 14.8213 7.4209 14.7672C7.5518 14.713 7.67072 14.6335 7.77087 14.5334Z" fill="#1868DB"/> </svg> Back </button> </div> </li> <li id="adg4-nav-link-why-atlassian" class="nav-link globalNav has-dropdown single adg4-nav-link-why-atlassian"> <button class="nav-link-button main current-page-false" data-navlinkid="nav-link-fa47bfda-a17c-48bb-b238-3fb7545b1e42" data-event="clicked" data-uuid="fa47bfda-a1-link" data-event-component="linkButton" data-event-container="globalNav-navigation-link" data-schema-version="1" > Why Atlassian <svg class="desktop" width="11" height="6" viewBox="0 0 11 6" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.19995 1.18182L5.19995 4.81818L1.19995 1.18182" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg> </button> <div class="dropdown-content" id="nav-link-fa47bfda-a17c-48bb-b238-3fb7545b1e42"> <div class="dropdown-content-inner"> <div class="tab-buttons-area"> </div> <div class="tab-content-area globalNav cols-1"> <div id="tab-94bac309-9300-4042-bafe-297e6188d84f" class="singular-tab-content active"> <h5 class="mobile-title eyebrows"> Why Atlassian </h5> <div class="component component--block nav-three-col" style="margin:0;" > <div class="intra-div flexRow alignContentStart alignItemsStretch justifyStart wrap no s0 between flexColSm has-border border-color- padding-24 padding-style-allSides allSides border-radius-default border-width-0"> <div class="component s0 between component--block" style="margin:0;" > <a href="https://marketplace.atlassian.com/" class="component--block__link" data-event="clicked" data-uuid="c9dc5872-ad" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--heading-textblock"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Integrations </h3> <p>Connect thousands of apps to your Atlassian products</p> </div> </a> </div> <div class="component s0 between component--block" style="margin:0;" > <a href="/customers" class="component--block__link" data-event="clicked" data-uuid="d7af88e4-e4" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--heading-textblock"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Customers </h3> <p>Case studies & stories powered by teamwork</p> </div> </a> </div> <div class="component s0 between component--block" style="margin:0;" > <a href="/trust/compliance/resources/fedramp" class="component--block__link" data-event="clicked" data-uuid="214ef2f0-e9" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--heading-textblock"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > FedRAMP </h3> <p>Compliant solutions for the public sector</p> </div> </a> </div> <div class="component s0 between component--block" style="margin:0;" > <a href="/trust/resilience" class="component--block__link" data-event="clicked" data-uuid="12386179-63" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--heading-textblock"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Resilience </h3> <p>Enterprise-grade & highly performant infrastructure</p> </div> </a> </div> <div class="component s0 between component--block" style="margin:0;" > <a href="/platform" class="component--block__link" data-event="clicked" data-uuid="b6627015-48" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--heading-textblock"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Platform </h3> <p>Our deeply integrated, reliable & secure platform</p> </div> </a> </div> <div class="component s0 between component--block" style="margin:0;" > <a href="/trust" class="component--block__link" data-event="clicked" data-uuid="7a444656-29" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--heading-textblock"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Trust center </h3> <p>Ensure your data’s security, compliance & availability</p> </div> </a> </div> </div> </div> </div> </div></div> <button class="mobile-back-button"> <svg width="16" height="15" viewBox="0 0 16 15" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M7.77087 14.5334C7.87109 14.4335 7.9506 14.3148 8.00485 14.1841C8.0591 14.0535 8.08702 13.9134 8.08702 13.772C8.08702 13.6306 8.0591 13.4905 8.00485 13.3599C7.9506 13.2292 7.87109 13.1105 7.77087 13.0106L3.68091 8.92576L14.0174 8.92576C14.3034 8.92576 14.5777 8.8123 14.7799 8.61033C14.9821 8.40837 15.0957 8.13444 15.0957 7.84882C15.0957 7.5632 14.9821 7.28927 14.7799 7.08731C14.5777 6.88534 14.3034 6.77188 14.0174 6.77188L3.68091 6.77188L7.77087 2.68705C7.87109 2.58712 7.9506 2.46843 8.00485 2.33778C8.0591 2.20714 8.08702 2.06709 8.08702 1.92565C8.08702 1.78421 8.0591 1.64416 8.00485 1.51351C7.9506 1.38286 7.87109 1.26418 7.77087 1.16425C7.35033 0.744243 6.6667 0.744243 6.24508 1.16425L0.315557 7.08742C0.120278 7.28171 0.00717735 7.54348 -0.00038147 7.81867V7.88005C0.00734234 8.15489 0.120439 8.41626 0.315557 8.61022L6.24508 14.5334C6.34523 14.6335 6.46415 14.713 6.59505 14.7672C6.72596 14.8213 6.86627 14.8492 7.00798 14.8492C7.14968 14.8492 7.28999 14.8213 7.4209 14.7672C7.5518 14.713 7.67072 14.6335 7.77087 14.5334Z" fill="#1868DB"/> </svg> Back </button> </div> </li> <li id="adg4-nav-link-resources" class="nav-link globalNav has-dropdown single adg4-nav-link-resources"> <button class="nav-link-button main current-page-false" data-navlinkid="nav-link-9fc4b679-6101-4d37-be62-9764cce616cb" data-event="clicked" data-uuid="9fc4b679-61-link" data-event-component="linkButton" data-event-container="globalNav-navigation-link" data-schema-version="1" > Resources <svg class="desktop" width="11" height="6" viewBox="0 0 11 6" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.19995 1.18182L5.19995 4.81818L1.19995 1.18182" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg> </button> <div class="dropdown-content" id="nav-link-9fc4b679-6101-4d37-be62-9764cce616cb"> <div class="dropdown-content-inner"> <div class="tab-buttons-area"> </div> <div class="tab-content-area globalNav cols-1"> <div id="tab-e081e462-8411-40d8-9160-3f1b4949778a" class="singular-tab-content active"> <h5 class="mobile-title eyebrows"> Resources </h5> <div class="component component--block nav-four-col" style="margin:0;" > <div class="intra-div flexRow alignContentStart alignItemsStretch justifyStart wrap no s0 between flexColSm has-border border-color- padding-24 padding-style-allSides allSides border-radius-default border-width-0"> <div class="component s0 between component--block" style="margin:0;" > <a href="https://support.atlassian.com/" class="component--block__link" data-event="clicked" data-uuid="29bbc167-92" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--heading-textblock"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Customer Support </h3> <p>Ask questions, report bugs & give us feedback</p> </div> </a> </div> <div class="component s0 between component--block" style="margin:0;" > <a href="https://partnerdirectory.atlassian.com/" class="component--block__link" data-event="clicked" data-uuid="a6a57338-f5" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--heading-textblock"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Find Partners </h3> <p>Consulting, training & product customization support</p> </div> </a> </div> <div class="component s0 between component--block" style="margin:0;" > <a href="/migration" class="component--block__link" data-event="clicked" data-uuid="92cc2fbe-15" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--heading-textblock"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Migration Program </h3> <p>Step-by-step guidance for your Atlassian cloud migration</p> </div> </a> </div> <div class="component s0 between component--block" style="margin:0;" > <a href="https://university.atlassian.com/" class="component--block__link" data-event="clicked" data-uuid="b6f659ac-62" data-event-component="linkButton" data-event-container="block" data-schema-version="1" > <div class="component component--heading-textblock"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > University </h3> <p>Learn and expand your skill set for all things Atlassian</p> </div> </a> </div> </div> </div> <div class="component component--block bottom-four-col" > <div class="intra-div flexRow alignContentStart alignItemsStretch justifyStart wrap no s0 between flexColSm component--block__background n10 has-border border-color- padding-24 padding-style-allSides allSides border-radius-default border-width-0"> <div class="component s0 between component--block col-1" style="margin:0;" > <div class="component component--heading"> <h5 class="fnt-wt font-wt-600 fnt-mg font-mgn-16 fnt-ln font-lnh-13 heading" > support </h5> </div> <div class="component component--link-button "> <a href="/company/contact/general-inquiries" data-event="clicked" data-uuid="a169f872-54" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="General inquiries" data-label-english="General inquiries" class="component__link default " > General inquiries </a> </div> <div class="component component--link-button "> <a href="/company/contact/product-evaluator-advice" data-event="clicked" data-uuid="761c7820-2e" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Product Advice" data-label-english="Product Advice" class="component__link default " > Product Advice </a> </div> <div class="component component--link-button "> <a href="/partners" data-event="clicked" data-uuid="78508d01-2c" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Partner support" data-label-english="Partner support" class="component__link default " > Partner support </a> </div> <div class="component component--link-button "> <a href="/enterprise/success" data-event="clicked" data-uuid="f4a22b8f-03" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Enterprise support" data-label-english="Enterprise support" class="component__link default " > Enterprise support </a> </div> </div> <div class="component s0 between component--block col-1" > <div class="component component--heading"> <div class="fnt-wt font-wt-600 fnt-mg font-mgn-16 fnt-ln font-lnh-13 h5 heading" > </div> </div> <div class="component component--link-button "> <a href="https://support.atlassian.com/contact/" data-event="clicked" data-uuid="b802a97d-a6" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Technical Support" data-label-english="Technical Support" class="component__link default " > Technical Support </a> </div> <div class="component component--link-button "> <a href="/company/contact/purchasing-licensing" data-event="clicked" data-uuid="80be0d0e-96" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Pricing and Billing" data-label-english="Pricing and Billing" class="component__link default " > Pricing and Billing </a> </div> <div class="component component--link-button "> <a href="https://developer.atlassian.com/" data-event="clicked" data-uuid="a77e284c-f5" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Developer support" data-label-english="Developer support" class="component__link default " > Developer support </a> </div> <div class="component component--link-button "> <a href="/licensing/purchase-licensing" data-event="clicked" data-uuid="7e4bcf50-d5" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Purchasing &amp; Licensing" data-label-english="Purchasing & Licensing" class="component__link default " > Purchasing &amp; Licensing </a> </div> </div> <div class="component s0 between component--block col-1" > <div class="component component--heading"> <h5 class="fnt-wt font-wt-600 fnt-mg font-mgn-16 fnt-ln font-lnh-13 heading" > learn </h5> </div> <div class="component component--link-button "> <a href="/project-management" data-event="clicked" data-uuid="37e63de2-8b" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Project Management" data-label-english="Project Management" class="component__link default " > Project Management </a> </div> <div class="component component--link-button "> <a href="/agile" data-event="clicked" data-uuid="cd88fac0-34" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Agile" data-label-english="Agile" class="component__link default " > Agile </a> </div> <div class="component component--link-button "> <a href="/community" data-event="clicked" data-uuid="777bf608-da" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Community" data-label-english="Community" class="component__link default " > Community </a> </div> <div class="component component--link-button "> <a href="/get-started" data-event="clicked" data-uuid="46448b23-df" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Get Started" data-label-english="Get Started" class="component__link default " > Get Started </a> </div> </div> <div class="component s0 between component--block col-1" > <div class="component component--heading"> <div class="fnt-wt font-wt-600 fnt-mg font-mgn-16 fnt-ln font-lnh-13 h5 heading" > </div> </div> <div class="component component--link-button "> <a href="/work-management/project-collaboration" data-event="clicked" data-uuid="121af982-23" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Project Collaboration" data-label-english="Project Collaboration" class="component__link default " > Project Collaboration </a> </div> <div class="component component--link-button "> <a href="/team-playbook" data-event="clicked" data-uuid="be1af204-2b" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Team Playbook" data-label-english="Team Playbook" class="component__link default " > Team Playbook </a> </div> <div class="component component--link-button "> <a href="https://confluence.atlassian.com/display/ALLDOC/Atlassian+Documentation" data-event="clicked" data-uuid="f088bee8-17" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Product Documentation" data-label-english="Product Documentation" class="component__link default " > Product Documentation </a> </div> </div> </div> </div> </div> </div></div> <button class="mobile-back-button"> <svg width="16" height="15" viewBox="0 0 16 15" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M7.77087 14.5334C7.87109 14.4335 7.9506 14.3148 8.00485 14.1841C8.0591 14.0535 8.08702 13.9134 8.08702 13.772C8.08702 13.6306 8.0591 13.4905 8.00485 13.3599C7.9506 13.2292 7.87109 13.1105 7.77087 13.0106L3.68091 8.92576L14.0174 8.92576C14.3034 8.92576 14.5777 8.8123 14.7799 8.61033C14.9821 8.40837 15.0957 8.13444 15.0957 7.84882C15.0957 7.5632 14.9821 7.28927 14.7799 7.08731C14.5777 6.88534 14.3034 6.77188 14.0174 6.77188L3.68091 6.77188L7.77087 2.68705C7.87109 2.58712 7.9506 2.46843 8.00485 2.33778C8.0591 2.20714 8.08702 2.06709 8.08702 1.92565C8.08702 1.78421 8.0591 1.64416 8.00485 1.51351C7.9506 1.38286 7.87109 1.26418 7.77087 1.16425C7.35033 0.744243 6.6667 0.744243 6.24508 1.16425L0.315557 7.08742C0.120278 7.28171 0.00717735 7.54348 -0.00038147 7.81867V7.88005C0.00734234 8.15489 0.120439 8.41626 0.315557 8.61022L6.24508 14.5334C6.34523 14.6335 6.46415 14.713 6.59505 14.7672C6.72596 14.8213 6.86627 14.8492 7.00798 14.8492C7.14968 14.8492 7.28999 14.8213 7.4209 14.7672C7.5518 14.713 7.67072 14.6335 7.77087 14.5334Z" fill="#1868DB"/> </svg> Back </button> </div> </li> <li id="adg4-nav-link-enterprise" class="nav-link globalNav single adg4-nav-link-enterprise"> <a class="nav-link-button main current-page-false" data-navlinkid="nav-link-c13c1778-a877-4684-b860-ceb576c29507" href="/enterprise" data-event="clicked" data-uuid="c13c1778-a8-link" data-event-component="linkButton" data-event-container="globalNav-navigation-link" data-schema-version="1" > Enterprise </a> </li> <li class="menu-spacer"></li> <li class="more-less menu-more globalNav"><button class="lessmore button-menu-more" data-event="clicked" data-uuid="0703b6c2-3e-more" data-event-component="linkButton" data-event-container="globalNav-more" data-schema-version="1" >More +</button></li> <li class="more-less menu-less globalNav"><button class="lessmore button-menu-less" data-event="clicked" data-uuid="0703b6c2-3e-less" data-event-component="linkButton" data-event-container="globalNav-less" data-schema-version="1" >Less -</button></li> </ul> <ul class="search-profile"> <li class="cta-desktop" id="cta-desktop-dropdown-button"> <button class="cta button--one button--regular button--primary" id="try-now-dropdown-cta-desktop" data-dropdownId="try-now-cta-link-desktop-dropdown" data-event="clicked" data-uuid="0703b6c2-3e-linik" data-event-component="linkButton" data-event-container="globalNav-cta-desktop" data-schema-version="1" data-label-english="Get it free" > Get it free <svg class="desktop" width="11" height="6" viewBox="0 0 11 6" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M9.19995 1.18182L5.19995 4.81818L1.19995 1.18182" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </button> <div class="cta-dropdown-content" id="try-now-cta-link-desktop-dropdown"> <div class="dropdown-content-inner"> <div class="dropdown-content-loader"> <div class="atlas-style-simple-loader-medium"></div> </div> <div class="dropdown-content-panel"> <div class="component s0 between component--block product-link-block"> <a href="/try/cloud/signup?bundle=jira-software&amp;edition=free" id="highlightItem1__link" class="component--block__link" data-event="clicked" data-uuid="0703b6c2-3e-cta-desktop-product-link1" data-event-component="linkButton" data-event-container="globalNav-cta-desktop-product-link" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="highlightItem1__img" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Jira.svg" loading="auto"> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" id="highlightItem1__product--title" > Jira </h3> <p id="highlightItem1__product--subText"> Flexible project management </p> </div> </div> </a> </div> <div class="component s0 between component--block product-link-block"> <a href="/software/jira/service-management/free" id="highlightItem2__link" class="component--block__link" data-event="clicked" data-uuid="0703b6c2-3e-cta-desktop-product-link2" data-event-component="linkButton" data-event-container="globalNav-cta-desktop-product-link" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="highlightItem2__img" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Jira-Service-Management.svg" loading="auto"> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" id="highlightItem2__product--title" > Jira Service Management </h3> <p id="highlightItem2__product--subText"> High-velocity service delivery </p> </div> </div> </a> </div> <div class="component s0 between component--block product-link-block"> <a href="/try/cloud/signup?bundle=confluence&amp;edition=free" id="highlightItem3__link" class="component--block__link" data-event="clicked" data-uuid="0703b6c2-3e-cta-desktop-product-link3" data-event-component="linkButton" data-event-container="globalNav-cta-desktop-product-link" data-schema-version="1" > <div class="component component--image-heading-textblock with-flex margin-default"> <div class="component__image component__image--left compact"> <img id="highlightItem3__img" alt="" class="component__image" style="width:44px;height:44px;" src="https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Confluence.svg" loading="auto"> </div> <div class="component__heading-textblock component__heading-textblock--right compact"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" id="highlightItem3__product--title" > Confluence </h3> <p id="highlightItem3__product--subText"> Knowledge, all in one place </p> </div> </div> </a> </div> <div class="link-in-dropdown"> <a class="easy-link-arrow" href="/try" data-event="clicked" data-uuid="0703b6c2-3e-cta-dropdown-content" data-event-component="linkButton" data-event-container="globalNav-cta-desktop-cta-dropdown-content" data-schema-version="1" > See all products </a> </div> </div> </div> </div> </li> <li class="cta-desktop" id="cta-desktop-default"> <a class="cta button--one button--regular button--primary" href="/try" data-event="clicked" data-uuid="0703b6c2-3e-linik" data-event-component="linkButton" data-event-container="globalNav-cta-desktop" data-schema-version="1" data-label-english="Get it free" >Get it free</a> </li> <li class="search-button"> <button class="search-open doNotAutoTrack"> <svg width="21" height="22" viewBox="0 0 21 22" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M15.8422 17.189L19.0001 20.3469" stroke="currentColor" stroke-width="2.75" stroke-linecap="round" /> <path d="M9.59182 17.7583C14.0392 17.7583 17.6444 14.1531 17.6444 9.70571C17.6444 5.25836 14.0392 1.65308 9.59182 1.65308C5.14447 1.65308 1.53918 5.25836 1.53918 9.70571C1.53918 14.1531 5.14447 17.7583 9.59182 17.7583Z" stroke="currentColor" stroke-width="2.25" /> </svg> </button> </li> <li class="adg4-nav-account-sign-in"></li> <li class="adg4-nav-account-my-products"></li> </ul> <div class="search-form"> <button class="mobile-back-button" data-event="clicked" data-uuid="0703b6c2-3e-mobile-back-button" data-event-component="linkButton" data-event-container="globalNav-mobile-back-button" data-schema-version="1" > <svg width="16" height="15" viewBox="0 0 16 15" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M7.77087 14.5334C7.87109 14.4335 7.9506 14.3148 8.00485 14.1841C8.0591 14.0535 8.08702 13.9134 8.08702 13.772C8.08702 13.6306 8.0591 13.4905 8.00485 13.3599C7.9506 13.2292 7.87109 13.1105 7.77087 13.0106L3.68091 8.92576L14.0174 8.92576C14.3034 8.92576 14.5777 8.8123 14.7799 8.61033C14.9821 8.40837 15.0957 8.13444 15.0957 7.84882C15.0957 7.5632 14.9821 7.28927 14.7799 7.08731C14.5777 6.88534 14.3034 6.77188 14.0174 6.77188L3.68091 6.77188L7.77087 2.68705C7.87109 2.58712 7.9506 2.46843 8.00485 2.33778C8.0591 2.20714 8.08702 2.06709 8.08702 1.92565C8.08702 1.78421 8.0591 1.64416 8.00485 1.51351C7.9506 1.38286 7.87109 1.26418 7.77087 1.16425C7.35033 0.744243 6.6667 0.744243 6.24508 1.16425L0.315557 7.08742C0.120278 7.28171 0.00717735 7.54348 -0.00038147 7.81867V7.88005C0.00734234 8.15489 0.120439 8.41626 0.315557 8.61022L6.24508 14.5334C6.34523 14.6335 6.46415 14.713 6.59505 14.7672C6.72596 14.8213 6.86627 14.8492 7.00798 14.8492C7.14968 14.8492 7.28999 14.8213 7.4209 14.7672C7.5518 14.713 7.67072 14.6335 7.77087 14.5334Z" fill="#1868DB"/> </svg> Back </button> <div class="input-container"> <input class="adg4-search-input" type="text" placeholder="Search Atlassian" /> <svg width="21" height="22" viewBox="0 0 21 22" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M15.8422 17.189L19.0001 20.3469" stroke="#101214" stroke-width="2.75" stroke-linecap="round" /> <path d="M9.59182 17.7583C14.0392 17.7583 17.6444 14.1531 17.6444 9.70571C17.6444 5.25836 14.0392 1.65308 9.59182 1.65308C5.14447 1.65308 1.53918 5.25836 1.53918 9.70571C1.53918 14.1531 5.14447 17.7583 9.59182 17.7583Z" stroke="#101214" stroke-width="2.25" /> </svg> </div> <div class="adg4-search-results"></div> <button class="search-close doNotAutoTrack" title="Close search"> <hr class="mid mid1" /> <hr class="mid mid2" /> </button> </div> </div> </div> <div class="cta-tablet"> <a class="cta button--one button--regular button--primary" href="/try" data-event="clicked" data-uuid="0703b6c2-3e-cta-tablet" data-event-component="linkButton" data-event-container="globalNav-cta-tablet" data-schema-version="1" data-label-english="Get it free" >Get it free</a> </div> <div id="adg4-app-switcher"></div> <script type="text/jsx-component"> { "type": "WacAppSwitcher", "domRootId": "adg4-app-switcher", "props": { "domRootId": "adg4-app-switcher", "wacAppSwitcherLabel": "", "allowWacJoinSitesProvider": true } } </script> <div class="adg4-nav-account-logged-in"></div> <div class="adg4-nav-account-info"></div> </div> </div> </div> <script type="text/x-component"> { "type":"imkt.components.ADG4GlobalNav", "params": { "navType":"globalNav", "labels": { "JoinSiteUserDropdown.logOut":"Log out", "JoinSiteUserDropdown.logIn":"Sign in", "JoinSiteUserDropdown.joinTeam":"Join your team", "JoinSiteUserDropdown.profile":"Profile", "JoinSiteUserDropdown.switchAccount":"Switch account", "JoinSiteUserDropdown.licenses":"Licenses", "JoinSiteUserDropdown.logOutHeading":"Log out", "JoinSiteUserDropdown.logOutTriggerText":"Log out" }, "ctaLabel":"Get it free", "isShowCTADropdown":"true", "jiraProduct": { "imgSource":"https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Jira.svg", "heading":"Jira", "subText":"Flexible project management", "href":"/try/cloud/signup?bundle=jira-software&amp;edition=free" }, "jiraServiceManagementProduct": { "imgSource":"https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Jira-Service-Management.svg", "heading":"Jira Service Management", "subText":"High-velocity service delivery", "href":"/software/jira/service-management/free" }, "confluenceProduct": { "imgSource":"https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Confluence.svg", "heading":"Confluence", "subText":"Knowledge, all in one place", "href":"/try/cloud/signup?bundle=confluence&amp;edition=free" }, "jiraProductDiscovery": { "imgSource":"https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Jira-Product-Discovery.svg", "heading":"Jira Product Discovery", "subText":"Capture & prioritize ideas", "href":"/try/cloud/signup?bundle=jira-product-discovery" }, "compassProduct": { "imgSource":"https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Compass.svg", "heading":"Compass", "subText":"Optimize software health", "href":"/try/cloud/signup?bundle=compass" } } } </script></nav> </header> <main> <nav class="adg4-global-nav subNav prod-view "> <div class="nav-space"> <div class="adg4-nav-inner"> <div class="overlay-style overlay-color"></div> <div class="overlay-style overlay-clickable"><button class="close-all"></button></div> <a href="/devops" class="header-link" data-event="clicked" data-uuid="be85c9d2-f9-logo-link" data-event-component="linkButton" data-event-container="globalNavWac-ADG4" data-schema-version="1" > <span>DevOps</span> </a> <button class="mobile-toggle" title="Mobile menu"> <svg width="18" height="11" viewBox="0 0 18 11" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M17 1.86328L9 9.13601L1 1.86328" stroke="#101214" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> </button> <div class="menu-right"> <div class="menu-popout"> <div class="inter-popout-container"> <ul class="nav-links"> <li class="outline-element"></li> <li id="adg4-nav-link-solution" class="nav-link subNav single adg4-nav-link-solution"> <a class="nav-link-button main current-page-false" data-navlinkid="nav-link-2463f44e-74d1-4818-9da5-19967fe6b716" href="/solutions/devops" data-event="clicked" data-uuid="2463f44e-74-link" data-event-component="linkButton" data-event-container="globalNav-navigation-link" data-schema-version="1" > Solution </a> </li> <li id="adg4-nav-link-features" class="nav-link subNav single adg4-nav-link-features"> <a class="nav-link-button main current-page-false" data-navlinkid="nav-link-50992070-3fa5-4c38-b953-576e34b5dd18" href="/solutions/devops/features" data-event="clicked" data-uuid="50992070-3f-link" data-event-component="linkButton" data-event-container="globalNav-navigation-link" data-schema-version="1" > Features </a> </li> <li id="adg4-nav-link-integrations" class="nav-link subNav single adg4-nav-link-integrations"> <a class="nav-link-button main current-page-false" data-navlinkid="nav-link-dd6df5dc-5143-49ff-9828-5642f2259008" href="/solutions/devops/integrations" data-event="clicked" data-uuid="dd6df5dc-51-link" data-event-component="linkButton" data-event-container="globalNav-navigation-link" data-schema-version="1" > Integrations </a> </li> <li id="adg4-nav-link-best-practices" class="nav-link subNav single adg4-nav-link-best-practices"> <a class="nav-link-button main current-page-false" data-navlinkid="nav-link-5bbe60dc-27be-45a3-9fe3-22bbec914796" href="/solutions/devops/best-practices" data-event="clicked" data-uuid="5bbe60dc-27-link" data-event-component="linkButton" data-event-container="globalNav-navigation-link" data-schema-version="1" > Best practices </a> </li> <li class="menu-spacer"></li> <li class="more-less menu-more subNav"><button class="lessmore button-menu-more" data-event="clicked" data-uuid="be85c9d2-f9-more" data-event-component="linkButton" data-event-container="globalNav-more" data-schema-version="1" >More +</button></li> <li class="more-less menu-less subNav"><button class="lessmore button-menu-less" data-event="clicked" data-uuid="be85c9d2-f9-less" data-event-component="linkButton" data-event-container="globalNav-less" data-schema-version="1" >Less -</button></li> </ul> </div> </div> </div> </div> </div> <script type="text/x-component"> { "type":"imkt.components.ADG4GlobalNav", "params": { "navType":"subNav", "labels": { "JoinSiteUserDropdown.logOut":"Log out", "JoinSiteUserDropdown.logIn":"Sign in", "JoinSiteUserDropdown.joinTeam":"Join your team", "JoinSiteUserDropdown.profile":"Profile", "JoinSiteUserDropdown.switchAccount":"Switch account", "JoinSiteUserDropdown.licenses":"Licenses", "JoinSiteUserDropdown.logOutHeading":"Log out", "JoinSiteUserDropdown.logOutTriggerText":"Log out" }, "ctaLabel":"Get it free", "isShowCTADropdown":"false", "jiraProduct": { "imgSource":"https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Jira.svg", "heading":"Jira", "subText":"Flexible project management", "href":"/wac/try/cloud/signup?bundle=jira-software&edition=free" }, "jiraServiceManagementProduct": { "imgSource":"https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Jira-Service-Management.svg", "heading":"Jira Service Management", "subText":"High-velocity service delivery", "href":"/wac/software/jira/service-management/free" }, "confluenceProduct": { "imgSource":"https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Confluence.svg", "heading":"Confluence", "subText":"Knowledge, all in one place", "href":"/wac/try/cloud/signup?bundle=confluence&edition=free" }, "jiraProductDiscovery": { "imgSource":"https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Jira-Product-Discovery.svg", "heading":"Jira Product Discovery", "subText":"Capture & prioritize ideas", "href":"/wac/try/cloud/signup?bundle=jira-product-discovery" }, "compassProduct": { "imgSource":"https://wac-cdn.atlassian.com/misc-assets/adg4-nav/prod-icon-Compass.svg", "heading":"Compass", "subText":"Optimize software health", "href":"/wac/try/cloud/signup?bundle=compass" } } } </script></nav> <div class="container-fluid lg-comfortable-top md-comfortable-bottom xs-cozy"> <div class="row"> <div class="outer-microsite-column column column-md-3 column-lg-offset-1"> <div class="component component--microsite-nav mobile-reveal "> <div class="inner-component "> <div class="side-links"> <h4>Articles</h4> <div class=" microsite-nav-link "> <a href="/devops/what-is-devops" data-event="clicked" data-uuid="6df4f4ce-26-8062a5a6-be64-47cb-b791-e0cede411e85" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="is-nested-microsite-nav microsite-nav-child-link has-children level1"> <div class="microsite-nav-indicator"></div> DevOps principles </a> <div class="nested-links l1"> <div class="mobile-header-link"> <div class="microsite-nav-indicator"></div> Back </div> <div class="microsite-nav-link main-parent"> <a href="/devops/what-is-devops" data-event="clicked" data-uuid="6df4f4ce-26-8062a5a6-be64-47cb-b791-e0cede411e85-child" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="microsite-nav-child-link level1"> Overview </a> </div> <div class=" microsite-nav-link "> <a href="/devops/what-is-devops/history-of-devops" data-event="clicked" data-uuid="6df4f4ce-26-3253ec38-1c2f-44d2-9db3-9f635e6eee30" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> History of DevOps </a> </div> <div class=" microsite-nav-link "> <a href="/devops/what-is-devops/benefits-of-devops" data-event="clicked" data-uuid="6df4f4ce-26-73676b86-7521-407a-b77c-f41fb7e4d796" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Benefits of DevOps </a> </div> <div class=" microsite-nav-link "> <a href="/devops/what-is-devops/devops-culture" data-event="clicked" data-uuid="6df4f4ce-26-4813b7aa-29ab-4f9a-8328-a90a1fe26ed6" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> DevOps culture </a> </div> <div class=" microsite-nav-link "> <a href="/devops/what-is-devops/devops-best-practices" data-event="clicked" data-uuid="6df4f4ce-26-f8a83096-fb94-4cb5-8157-9c6a96533324" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> DevOps best practices </a> </div> <div class=" microsite-nav-link "> <a href="/devops/what-is-devops/agile-vs-devops" data-event="clicked" data-uuid="6df4f4ce-26-1459ae10-a9ab-4567-af76-da18a4a262bc" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> DevOps vs. Agile </a> </div> <div class=" microsite-nav-link "> <a href="/devops/what-is-devops/devops-engineer" data-event="clicked" data-uuid="6df4f4ce-26-67dcbce1-1d18-4d5a-ae29-4e313bcb57b2" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> DevOps engineer </a> </div> <div class=" microsite-nav-link "> <a href="/devops/what-is-devops/always-on-services" data-event="clicked" data-uuid="6df4f4ce-26-eeb9eccd-d8ca-46cf-ab69-12f379d8f108" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> YBIYRI: Challenges and Best Practices </a> </div> <div class=" microsite-nav-link "> <a href="/devops/what-is-devops/how-to-start-devops" data-event="clicked" data-uuid="6df4f4ce-26-0b2354be-b68a-4732-a813-aea544199f8a" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> How to do DevOps </a> </div> <div class=" microsite-nav-link "> <a href="/devops/what-is-devops/operational-readiness" data-event="clicked" data-uuid="6df4f4ce-26-2ea09bac-77d0-4ddc-9559-a694d9ce62e3" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> How Atlassian does operational readiness </a> </div> </div> </div> <div class=" microsite-nav-link "> <a href="/devops/frameworks" data-event="clicked" data-uuid="6df4f4ce-26-2e50ce36-2db7-4c8b-af36-8a67fec3df1c" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="is-nested-microsite-nav microsite-nav-child-link has-children level1"> <div class="microsite-nav-indicator"></div> DevOps frameworks </a> <div class="nested-links l1"> <div class="mobile-header-link"> <div class="microsite-nav-indicator"></div> Back </div> <div class="microsite-nav-link main-parent"> <a href="/devops/frameworks" data-event="clicked" data-uuid="6df4f4ce-26-2e50ce36-2db7-4c8b-af36-8a67fec3df1c-child" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="microsite-nav-child-link level1"> Overview </a> </div> <div class=" microsite-nav-link "> <a href="/devops/frameworks/calms-framework" data-event="clicked" data-uuid="6df4f4ce-26-c60e64b4-4997-46f3-bd6a-7e93e69bbe1b" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> CALMS framework </a> </div> <div class=" microsite-nav-link "> <a href="/devops/frameworks/team-topologies" data-event="clicked" data-uuid="6df4f4ce-26-4a66ceb4-f912-4137-92fa-02a7ea819ab1" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Team topologies </a> </div> <div class=" microsite-nav-link "> <a href="/devops/frameworks/team-structure" data-event="clicked" data-uuid="6df4f4ce-26-8b7e106b-50a7-4c3a-9ccf-7ab4e5599d37" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Team structure </a> </div> <div class=" microsite-nav-link "> <a href="/devops/frameworks/devops-metrics" data-event="clicked" data-uuid="6df4f4ce-26-215f1cc2-2624-47e4-bef5-fcd91233ddc3" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> DevOps metrics </a> </div> <div class=" microsite-nav-link "> <a href="/devops/frameworks/dora-metrics" data-event="clicked" data-uuid="6df4f4ce-26-ef67123a-4f72-4894-b14f-86e82f383c4e" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> DORA metrics </a> </div> <div class=" microsite-nav-link "> <a href="/devops/frameworks/private-cloud" data-event="clicked" data-uuid="6df4f4ce-26-71324dec-7e6a-4dcb-8cdd-457e70a35226" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Private cloud </a> </div> <div class=" microsite-nav-link "> <a href="/devops/frameworks/public-cloud" data-event="clicked" data-uuid="6df4f4ce-26-a2b388c9-ed96-4fe2-8183-895a3299f0b5" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Public cloud </a> </div> <div class=" microsite-nav-link "> <a href="/devops/frameworks/deployment-automation" data-event="clicked" data-uuid="6df4f4ce-26-e706cfac-6503-4ef4-94f4-8acc88a13d8e" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Deployment automation </a> </div> <div class=" microsite-nav-link "> <a href="/devops/frameworks/sre-vs-devops" data-event="clicked" data-uuid="6df4f4ce-26-56664afc-3850-4fde-b3f5-543d9860d63e" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> SRE vs DevOps </a> </div> </div> </div> <div class=" microsite-nav-link "> <a href="/devops/devops-tools" data-event="clicked" data-uuid="6df4f4ce-26-a95c4e02-4b3b-47ba-bcda-a8ffdee10f69" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="is-nested-microsite-nav microsite-nav-child-link has-children level1"> <div class="microsite-nav-indicator"></div> DevOps tools </a> <div class="nested-links l1"> <div class="mobile-header-link"> <div class="microsite-nav-indicator"></div> Back </div> <div class="microsite-nav-link main-parent"> <a href="/devops/devops-tools" data-event="clicked" data-uuid="6df4f4ce-26-a95c4e02-4b3b-47ba-bcda-a8ffdee10f69-child" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="microsite-nav-child-link level1"> Overview </a> </div> <div class=" microsite-nav-link "> <a href="/devops/devops-tools/choose-devops-tools" data-event="clicked" data-uuid="6df4f4ce-26-a6b0a56e-3f68-4294-bdeb-0d4a99d6d5a6" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> DevOps Toolchain: Key Considerations | Atlassian </a> </div> <div class=" microsite-nav-link "> <a href="/devops/devops-tools/devops-monitoring" data-event="clicked" data-uuid="6df4f4ce-26-b6fbf1c4-51da-4a58-9d49-c275b8288f61" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> DevOps monitoring </a> </div> <div class=" microsite-nav-link "> <a href="/devops/devops-tools/devops-pipeline" data-event="clicked" data-uuid="6df4f4ce-26-561bbe8c-4a23-419b-8e85-e16ea4d2482c" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> DevOps pipeline </a> </div> <div class=" microsite-nav-link "> <a href="/devops/devops-tools/devsecops-tools" data-event="clicked" data-uuid="6df4f4ce-26-b5a6e5db-994c-4899-aabd-f21fa8a499fe" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> DevSecOps tools </a> </div> <div class=" microsite-nav-link "> <a href="/devops/devops-tools/test-automation" data-event="clicked" data-uuid="6df4f4ce-26-bc02e423-a54c-49fc-babc-5fce23c9828f" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Test automation </a> </div> <div class=" microsite-nav-link "> <a href="/devops/devops-tools/cicd-tools" data-event="clicked" data-uuid="6df4f4ce-26-66729d15-bfa9-4d8a-b6aa-e77ba7deca4d" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> CI/CD tools </a> </div> </div> </div> <h4>Tutorials</h4> <div class=" microsite-nav-link "> <a href="/devops/automation-tutorials" data-event="clicked" data-uuid="6df4f4ce-26-9d6c1199-14e8-4947-994c-b4bf7522b5d3" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="is-nested-microsite-nav microsite-nav-child-link has-children level1"> <div class="microsite-nav-indicator"></div> Automation </a> <div class="nested-links l1"> <div class="mobile-header-link"> <div class="microsite-nav-indicator"></div> Back </div> <div class="microsite-nav-link main-parent"> <a href="/devops/automation-tutorials" data-event="clicked" data-uuid="6df4f4ce-26-9d6c1199-14e8-4947-994c-b4bf7522b5d3-child" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="microsite-nav-child-link level1"> Overview </a> </div> <div class=" microsite-nav-link "> <a href="/devops/automation-tutorials/jira-automation-rule-on-pullrequest-merge" data-event="clicked" data-uuid="6df4f4ce-26-e16717cc-4713-434d-a62a-d022d2a391fe" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Rule on pullrequest merge </a> </div> <div class=" microsite-nav-link "> <a href="/devops/automation-tutorials/jira-automation-rule-to-transition-issues" data-event="clicked" data-uuid="6df4f4ce-26-9c213eb3-bdba-42fa-998e-994ca8d9be95" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Rule to transition issues </a> </div> <div class=" microsite-nav-link "> <a href="/devops/automation-tutorials/jira-automation-rule-create-update-close-statuspage" data-event="clicked" data-uuid="6df4f4ce-26-65405714-c635-446f-924f-932addb127c9" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Rules that automatically sync Statuspage </a> </div> <div class=" microsite-nav-link "> <a href="/devops/automation-tutorials/jira-automation-rule-pullrequest-approval" data-event="clicked" data-uuid="6df4f4ce-26-b91acb3d-5fc7-4fae-88ed-c427e09fe7c5" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Rule on pullrequest approval </a> </div> </div> </div> <div class=" microsite-nav-link "> <a href="/devops/testing-tutorials" data-event="clicked" data-uuid="6df4f4ce-26-0f260082-95a7-46a7-b4bf-d8e1f58e3ef5" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="is-nested-microsite-nav microsite-nav-child-link has-children level1"> <div class="microsite-nav-indicator"></div> Testing </a> <div class="nested-links l1"> <div class="mobile-header-link"> <div class="microsite-nav-indicator"></div> Back </div> <div class="microsite-nav-link main-parent"> <a href="/devops/testing-tutorials" data-event="clicked" data-uuid="6df4f4ce-26-0f260082-95a7-46a7-b4bf-d8e1f58e3ef5-child" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="microsite-nav-child-link level1"> Overview </a> </div> <div class=" microsite-nav-link "> <a href="/devops/testing-tutorials/jira-xray-integration-trigger-automated-tests" data-event="clicked" data-uuid="6df4f4ce-26-606eb33f-8c3a-417f-8346-b3a610c9f1b1" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Automated tests in Jira with Xray </a> </div> <div class=" microsite-nav-link "> <a href="/devops/testing-tutorials/jira-xray-integration-manage-test-cases" data-event="clicked" data-uuid="6df4f4ce-26-a7a95938-8114-433e-b640-47886446ec1e" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Create and manage test cases with Xray and Jira </a> </div> <div class=" microsite-nav-link "> <a href="/devops/testing-tutorials/jira-mabl-automated-test" data-event="clicked" data-uuid="6df4f4ce-26-0902df00-fa6f-4908-a971-5add7221ccaa" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Create a Jira issue from an automated mabl test </a> </div> <div class=" microsite-nav-link "> <a href="/devops/testing-tutorials/jira-zephyr-scale-testing" data-event="clicked" data-uuid="6df4f4ce-26-bab775a6-8e01-498c-9bd0-304610a3a0eb" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Track your team’s progress in Jira and Zephyr </a> </div> </div> </div> <div class=" microsite-nav-link "> <a href="/devops/security-tutorials" data-event="clicked" data-uuid="6df4f4ce-26-a77a6736-f3cd-4689-a678-6a06c1244b28" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="is-nested-microsite-nav microsite-nav-child-link has-children level1"> <div class="microsite-nav-indicator"></div> Security </a> <div class="nested-links l1"> <div class="mobile-header-link"> <div class="microsite-nav-indicator"></div> Back </div> <div class="microsite-nav-link main-parent"> <a href="/devops/security-tutorials" data-event="clicked" data-uuid="6df4f4ce-26-a77a6736-f3cd-4689-a678-6a06c1244b28-child" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="microsite-nav-child-link level1"> Overview </a> </div> <div class=" microsite-nav-link "> <a href="/devops/security-tutorials/jira-snyk-devsecops" data-event="clicked" data-uuid="6df4f4ce-26-d8cadb5d-733f-47c0-89db-5a41b28f86de" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> How Snyk and Bitbucket Cloud enable DevSecOps </a> </div> <div class=" microsite-nav-link "> <a href="/devops/security-tutorials/bitbucket-pipelines-snyk" data-event="clicked" data-uuid="6df4f4ce-26-5ee15a7b-f27b-4157-aa07-bb54ef33de22" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Achieve DevSecOps with Bitbucket Pipelines and Snyk Pipe </a> </div> </div> </div> <div class=" microsite-nav-link "> <a href="/devops/observability-tutorials" data-event="clicked" data-uuid="6df4f4ce-26-bbd42f00-fab5-4936-8537-817f3f00633d" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="is-nested-microsite-nav microsite-nav-child-link has-children level1"> <div class="microsite-nav-indicator"></div> Observability </a> <div class="nested-links l1"> <div class="mobile-header-link"> <div class="microsite-nav-indicator"></div> Back </div> <div class="microsite-nav-link main-parent"> <a href="/devops/observability-tutorials" data-event="clicked" data-uuid="6df4f4ce-26-bbd42f00-fab5-4936-8537-817f3f00633d-child" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="microsite-nav-child-link level1"> Overview </a> </div> <div class=" microsite-nav-link "> <a href="/devops/observability-tutorials/jira-sentry-application-monitoring" data-event="clicked" data-uuid="6df4f4ce-26-8c921a64-c537-4eff-8976-12ac4805d692" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Jira and Sentry application monitoring </a> </div> <div class=" microsite-nav-link "> <a href="/devops/observability-tutorials/jira-dynatrace-integration" data-event="clicked" data-uuid="6df4f4ce-26-2aa43312-0eb1-4a2d-b940-97d5b77790e3" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Jira Dynatrace integration tutorial </a> </div> <div class=" microsite-nav-link "> <a href="/devops/observability-tutorials/jira-dynatrace-issue" data-event="clicked" data-uuid="6df4f4ce-26-022f7b40-390d-4eee-82a1-a77db864d746" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Jira Dynatrace issue tutorial </a> </div> <div class=" microsite-nav-link "> <a href="/devops/observability-tutorials/jira-datadog-integration" data-event="clicked" data-uuid="6df4f4ce-26-1c386222-efe3-4dbe-a392-aa088345167e" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Integrate Jira and Datadog </a> </div> </div> </div> <div class=" microsite-nav-link "> <a href="/devops/feature-flagging-tutorials" data-event="clicked" data-uuid="6df4f4ce-26-bad8942b-fb18-413e-86bb-d8978fd0268f" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="is-nested-microsite-nav microsite-nav-child-link has-children level1"> <div class="microsite-nav-indicator"></div> Feature Flagging </a> <div class="nested-links l1"> <div class="mobile-header-link"> <div class="microsite-nav-indicator"></div> Back </div> <div class="microsite-nav-link main-parent"> <a href="/devops/feature-flagging-tutorials" data-event="clicked" data-uuid="6df4f4ce-26-bad8942b-fb18-413e-86bb-d8978fd0268f-child" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="microsite-nav-child-link level1"> Overview </a> </div> <div class=" microsite-nav-link "> <a href="/devops/feature-flagging-tutorials/jira-launchdarkly-feature-flagging" data-event="clicked" data-uuid="6df4f4ce-26-cf6f8b04-2711-4c0c-9cb8-043c32e3c897" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> LaunchDarkly for Jira </a> </div> <div class=" microsite-nav-link "> <a href="/devops/feature-flagging-tutorials/jira-split-feature-flags" data-event="clicked" data-uuid="6df4f4ce-26-8ded890f-3640-4a89-8536-4cf3bd9d792f" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Split and Jira </a> </div> </div> </div> <div class=" microsite-nav-link "> <a href="/devops/continuous-delivery-tutorials" data-event="clicked" data-uuid="6df4f4ce-26-d3f3b781-3b05-4abd-a866-982601732ef5" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="is-nested-microsite-nav microsite-nav-child-link has-children level1"> <div class="microsite-nav-indicator"></div> Continuous Delivery </a> <div class="nested-links l1"> <div class="mobile-header-link"> <div class="microsite-nav-indicator"></div> Back </div> <div class="microsite-nav-link main-parent"> <a href="/devops/continuous-delivery-tutorials" data-event="clicked" data-uuid="6df4f4ce-26-d3f3b781-3b05-4abd-a866-982601732ef5-child" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="microsite-nav-child-link level1"> Overview </a> </div> <div class=" microsite-nav-link "> <a href="/devops/continuous-delivery-tutorials/jira-jfrog-pipelines" data-event="clicked" data-uuid="6df4f4ce-26-dfab1aab-5647-4da9-ba92-e26c4ea204f9" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> JFrog and Jira </a> </div> <div class=" microsite-nav-link "> <a href="/devops/continuous-delivery-tutorials/jira-harness-integration" data-event="clicked" data-uuid="6df4f4ce-26-8fe5e547-d886-4b72-b7e6-cbd40ceaafa7" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Harness Jira Integration Tutorial </a> </div> <div class=" microsite-nav-link "> <a href="/devops/continuous-delivery-tutorials/jira-gitlab-deployments" data-event="clicked" data-uuid="6df4f4ce-26-2f20ada9-35be-4be0-b050-c95113dcb1fd" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Enable GitLab deployments in Jira </a> </div> <div class=" microsite-nav-link "> <a href="/devops/continuous-delivery-tutorials/continuous-integration-tutorial" data-event="clicked" data-uuid="6df4f4ce-26-4655da26-5daf-4dd4-8d99-61a1cdef96a8" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Continuous Integration Tutorial </a> </div> <div class=" microsite-nav-link "> <a href="/devops/continuous-delivery-tutorials/continuous-delivery-bitbucket-pipelines" data-event="clicked" data-uuid="6df4f4ce-26-116a407a-6ff7-4285-87ce-7097e6ae585a" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Continuous Delivery Tutorial </a> </div> <div class=" microsite-nav-link "> <a href="/devops/continuous-delivery-tutorials/continuous-deployment-tutorial" data-event="clicked" data-uuid="6df4f4ce-26-db609a47-a6b0-463d-a821-6b98c0f62df0" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Continuous Deployment Tutorial </a> </div> <div class=" microsite-nav-link "> <a href="/devops/continuous-delivery-tutorials/scripting-tasks-bitbucket-pipelines" data-event="clicked" data-uuid="6df4f4ce-26-8aee5d37-9bdc-4edd-908f-a69aa1b3959e" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Tips for scripting tasks with Bitbucket Pipelines </a> </div> <div class=" microsite-nav-link "> <a href="/devops/continuous-delivery-tutorials/integration-testing-tutorial-with-bitbucket-pipelines" data-event="clicked" data-uuid="6df4f4ce-26-02b10db3-6cfe-4318-b326-f34741fa92e4" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Integration Testing Tutorial </a> </div> </div> </div> <h4>Interactive Guides</h4> <div class=" microsite-nav-link "> <a href="/devops/imagelabeller-intro" data-event="clicked" data-uuid="6df4f4ce-26-01f5d8d3-f7fc-4800-abff-20d86f07b87f" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="is-nested-microsite-nav microsite-nav-child-link has-children level1"> <div class="microsite-nav-indicator"></div> Demo Atlassian Open DevOps </a> <div class="nested-links l1"> <div class="mobile-header-link"> <div class="microsite-nav-indicator"></div> Back </div> <div class="microsite-nav-link main-parent"> <a href="/devops/imagelabeller-intro" data-event="clicked" data-uuid="6df4f4ce-26-01f5d8d3-f7fc-4800-abff-20d86f07b87f-child" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="microsite-nav-child-link level1"> Overview </a> </div> <div class=" microsite-nav-link "> <a href="/devops/imagelabeller-intro/use-guide" data-event="clicked" data-uuid="6df4f4ce-26-6ff0111b-c22a-4eae-9800-89f3456b98ba" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Atlassian ImageLabeller </a> </div> <div class=" microsite-nav-link "> <a href="/devops/imagelabeller-intro/jira-cicd-integration" data-event="clicked" data-uuid="6df4f4ce-26-cbdbeb04-59f9-4e56-85dd-2e5767811f4c" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Jira integration with CI/CD </a> </div> <div class=" microsite-nav-link "> <a href="/devops/imagelabeller-intro/sage-maker" data-event="clicked" data-uuid="6df4f4ce-26-f24a49c1-efcc-4d76-93eb-7d74d6af5ceb" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Setup the AWS SageMaker pre-trained model </a> </div> </div> </div> <div class=" microsite-nav-link revealed parent-active"> <a href="/devops/deploy-imagelabeller" data-event="clicked" data-uuid="6df4f4ce-26-868b9ec1-8c1a-42a7-85dc-21b076a66746" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="is-nested-microsite-nav microsite-nav-child-link has-children level1"> <div class="microsite-nav-indicator"></div> Deploy ImageLabeller </a> <div class="nested-links l1"> <div class="mobile-header-link"> <div class="microsite-nav-indicator"></div> Back </div> <div class="microsite-nav-link main-parent"> <a href="/devops/deploy-imagelabeller" data-event="clicked" data-uuid="6df4f4ce-26-868b9ec1-8c1a-42a7-85dc-21b076a66746-child" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="microsite-nav-child-link level1"> Overview </a> </div> <div class=" microsite-nav-link "> <a href="/devops/deploy-imagelabeller/bitbucket" data-event="clicked" data-uuid="6df4f4ce-26-1649e18d-7867-46f2-b849-a61784a4c19b" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Deploy ImageLabeller with Bitbucket </a> </div> <div class=" microsite-nav-link "> <a href="/devops/deploy-imagelabeller/github" data-event="clicked" data-uuid="6df4f4ce-26-e7b8d437-49d0-480c-b4cb-376f0e1b53e2" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Deploy ImageLabeller with GitHub </a> </div> <div class=" microsite-nav-link revealed active "> <a href="/devops/deploy-imagelabeller/gitlab" data-event="clicked" data-uuid="6df4f4ce-26-36f16475-5c80-48c1-bdae-1a23132c6f54" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Deploy ImageLabeller with GitLab </a> </div> </div> </div> <div class=" microsite-nav-link "> <a href="/devops/monitor-imagelabeller" data-event="clicked" data-uuid="6df4f4ce-26-0dda0e5c-d484-490d-8da3-5c8c04bc0234" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="is-nested-microsite-nav microsite-nav-child-link has-children level1"> <div class="microsite-nav-indicator"></div> Monitor ImageLabeller </a> <div class="nested-links l1"> <div class="mobile-header-link"> <div class="microsite-nav-indicator"></div> Back </div> <div class="microsite-nav-link main-parent"> <a href="/devops/monitor-imagelabeller" data-event="clicked" data-uuid="6df4f4ce-26-0dda0e5c-d484-490d-8da3-5c8c04bc0234-child" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="microsite-nav-child-link level1"> Overview </a> </div> <div class=" microsite-nav-link "> <a href="/devops/monitor-imagelabeller/monitor-with-opsgenie" data-event="clicked" data-uuid="6df4f4ce-26-ae53195d-7c9b-480f-8974-d7c03a844110" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Monitor with Opsgenie </a> </div> <div class=" microsite-nav-link "> <a href="/devops/monitor-imagelabeller/deploy-aws-cloudwatch-alarms-with-bitbucket" data-event="clicked" data-uuid="6df4f4ce-26-8f25bc26-cf3a-4a79-a216-0a8be5bac536" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Deploy AWS CloudWatch alarms with Bitbucket </a> </div> <div class=" microsite-nav-link "> <a href="/devops/monitor-imagelabeller/deploy-aws-cloudwatch-alarms-github" data-event="clicked" data-uuid="6df4f4ce-26-32a3f2d9-c492-4a70-b4c3-68b4758529b6" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Deploy AWS CloudWatch alarms with GitHub </a> </div> <div class=" microsite-nav-link "> <a href="/devops/monitor-imagelabeller/deploy-aws-cloudwatch-alarms-gitlab" data-event="clicked" data-uuid="6df4f4ce-26-d9e24739-80cc-4715-b267-e09fb6bd6bea" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Deploy AWS CloudWatch alarms with GitLab </a> </div> </div> </div> <div class=" microsite-nav-link "> <a href="/devops/integrations-guides" data-event="clicked" data-uuid="6df4f4ce-26-1e7d590c-66f0-467d-960e-ca0cf6ee8ddb" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="is-nested-microsite-nav microsite-nav-child-link has-children level1"> <div class="microsite-nav-indicator"></div> Third-party integrations </a> <div class="nested-links l1"> <div class="mobile-header-link"> <div class="microsite-nav-indicator"></div> Back </div> <div class="microsite-nav-link main-parent"> <a href="/devops/integrations-guides" data-event="clicked" data-uuid="6df4f4ce-26-1e7d590c-66f0-467d-960e-ca0cf6ee8ddb-child" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="microsite-nav-child-link level1"> Overview </a> </div> <div class=" microsite-nav-link "> <a href="/devops/integrations-guides/snyk" data-event="clicked" data-uuid="6df4f4ce-26-69879dd0-3662-46f6-a913-4be37600ac01" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Integrate Snyk into Atlassian Open DevOps </a> </div> <div class=" microsite-nav-link "> <a href="/devops/integrations-guides/launch-darkly-bitbucket" data-event="clicked" data-uuid="6df4f4ce-26-8fe31d73-b0bd-4622-91cb-20f11dd4c6b9" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Using Launch Darkly feature flags with Bitbucket pipelines </a> </div> <div class=" microsite-nav-link "> <a href="/devops/integrations-guides/split-feature-flags-bitbucket" data-event="clicked" data-uuid="6df4f4ce-26-e47e6a33-3f50-4cf0-bcef-75719db927d4" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Using Split feature flags with Bitbucket pipelines </a> </div> </div> </div> <div class=" microsite-nav-link "> <a href="/devops/build-with-apis" data-event="clicked" data-uuid="6df4f4ce-26-a796480d-3e9e-4919-8b9d-3c829206c766" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="is-nested-microsite-nav microsite-nav-child-link has-children level1"> <div class="microsite-nav-indicator"></div> Building with Atlassian APIs </a> <div class="nested-links l1"> <div class="mobile-header-link"> <div class="microsite-nav-indicator"></div> Back </div> <div class="microsite-nav-link main-parent"> <a href="/devops/build-with-apis" data-event="clicked" data-uuid="6df4f4ce-26-a796480d-3e9e-4919-8b9d-3c829206c766-child" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class="microsite-nav-child-link level1"> Overview </a> </div> <div class=" microsite-nav-link "> <a href="/devops/build-with-apis/concourse-ci" data-event="clicked" data-uuid="6df4f4ce-26-defda6f9-8b8a-476e-836c-c690937dceb1" data-event-component="linkButton" data-event-container="micrositeNav" data-schema-version="1" class=" microsite-nav-child-link level2"> Integrating Concourse-CI and Open DevOps </a> </div> </div> </div> </div> </div> <script type="text/x-component"> { "type":"imkt.components.MicrositeNav", "params": { "stickyPosition":"100" } } </script> </div> </div> <div class="column column-lg-7 column-md-9 no-flex" > <div class="container-fluid xs-none"> <div class="row"> <div class="column xs-none-top vertical-top s0 between" > <div class="component component--heading"> <h1 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Deploy ImageLabeller with GitLab </h1> </div> <div class="component component--image-heading-textblock" id="author"> <div class="component__image component__image--left"> <img id="c2b6c09b" alt="Warren Marusiak headshot" class="component__image" style="width:48px;" src="https://wac-cdn.atlassian.com/dam/jcr:7509aefb-43e8-401d-90fe-0850cbe6bb13/wmarusiak_headshot%20(1).png?cdnVersion=2631" loading="lazy" /> </div> <div class="component__heading-textblock component__heading-textblock--right" style="padding-left:48px;"> <h5 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Warren Marusiak </h5> <p>Senior Technical Evangelist</p> </div> </div> <div class="container-fluid xs-none"> <div class="row flex-container"> <div class="column " > <div class="intra-div no-flex column__background p50 "> <div class="component component--image-heading-textblock margin-default"> <div class="component__image component__image--left"> <div class="component__image "> <div class="div-inline-svg wpl-icon-size-24 wpl-icon-corner-3"> <svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio='xMinYMin meet' viewBox="0 0 36 36"><path style="fill: #5243aa; fill-rule:evenodd;" d="M28.31,36a4.19,4.19,0,0,0,4.19-4.19V8.74H23.77V0H7.69A4.19,4.19,0,0,0,3.5,4.19V31.81A4.19,4.19,0,0,0,7.69,36Zm-.87-21.84a1.58,1.58,0,0,0-1.58-1.58H10.41a1.58,1.58,0,0,0,.08,3.15H25.94A1.58,1.58,0,0,0,27.44,14.16Zm-9.27,6.46a1.58,1.58,0,0,1,.08,3.15H10.49a1.58,1.58,0,0,1-.08-3.15h7.76Z"/><path style="opacity:0.5; fill:#5243aa; fill-rule:evenodd;" d="M32.5,8.74H23.77V0Z"/></svg> </div> </div> </div> <div class="component__heading-textblock default component__heading-textblock--right" style="padding-left:24px;"> <p>To demonstrate how to develop, deploy, and manage applications using Jira Software and various connected tools, our team created <strong>ImageLabeller</strong>, a simple demo application built on AWS that uses machine learning to apply labels to images.</p> <p>This page covers how to deploy ImageLabeller with <b>GitLab</b>. Before you begin, we recommend reading the <a data-event="clicked" data-uuid="be589ba2-9c0" data-event-component="linkButton" data-event-container="richText" data-schema-version="1" data-label="ImageLabeller architecture" data-label-english="ImageLabeller architecture" href="/devops/imagelabeller-intro/use-guide">ImageLabeller architecture</a> and <a data-event="clicked" data-uuid="be589ba2-9c1" data-event-component="linkButton" data-event-container="richText" data-schema-version="1" data-label="AWS SageMaker setup" data-label-english="AWS SageMaker setup" href="https://support.atlassian.com/jira-software-cloud/docs/set-up-the-aws-sagemaker-pre-trained-model/">AWS SageMaker setup</a> pages for context.</p> </div> </div> </div> </div> </div> </div> </div> <div class="column no-flex" > <div class="component component--heading-textblock"> <h2 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Prerequisites </h2> <p>If you don’t already have a GitLab group, follow the steps in <a data-event="clicked" data-uuid="bf486070-f20" data-event-component="linkButton" data-event-container="headingTextBlock" data-schema-version="1" data-label="this GitLab guide" data-label-english="this GitLab guide" href="https://docs.gitlab.com/ee/user/group/#create-a-group">this GitLab guide</a> to create one from scratch.</p> </div> </div> <div class="column no-flex" > <div class="component component--heading-textblock"> <h2 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- h3 heading" > Public facing GitHub repositories with ImageLabeller code </h2> <p><a data-event="clicked" data-uuid="3703fa64-0f0" data-event-component="linkButton" data-event-container="headingTextBlock" data-schema-version="1" data-label="https://github.com/AtlassianOpenDevOpsGuides" data-label-english="https://github.com/AtlassianOpenDevOpsGuides" href="https://github.com/AtlassianOpenDevOpsGuides">https://github.com/AtlassianOpenDevOpsGuides</a></p> </div> </div> <div class="column no-flex" > <div class="component component--heading"> <h2 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- h3 heading" > Jira GitLab integration demo video </h2> </div> <div class="component component--video-link"> <a class="play-trigger" data-event="clicked" data-uuid="a546bfb2-10" data-event-component="linkButton" data-event-container="videoLink" data-schema-version="1" data-label-english="Watch video" href="https://www.youtube.com/watch?v=ZqUpLQXOxaQ"> <span class="component--video-link__play--tiny"></span> <span class="component--video-link__text">Watch video</span> </a> <script type="text/x-component"> { "type":"imkt.components.VideoEmbedInline", "params": { "behavior":"modal", "videoId":"ZqUpLQXOxaQ", "source":"youtube", "uniqueId":"a546bfb2" } } </script></div> </div> <div class="column no-flex" > <div class="component component--heading-textblock text-oversized"> <h2 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Integrate Jira and GitLab </h2> <p>From Jira click <strong>Board</strong>, then <strong>Apps</strong>, then <strong>GitLab</strong>.</p> </div> <div class="component component--image"> <img id="f11dfb1f" alt="Screenshot of dropdown menu in Jira Software to navigate to GitLab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:233af7c0-b3a2-46fd-ad94-facbc7611a9f/screenshot_jsw_appsdropdownmenugitlab.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Click <strong>Get it now.</strong></p> </div> <div class="component component--image"> <img id="663fe917" alt="GitLab app modal in Jira Software" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:e1c978e6-347f-44e1-bfc1-a36237028ea1/screenshot_jsw_gitlabapp.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Click <strong>Apps</strong>, then <strong>Manage your apps</strong>.</p> </div> <div class="component component--image"> <img id="287ed4b0" alt="Gitlab app modal in Jira software with dropdown menu" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:5ac45ad7-f8cc-4ee9-ab8e-cbfb6c967709/screenshot_jsw_appsdropdownmenumanage.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Expand GitLab for Jira.</p> </div> <div class="component component--image"> <img id="da25850e" alt="Expand Gitlab when on the Manage Apps screen in Jira Software" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:3cf62621-d30a-4736-be56-ceaf0096a422/screenshot_jsw_manageappsgitlab.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Click <strong>Add namespace</strong>.</p> </div> <div class="component component--image"> <img id="a887e7bf" alt="Screen to add a namespace to your Gitlab Jira software configuration" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:69aad4ef-ff26-422d-8953-23e4d21b79d1/screenshot_jsw_gitlabconfiguration.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Select your existing namespace, and click <strong>Link</strong>. This guide assumes you already have an existing GitLab account, and GitLab group.</p> </div> <div class="component component--image"> <img id="d377c871" alt="Linking a Gitlab namespace in Jira Software" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:24dff71f-6c9e-45a7-8da9-1dce709e8e11/screenshot_jsw_manageappslinknamespace.png?cdnVersion=2631" loading="lazy" /> </div> </div> <div class="column no-flex" > <div class="component component--heading-textblock text-oversized"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Add SSH Key to GitLab </h3> <p>Click on your profile icon in the top right corner, and click <strong>preferences</strong>.</p> </div> <div class="component component--image"> <img id="9924ea1d" alt="Navigating to preferences using dropdown menu in Gitlab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:dbccc133-4c4c-422c-8009-f7d0f6c30053/screenshot_jsw_sshkeygitlab.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Click <strong>SSH Keys</strong> and follow the instructions to <a data-event="clicked" data-uuid="776c6054-1e0" data-event-component="linkButton" data-event-container="textBlock" data-schema-version="1" data-label="generate a new SSH key" data-label-english="generate a new SSH key" href="https://docs.gitlab.com/ee/user/ssh.html#generate-an-ssh-key-pair">generate a new SSH key</a> or <a data-event="clicked" data-uuid="776c6054-1e1" data-event-component="linkButton" data-event-container="textBlock" data-schema-version="1" data-label="use an existing SSH key" data-label-english="use an existing SSH key" href="https://docs.gitlab.com/ee/user/ssh.html#see-if-you-have-an-existing-ssh-key-pair">use an existing SSH key</a>.</p> </div> </div> <div class="column no-flex" > <div class="component component--heading-textblock text-oversized"> <h2 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Create a repository for AWS S3 infrastructure </h2> <p>A standard developer loop typically has a developer picking up a task from Jira, moving it to work in progress, and then doing the development work. The Jira issue ID is the key which ties the development work to the Jira issue. It is the core integration component between the two systems.</p> <p>Go to Jira, and create a new issue for adding an AWS S3 infrastructure repository to GitLab. Make note of the issue ID. IM-5 in this example.</p> </div> <div class="component component--image"> <img id="2a06678e" alt="Creating a new issue for your board in Jira software" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:6e6bf187-8e99-4a02-814d-9eaa13d22ce6/screenshot_jsw_createissues3infragitlab.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Go to GitLab and click <strong>New project</strong>.</p> </div> <div class="component component--image"> <img id="44f5acf9" alt="Navigating to create &quot;New project&quot; in GitLab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:2d21e5c9-67ce-48df-b183-6d8dda26ea2b/screenshot_gitlab_newproject.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Click <strong>Create blank project</strong>.</p> </div> <div class="component component--image"> <img id="a4eb9c29" alt="Creating a new project in GitLab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:a6eccbb5-024c-43cd-bcc3-a26896d473f8/screenshot_gitlab_createnewproject.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Add a <strong>Project name</strong>, and choose the appropriate group in <strong>Project URL</strong>. Click <strong>Create project</strong> to proceed.</p> </div> <div class="component component--image"> <img id="81e4c47d" alt="Creating a new project - detailed screen in Gitlab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:9d941c88-2136-4235-b063-61a63dea9296/screenshot_gitlab_createnewprojectdetails.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized" id="awsaccesskey"> <p>In your terminal go to your s3_infra repository, and run the following to push your AWS CloudFormation template.yml file to GitLab.</p> </div> <div class="component component--codeblock"> <pre><code>git&nbsp;add&nbsp;--all<br/>git&nbsp;commit&nbsp;-m&nbsp;&quot;IM-5&nbsp;add&nbsp;s3_infra&nbsp;repository&nbsp;to&nbsp;gitlab&quot;<br/>git&nbsp;remote&nbsp;add&nbsp;origin&nbsp;git@gitlab.com:pmmquickstartguides/s3_infra.git<br/>git&nbsp;branch&nbsp;-m&nbsp;mainline<br/>git&nbsp;push&nbsp;-u&nbsp;origin&nbsp;mainline</code></pre> </div> <script type="text/x-component"> { "type":"imkt.components.CodeBlock", "params": { } } </script> </div> <div class="column no-flex" > <div class="component component--heading-textblock text-oversized"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Add AWS access key </h3> <p>Click <strong>Settings</strong>, then <strong>CI/CD</strong>. Scroll down, and expand <strong>Variables</strong>. Click <strong>Add variable</strong>.</p> </div> <div class="component component--image"> <img id="1f5b290e" alt="CI/CD settings page in GitLab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:1e0cd540-9715-4fd9-ae2f-3aa8d478f882/screenshot_gitlab_awskeys.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Create two variables. One for your AWS access key ID, and one for your AWS secret access key.</p> </div> <div class="component component--image"> <img id="0e1a16fb" alt="&quot;Add variable&quot; modal to add your AWS keys in GitLab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:d71599c4-5ee0-4d45-bf49-225c0a5dbb39/screenshot_gitlab_addvariables.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Protect the variables so they are only used by pipelines running on protected branches, and tags. Give the IAM user associated with the AWS access key <a data-event="clicked" data-uuid="a9fc0e8c-d60" data-event-component="linkButton" data-event-container="textBlock" data-schema-version="1" data-label="AdministratorAccess" data-label-english="AdministratorAccess" href="https://console.aws.amazon.com/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAdministratorAccess">AdministratorAccess</a>. You can also opt to use more fine grained access control by choosing individual AWS access policies.</p> </div> <div class="component component--image" id="configure-protected-branches"> <img id="7605bdb7" alt="AWS keys listed under &quot;Variables&quot; section in the CI/CD settings page in GitLab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:91899e7a-10f8-4ece-9c15-6545236b3ffa/screenshot_gitlab_moreaccesscontrols.png?cdnVersion=2631" loading="lazy" /> </div> </div> <div class="column no-flex" > <div class="component component--heading-textblock text-oversized"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Configure protected branches for access to protected variables </h3> <p>Click <strong>Settings</strong>, then <strong>Repository</strong>. Scroll down, and expand <strong>Protected branches</strong>.</p> <p>Enter your Jira issue ID prefix and a *.</p> <p>The Jira issue IDs are like IM-5, and IM-6 in this example; The prefix is IM-.</p> <p>Enter IM-*, and click <strong>Protect</strong>.</p> </div> <div class="component component--image"> <img id="bf2f29b8" alt="Configuring protected branches in GitLab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:81267f5a-f6a1-42a1-8997-9b662b33e44c/screenshot_gitlab_congfigureprotectedbranches.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized" id="setup-deployment-environments"> <p>You will see mainline, and IM-* as protected branches.</p> </div> </div> <div class="column no-flex" > <div class="component component--heading-textblock text-oversized"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Setup deployment environments </h3> <p>Click <strong>Deployments</strong>, then <strong>Environments</strong>. Click <strong>New environment</strong> to add new environments. There are Test environments in US-WEST-1, and US-EAST-2, and Production environments in US-WEST-2, US-EAST-1, and CA-CENTRAL-1 in this example.</p> </div> <div class="component component--image"> <img id="97309e83" alt="Setting up deployment environments in GitLab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:abdad29f-4810-45c3-97b9-4a4e7cc33686/screenshot_gitlab_deploymentenvironments.png?cdnVersion=2631" loading="lazy" /> </div> </div> <div class="column no-flex" > <div class="component component--heading-textblock text-oversized"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > .gitlab-ci.yml for deploying to AWS </h3> <p>Go to your s3_infra repository in your terminal, and create a branch named after your Jira issue ID.</p> </div> <div class="component component--codeblock"> <pre><code>git&nbsp;checkout&nbsp;-b&nbsp;IM-5</code></pre> </div> <script type="text/x-component"> { "type":"imkt.components.CodeBlock", "params": { } } </script> <div class="component component--textblock text-oversized"> <p>Create a .gitlab-ci.yml file with the following yaml. This defines a deployment workflow for your Test, Staging, and Production environments.</p> </div> <div class="component component--codeblock"> <pre><code>stages:<br/>&nbsp;&nbsp;-&nbsp;merge-request<br/>&nbsp;&nbsp;-&nbsp;test-us-west-1<br/>&nbsp;&nbsp;-&nbsp;test-us-east-2<br/>&nbsp;&nbsp;-&nbsp;production-us-west-2<br/>&nbsp;&nbsp;-&nbsp;production-us-east-1<br/>&nbsp;&nbsp;-&nbsp;production-ca-central-1<br/><br/>merge-request-pipeline-job:<br/>&nbsp;&nbsp;stage:&nbsp;merge-request<br/>&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_PIPELINE_SOURCE&nbsp;==&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;echo&nbsp;&quot;This&nbsp;pipeline&nbsp;always&nbsp;succeeds&nbsp;and&nbsp;enables&nbsp;merges&nbsp;during&nbsp;merge&nbsp;requests&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;echo&nbsp;true<br/><br/>deploy-test-us-west-1:<br/>&nbsp;&nbsp;stage:&nbsp;test-us-west-1<br/>&nbsp;&nbsp;environment:&nbsp;test-us-west-1<br/>&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;!=&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;image:&nbsp;registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest<br/>&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;aws&nbsp;cloudformation&nbsp;deploy&nbsp;--region&nbsp;us-west-1&nbsp;--template-file&nbsp;template.yml&nbsp;--stack-name&nbsp;OpenDevOpsS3Infra<br/><br/>deploy-test-us-east-2:<br/>&nbsp;&nbsp;stage:&nbsp;test-us-east-2<br/>&nbsp;&nbsp;environment:&nbsp;test-us-east-2<br/>&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;!=&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;image:&nbsp;registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest<br/>&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;aws&nbsp;cloudformation&nbsp;deploy&nbsp;--region&nbsp;us-east-2&nbsp;--template-file&nbsp;template.yml&nbsp;--stack-name&nbsp;OpenDevOpsS3Infra<br/><br/>deploy-production-us-west-2:<br/>&nbsp;&nbsp;stage:&nbsp;production-us-west-2<br/>&nbsp;&nbsp;environment:&nbsp;production-us-west-2<br/>&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;==&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;image:&nbsp;registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest<br/>&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;aws&nbsp;cloudformation&nbsp;deploy&nbsp;--region&nbsp;us-west-2&nbsp;--template-file&nbsp;template.yml&nbsp;--stack-name&nbsp;OpenDevOpsS3Infra<br/><br/>deploy-production-us-east-1:<br/>&nbsp;&nbsp;stage:&nbsp;production-us-east-1<br/>&nbsp;&nbsp;environment:&nbsp;production-us-east-1<br/>&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;==&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;image:&nbsp;registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest<br/>&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;aws&nbsp;cloudformation&nbsp;deploy&nbsp;--region&nbsp;us-east-1&nbsp;--template-file&nbsp;template.yml&nbsp;--stack-name&nbsp;OpenDevOpsS3Infra<br/><br/>deploy-production-ca-central-1:<br/>&nbsp;&nbsp;stage:&nbsp;production-ca-central-1<br/>&nbsp;&nbsp;environment:&nbsp;production-ca-central-1<br/>&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;==&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;image:&nbsp;registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest<br/>&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;aws&nbsp;cloudformation&nbsp;deploy&nbsp;--region&nbsp;ca-central-1&nbsp;--template-file&nbsp;template.yml&nbsp;--stack-name&nbsp;OpenDevOpsS3Infra</code></pre> </div> <script type="text/x-component"> { "type":"imkt.components.CodeBlock", "params": { } } </script> </div> <div class="column no-flex" > <div class="component component--heading"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Understanding a .gitlab-ci.yml file </h3> </div> <div class="component component--heading-textblock text-oversized"> <h4 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Stages </h4> <p>Add a <strong>stages</strong> block to define the execution order of your GitLab pipeline. Stages are executed in the order they are defined in the stages block. Jobs associated with a stage are executed in parallel.</p> </div> <div class="component component--codeblock"> <pre><code>stages:<br/>&nbsp;&nbsp;-&nbsp;merge-request<br/>&nbsp;&nbsp;-&nbsp;test-us-west-1<br/>&nbsp;&nbsp;-&nbsp;test-us-east-2<br/>&nbsp;&nbsp;-&nbsp;production-us-west-2<br/>&nbsp;&nbsp;-&nbsp;production-us-east-1<br/>&nbsp;&nbsp;-&nbsp;production-ca-central-1</code></pre> </div> <script type="text/x-component"> { "type":"imkt.components.CodeBlock", "params": { } } </script> <div class="component component--heading-textblock text-oversized"> <h4 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Jobs </h4> <p>Jobs are associated with a <strong>stage</strong>, and can be associated with an <strong>environment</strong>. <strong>Rules</strong> control whether, or not a particular job will execute. The rule in this example checks if the pipeline branch is not the default branch, and if the pipeline is not being run automatically as part of a merge request.</p> <p>You can specify a different image for each job. You can setup images with tools necessary for your job scripts. The <strong>script</strong> section defines the set of steps that run when the job is executed.</p> </div> <div class="component component--codeblock"> <pre><code>deploy-test-us-west-1:<br/>&nbsp;&nbsp;stage:&nbsp;test-us-west-1<br/>&nbsp;&nbsp;environment:&nbsp;test-us-west-1<br/>&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;!=&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;image:&nbsp;registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest<br/>&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;aws&nbsp;cloudformation&nbsp;deploy&nbsp;--region&nbsp;us-west-1&nbsp;--template-file&nbsp;template.yml&nbsp;--stack-name&nbsp;OpenDevOpsS3Infra</code></pre> </div> <script type="text/x-component"> { "type":"imkt.components.CodeBlock", "params": { } } </script> <div class="component component--heading-textblock text-oversized"> <h4 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Merge request pipeline </h4> <p>A pipeline is run automatically by GitLab when a merge request is approved. You can create a job for this pipeline by adding a rule. The job always succeeds in this example.</p> </div> <div class="component component--codeblock"> <pre><code>merge-request-pipeline-job:<br/>&nbsp;&nbsp;stage:&nbsp;merge-request<br/>&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_PIPELINE_SOURCE&nbsp;==&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;echo&nbsp;&quot;This&nbsp;pipeline&nbsp;always&nbsp;succeeds&nbsp;and&nbsp;enables&nbsp;merges&nbsp;during&nbsp;merge&nbsp;requests&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;echo&nbsp;true</code></pre> </div> <script type="text/x-component"> { "type":"imkt.components.CodeBlock", "params": { } } </script> </div> <div class="column no-flex" > <div class="component component--heading-textblock text-oversized"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Pushing to a feature branch </h3> <p>Run the following from the command line to push your changes to the IM-5 branch of your s3_infra repository. Include the Jira issue ID in commit messages, and branch names to enable the Jira GitLab integration to keep track of what is happening in your project.</p> </div> <div class="component component--codeblock"> <pre><code>git&nbsp;add&nbsp;--all<br/>git&nbsp;commit&nbsp;-m&nbsp;&quot;IM-5&nbsp;add&nbsp;.gitlab-ci.yml&nbsp;to&nbsp;s3_infra&quot;<br/>git&nbsp;push&nbsp;-u&nbsp;origin&nbsp;IM-5</code></pre> </div> <script type="text/x-component"> { "type":"imkt.components.CodeBlock", "params": { } } </script> <div class="component component--textblock text-oversized"> <p>Click <strong>CI/CD</strong>, then <strong>Pipelines</strong> to see the pipeline run.</p> </div> <div class="component component--image"> <img id="75605f45" alt="CI/CD pipelines screen in GitLab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:82e3a1fc-6a33-4dc7-88e5-5a1d7650ce26/screenshot_gitlab_runningworkflows.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Click the pipeline ID of the running pipeline.</p> </div> <div class="component component--image"> <img id="1fc4d958" alt="Pipeline ID for the running pipeline in GitLab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:444f2984-262a-4386-8009-d7a248fb5d8e/screenshot_gitlab_pipelineID1.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Click on a job to see more details.</p> </div> <div class="component component--image"> <img id="60dfd0d9" alt="Detailed job screen for running pipeline in GitLab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:2c69708d-2d3b-443b-887a-57b20b6c2119/screenshot_gitlab_job.png?cdnVersion=2631" loading="lazy" /> </div> </div> <div class="column no-flex" > <div class="component component--heading-textblock text-oversized"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Create a merge request </h3> <p>To create a merge request click <strong>Merge requests</strong>, then <strong>Create merge request</strong>.</p> </div> <div class="component component--image"> <img id="4f9cc46a" alt="Merge requests screen in GitLab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:a6ea4df4-88e6-4d41-bd61-99f17f241520/screenshot_gitlab_mergerequest.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Choose your feature branch as the source branch then, click <strong>Compare branches and continue</strong>.</p> </div> <div class="component component--image"> <img id="ccd738d0" alt="Comparing source branch and target branch in GitLab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:f3567b59-ee5e-42b3-87b3-f47b494383c5/screenshot_gitlab_newmergerequest.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Choose an <strong>Assignee</strong>, and a <strong>Reviewer</strong>.</p> </div> <div class="component component--image"> <img id="618c5678" alt="Choosing a reviewer for your merge request in GitLab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:668196dc-188e-4e9b-a24b-0f751a2b296e/screenshot_gitlab_choosereviewer.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Click <strong>Create merge request</strong>.</p> </div> <div class="component component--image"> <img id="b30f0238" alt="Selecting &quot;Create merge request&quot; button in GitLab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:0f7c8d33-0df5-4843-b32f-297a9bc955c9/screenshot_gitlab_createmergerequest.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Review the code changes, then click <strong>Approve</strong>.</p> </div> <div class="component component--image"> <img id="e5ca5a18" alt="Merge request detailed screen where you can review changes in GitLab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:7afdc633-e428-4bb5-ac06-4b1daa5cdf98/screenshot_gitlab_reviewmerge.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Click <strong>CI/CI</strong>, then click <strong>Pipelines</strong> to see the merge request pipeline run.</p> </div> <div class="component component--image"> <img id="198f022c" alt="Navigating to the &quot;pipelines&quot; screen in Gitlab to see run merge requests" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:b75761e8-0f3e-48b4-8826-0e92ee7bebe3/screenshot_gitlab_pipelines.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Click the pipeline ID. Notice that the merge-request-pipeline-job is the only job that ran.</p> </div> <div class="component component--image"> <img id="10f3e7b8" alt="&quot;Pipeline&quot; detailed page showing that only merge-request-pipeline-job ran in GitLab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:0d4ba1f1-4192-435e-9eed-033f13fe94a2/screenshot_gitlab_pipelineran.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Go back to the merge request by clicking <strong>Merge requests</strong>, then clicking the active merge request, and click <strong>Merge</strong>. This kicks off another pipeline.</p> </div> <div class="component component--image"> <img id="88ad3d2e" alt="Merging the active merge request in GitLab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:2e2aa09f-fd1f-4af5-bb7f-4ff24db04934/screenshot_gitlab_mergerequests.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Click <strong>CI/CD</strong>, then click <strong>Pipelines</strong>. Click the pipeline ID.</p> </div> <div class="component component--image"> <img id="1b975ac5" alt="Pipeline detailed page in GitLab displaying &quot;Merge branch &#039;IM-5&#039; into &#039;mainline&#039;&quot;" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:0ae790e4-8cd3-48ea-86e2-d2f71b26a6a9/screenshot_gitlab_pipelineID2.png?cdnVersion=2631" loading="lazy" /> </div> </div> <div class="column no-flex" > <div class="component component--heading-textblock text-oversized"> <h2 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Create a repository for SystemTests </h2> <p>Go to Jira and create a Jira issue for adding a SystemTests repository to GitLab. Take note of the Jira issue ID. In this example it is IM-7.</p> </div> <div class="component component--image"> <img id="9d1c454b" alt="Create an issue in Jira Software to &quot;add GitLab repo for SubmitImage AWS Lambda&quot;" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:8b8cd7a2-3a69-4d5d-87a9-5ed5b42767fc/screenshot_jsw_createissueaddgitlabreposystemtest.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Add a <strong>Project name</strong>, and choose the appropriate group in <strong>Project URL</strong>. Click <strong>Create project</strong> to proceed.</p> </div> <div class="component component--image"> <img id="4ddf8662" alt="Filling in project details when creating a new project in GitLab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:d0ce901f-13d5-4f3d-b2a3-67fe9867c92e/screenshot_gitlab_createnewprojectsubmitiamge.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>In your terminal go to your SystemTests repository, and run the following to push your code to GitLab.</p> </div> <div class="component component--codeblock"> <pre><code>git&nbsp;add&nbsp;--all<br/>git&nbsp;commit&nbsp;-m&nbsp;&quot;IM-7&nbsp;add&nbsp;SystemTests&nbsp;repository&nbsp;to&nbsp;gitlab&quot;<br/>git&nbsp;remote&nbsp;add&nbsp;origin&nbsp;git@gitlab.com:pmmquickstartguides/systemtests.git<br/>git&nbsp;branch&nbsp;-m&nbsp;mainline<br/>git&nbsp;push&nbsp;-u&nbsp;origin&nbsp;mainline</code></pre> </div> <script type="text/x-component"> { "type":"imkt.components.CodeBlock", "params": { } } </script> <div class="component component--textblock text-oversized" id="add-deploy-token"> <p>The SystemTests repository doesn’t need a .gitlab-ci.yml file. It has no pipeline of its own since it provides tests for other pipelines to run. Take note of your SystemTests' remote url. SubmitImage, GetImageLabel, and InvokeLabeller CI/CD pipelines will clone the SystemTests repository during testing steps. You will need to update the gitlab-ci.yml of later repositories with the correct url.</p> </div> </div> <div class="column no-flex" > <div class="component component--heading-textblock text-oversized"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Add a Deploy token </h3> <p>You need to add a deploy token to clone this repository during the execution of other pipelines. Click <strong>Settings</strong>, then <strong>Repository</strong>. Scroll down, and expand <strong>Deploy tokens</strong>.</p> </div> <div class="component component--image"> <img id="2c46c4d8" alt="Entering in an example name &#039;cloneMe&#039; under &quot;Deploy tokens&quot; in GitLab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:9d40815a-f855-4f4f-ac01-81619b6740a5/screenshot_gitlab_deploytoken.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Enter a name, check <strong>read_repository</strong>, and click <strong>Create deploy token</strong>.</p> </div> <div class="component component--image"> <img id="a309711f" alt="Selecting the &quot;read_repository&quot; checkbox on the &quot;Deploy tokens&quot; settings page in GitLab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:968e49e7-2165-4903-8da9-220d3cb2ef08/screenshot_gitlab_createdeploytokenmodal.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>The deploy token username is auto-generated. The deploy token password is provided once at creation. Add it to a secret management tool so it can be referenced later. Later in this guide the deploy token username is referenced as <strong>gitlab_deploy_token</strong>, and the deploy token password is referenced as <strong>gitlab_deploy_password</strong>.</p> </div> <div class="component component--image"> <img id="2a416f08" alt="Deploy tokens screen in Gitlab, displaying Deploy Token username and password" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:ee87828c-8430-46d6-a576-b581aff8d6a8/screenshot_GitLabDeployTokenCreation.png?cdnVersion=2631" loading="lazy" /> </div> </div> <div class="column no-flex" > <div class="component component--heading-textblock text-oversized"> <h2 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Create a repository for SubmitImage AWS Lambda </h2> <p>Go to Jira, and create a new issue for adding a SubmitImage AWS Lambda repository to GitLab. Make note of the issue ID. IM-8 in this example.</p> </div> <div class="component component--image"> <img id="fb6eaedc" alt="Imagelabeller board in Jira software - highlighting issue &quot;IM-8 add GitLab repo for SubmitImage AWS Lambda&quot;" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:63278d8a-9f7f-47af-9b14-c9e2fa24b874/screenshot_jsw_issueaddissuecreatereposubmitimage.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Go to GitLab and click <strong>New project</strong>, then <strong>Create blank project</strong>. Add a <strong>Project name</strong>, and choose the appropriate group in <strong>Project URL</strong>. Click <strong>Create project</strong> to proceed.</p> </div> <div class="component component--image"> <img id="95ef8cd1" alt="screenshot of creating new project &quot;submitimage&quot; in gitlab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:d0ce901f-13d5-4f3d-b2a3-67fe9867c92e/screenshot_gitlab_createnewprojectsubmitiamge.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>In your terminal go to your SubmitImage repository, and run the following to push your code to GitLab.</p> </div> <div class="component component--codeblock"> <pre><code>git&nbsp;add&nbsp;--all<br/>git&nbsp;commit&nbsp;-m&nbsp;&quot;IM-8&nbsp;add&nbsp;SubmitImage&nbsp;to&nbsp;gitlab&quot;<br/>git&nbsp;remote&nbsp;add&nbsp;origin&nbsp;git@gitlab.com:pmmquickstartguides/submitimage.git<br/>git&nbsp;branch&nbsp;-m&nbsp;mainline<br/>git&nbsp;push&nbsp;-u&nbsp;origin&nbsp;mainline</code></pre> </div> <script type="text/x-component"> { "type":"imkt.components.CodeBlock", "params": { } } </script> <div class="component component--textblock text-oversized"> <p>You must <a data-event="clicked" data-uuid="16c868b6-780" data-event-component="linkButton" data-event-container="textBlock" data-schema-version="1" data-label="add AWS access keys" data-label-english="add AWS access keys" href="/devops/deploy-imagelabeller/gitlab#awsaccesskey">add AWS access keys</a>, <a data-event="clicked" data-uuid="16c868b6-781" data-event-component="linkButton" data-event-container="textBlock" data-schema-version="1" data-label="configure protected branches" data-label-english="configure protected branches" href="/devops/deploy-imagelabeller/gitlab#configure-protected-branches">configure protected branches</a>, and <a data-event="clicked" data-uuid="16c868b6-782" data-event-component="linkButton" data-event-container="textBlock" data-schema-version="1" data-label="setup deployment environments" data-label-english="setup deployment environments" href="/devops/deploy-imagelabeller/gitlab#setup-deployment-environments">setup deployment environments</a>.</p> <p>Then <a data-event="clicked" data-uuid="16c868b6-783" data-event-component="linkButton" data-event-container="textBlock" data-schema-version="1" data-label="add the deploy keys" data-label-english="add the deploy keys" href="/devops/deploy-imagelabeller/gitlab#add-deploy-token">add the deploy keys</a> from your SystemTests repository to enable the SubmitImage GitLab pipeline to download, and run the SystemTests.</p> <p>Finally, add your AWS account ID as a CI/CD Variable.</p> </div> <div class="component component--image"> <img id="d011f468" alt="screenshot of variables screen in gitlab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:e7d826c0-bc7f-4bf8-9849-ac456fe5a3af/screenshot_gitlab_variables.png?cdnVersion=2631" loading="lazy" /> </div> </div> <div class="column no-flex" > <div class="component component--heading-textblock text-oversized"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > .gitlab-ci.yml for deploying to AWS </h3> <p>Go to your SubmitImage repository in your terminal, and create a branch named after your Jira issue ID.</p> </div> <div class="component component--codeblock"> <pre><code>git&nbsp;checkout&nbsp;-b&nbsp;IM-8</code></pre> </div> <script type="text/x-component"> { "type":"imkt.components.CodeBlock", "params": { } } </script> <div class="component component--textblock text-oversized"> <p>Create a .gitlab-ci.yml file with the following yaml. This defines a deployment workflow for your Test, Staging, and Production environments. You <strong>must update the git clone line</strong> for SystemTests to be your SystemTests repository.</p> </div> <div class="component component--codeblock"> <pre><code>stages:<br/>&nbsp;&nbsp;-&nbsp;merge-request<br/>&nbsp;&nbsp;-&nbsp;run-unit-tests<br/>#US-WEST-1<br/>&nbsp;&nbsp;-&nbsp;deploy-us-west-1<br/>&nbsp;&nbsp;-&nbsp;test-us-west-1<br/>#US-EAST-2<br/>&nbsp;&nbsp;-&nbsp;deploy-us-east-2<br/>&nbsp;&nbsp;-&nbsp;test-us-east-2<br/>#US-WEST-2<br/>&nbsp;&nbsp;-&nbsp;deploy-us-west-2<br/>&nbsp;&nbsp;-&nbsp;test-us-west-2<br/>#US-EAST-1<br/>&nbsp;&nbsp;-&nbsp;deploy-us-east-1<br/>&nbsp;&nbsp;-&nbsp;test-us-east-1<br/>#CA-CENTRAL-1<br/>&nbsp;&nbsp;-&nbsp;deploy-ca-central-1<br/>&nbsp;&nbsp;-&nbsp;test-ca-central-1<br/><br/>merge-request-pipeline-job:<br/>&nbsp;&nbsp;stage:&nbsp;merge-request<br/>&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_PIPELINE_SOURCE&nbsp;==&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;echo&nbsp;&quot;This&nbsp;pipeline&nbsp;always&nbsp;succeeds&nbsp;and&nbsp;enables&nbsp;merge&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;echo&nbsp;true<br/><br/>run-unit-tests:<br/>&nbsp;&nbsp;stage:&nbsp;run-unit-tests<br/>&nbsp;&nbsp;image:&nbsp;golang:buster<br/>&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;!=&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;cd&nbsp;submitImage<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;go&nbsp;test&nbsp;./opendevopslambda/...<br/><br/>#US-WEST-1<br/>deploy-us-west-1:<br/>&nbsp;&nbsp;stage:&nbsp;deploy-us-west-1<br/>&nbsp;&nbsp;environment:&nbsp;test-us-west-1<br/>&nbsp;&nbsp;image:&nbsp;python:latest<br/>&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;!=&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;before_script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;pip3&nbsp;install&nbsp;awscli&nbsp;--upgrade<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;pip3&nbsp;install&nbsp;aws-sam-cli&nbsp;--upgrade<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;wget&nbsp;https://golang.org/dl/go1.16.6.linux-amd64.tar.gz<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;rm&nbsp;-rf&nbsp;/usr/local/go&nbsp;&amp;&amp;&nbsp;tar&nbsp;-C&nbsp;/usr/local&nbsp;-xzf&nbsp;go1.16.6.linux-amd64.tar.gz<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;PATH=$PATH:/usr/local/go/bin<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;go&nbsp;version<br/>&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;build<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;package&nbsp;--output-template-file&nbsp;submit-image-packaged.yaml&nbsp;--s3-bucket&nbsp;open-devops-code-us-west-1-$AWS_ACCOUNT_ID&nbsp;--region&nbsp;us-west-1<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;deploy&nbsp;--template-file&nbsp;submit-image-packaged.yaml&nbsp;--stack-name&nbsp;OpenDevOpsSubmitImage&nbsp;&nbsp;--s3-bucket&nbsp;open-devops-code-us-west-1-$AWS_ACCOUNT_ID&nbsp;--capabilities&nbsp;CAPABILITY_IAM&nbsp;--region&nbsp;us-west-1&nbsp;--no-fail-on-empty-changeset<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#test-us-west-1:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;stage:&nbsp;test-us-west-1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;environment:&nbsp;test-us-west-1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;image:&nbsp;golang:buster<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;!=&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;git&nbsp;clone&nbsp;https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;cd&nbsp;systemtests<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;go&nbsp;test&nbsp;-v&nbsp;./...&nbsp;-aws_region=us-west-1<br/><br/>#US-EAST-2<br/>deploy-us-east-2:<br/>&nbsp;&nbsp;stage:&nbsp;deploy-us-east-2<br/>&nbsp;&nbsp;environment:&nbsp;test-us-east-2<br/>&nbsp;&nbsp;image:&nbsp;python:latest<br/>&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;!=&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;before_script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;pip3&nbsp;install&nbsp;awscli&nbsp;--upgrade<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;pip3&nbsp;install&nbsp;aws-sam-cli&nbsp;--upgrade<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;wget&nbsp;https://golang.org/dl/go1.16.6.linux-amd64.tar.gz<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;rm&nbsp;-rf&nbsp;/usr/local/go&nbsp;&amp;&amp;&nbsp;tar&nbsp;-C&nbsp;/usr/local&nbsp;-xzf&nbsp;go1.16.6.linux-amd64.tar.gz<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;PATH=$PATH:/usr/local/go/bin<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;go&nbsp;version<br/>&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;build<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;package&nbsp;--output-template-file&nbsp;submit-image-packaged.yaml&nbsp;--s3-bucket&nbsp;open-devops-code-us-east-2-$AWS_ACCOUNT_ID&nbsp;--region&nbsp;us-east-2<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;deploy&nbsp;--template-file&nbsp;submit-image-packaged.yaml&nbsp;--stack-name&nbsp;OpenDevOpsSubmitImage&nbsp;&nbsp;--s3-bucket&nbsp;open-devops-code-us-east-2-$AWS_ACCOUNT_ID&nbsp;--capabilities&nbsp;CAPABILITY_IAM&nbsp;--region&nbsp;us-east-2&nbsp;--no-fail-on-empty-changeset<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#test-us-east-2:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;stage:&nbsp;test-us-east-2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;environment:&nbsp;test-us-east-2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;image:&nbsp;golang:buster<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;!=&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;git&nbsp;clone&nbsp;https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;cd&nbsp;systemtests<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;go&nbsp;test&nbsp;-v&nbsp;./...&nbsp;-aws_region=us-east-2<br/><br/>#US-WEST-2<br/>deploy-us-west-2:<br/>&nbsp;&nbsp;stage:&nbsp;deploy-us-west-2<br/>&nbsp;&nbsp;environment:&nbsp;production-us-west-2<br/>&nbsp;&nbsp;image:&nbsp;python:latest<br/>&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;==&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;before_script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;pip3&nbsp;install&nbsp;awscli&nbsp;--upgrade<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;pip3&nbsp;install&nbsp;aws-sam-cli&nbsp;--upgrade<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;wget&nbsp;https://golang.org/dl/go1.16.6.linux-amd64.tar.gz<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;rm&nbsp;-rf&nbsp;/usr/local/go&nbsp;&amp;&amp;&nbsp;tar&nbsp;-C&nbsp;/usr/local&nbsp;-xzf&nbsp;go1.16.6.linux-amd64.tar.gz<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;PATH=$PATH:/usr/local/go/bin<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;go&nbsp;version<br/>&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;build<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;package&nbsp;--output-template-file&nbsp;submit-image-packaged.yaml&nbsp;--s3-bucket&nbsp;open-devops-code-us-west-2-$AWS_ACCOUNT_ID&nbsp;--region&nbsp;us-west-2<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;deploy&nbsp;--template-file&nbsp;submit-image-packaged.yaml&nbsp;--stack-name&nbsp;OpenDevOpsSubmitImage&nbsp;&nbsp;--s3-bucket&nbsp;open-devops-code-us-west-2-$AWS_ACCOUNT_ID&nbsp;--capabilities&nbsp;CAPABILITY_IAM&nbsp;--region&nbsp;us-west-2&nbsp;--no-fail-on-empty-changeset<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#test-us-west-2:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;stage:&nbsp;test-us-west-2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;environment:&nbsp;production-us-west-2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;image:&nbsp;golang:buster<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;==&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;git&nbsp;clone&nbsp;https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;cd&nbsp;systemtests<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;go&nbsp;test&nbsp;-v&nbsp;./...&nbsp;-aws_region=us-west-2<br/><br/>#US-EAST-1<br/>deploy-us-east-1:<br/>&nbsp;&nbsp;stage:&nbsp;deploy-us-east-1<br/>&nbsp;&nbsp;environment:&nbsp;production-us-east-1<br/>&nbsp;&nbsp;image:&nbsp;python:latest<br/>&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;==&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;before_script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;pip3&nbsp;install&nbsp;awscli&nbsp;--upgrade<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;pip3&nbsp;install&nbsp;aws-sam-cli&nbsp;--upgrade<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;wget&nbsp;https://golang.org/dl/go1.16.6.linux-amd64.tar.gz<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;rm&nbsp;-rf&nbsp;/usr/local/go&nbsp;&amp;&amp;&nbsp;tar&nbsp;-C&nbsp;/usr/local&nbsp;-xzf&nbsp;go1.16.6.linux-amd64.tar.gz<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;PATH=$PATH:/usr/local/go/bin<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;go&nbsp;version<br/>&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;build<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;package&nbsp;--output-template-file&nbsp;submit-image-packaged.yaml&nbsp;--s3-bucket&nbsp;open-devops-code-us-east-1-$AWS_ACCOUNT_ID&nbsp;--region&nbsp;us-east-1<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;deploy&nbsp;--template-file&nbsp;submit-image-packaged.yaml&nbsp;--stack-name&nbsp;OpenDevOpsSubmitImage&nbsp;&nbsp;--s3-bucket&nbsp;open-devops-code-us-east-1-$AWS_ACCOUNT_ID&nbsp;--capabilities&nbsp;CAPABILITY_IAM&nbsp;--region&nbsp;us-east-1&nbsp;--no-fail-on-empty-changeset<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#test-us-east-1:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;stage:&nbsp;test-us-east-1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;environment:&nbsp;production-us-east-1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;image:&nbsp;golang:buster<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;==&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;git&nbsp;clone&nbsp;https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;cd&nbsp;systemtests<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;go&nbsp;test&nbsp;-v&nbsp;./...&nbsp;-aws_region=us-east-1<br/><br/>#CA-CENTRAL-1<br/>deploy-central-1:<br/>&nbsp;&nbsp;stage:&nbsp;deploy-ca-central-1<br/>&nbsp;&nbsp;environment:&nbsp;production-ca-central-1<br/>&nbsp;&nbsp;image:&nbsp;python:latest<br/>&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;==&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;before_script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;pip3&nbsp;install&nbsp;awscli&nbsp;--upgrade<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;pip3&nbsp;install&nbsp;aws-sam-cli&nbsp;--upgrade<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;wget&nbsp;https://golang.org/dl/go1.16.6.linux-amd64.tar.gz<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;rm&nbsp;-rf&nbsp;/usr/local/go&nbsp;&amp;&amp;&nbsp;tar&nbsp;-C&nbsp;/usr/local&nbsp;-xzf&nbsp;go1.16.6.linux-amd64.tar.gz<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;PATH=$PATH:/usr/local/go/bin<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;go&nbsp;version<br/>&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;build<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;package&nbsp;--output-template-file&nbsp;submit-image-packaged.yaml&nbsp;--s3-bucket&nbsp;open-devops-code-ca-central-1-$AWS_ACCOUNT_ID&nbsp;--region&nbsp;ca-central-1<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;deploy&nbsp;--template-file&nbsp;submit-image-packaged.yaml&nbsp;--stack-name&nbsp;OpenDevOpsSubmitImage&nbsp;&nbsp;--s3-bucket&nbsp;open-devops-code-ca-central-1-$AWS_ACCOUNT_ID&nbsp;--capabilities&nbsp;CAPABILITY_IAM&nbsp;--region&nbsp;ca-central-1&nbsp;--no-fail-on-empty-changeset<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#test-central-1:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;stage:&nbsp;test-ca-central-1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;environment:&nbsp;production-ca-central-1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;image:&nbsp;golang:buster<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;==&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;git&nbsp;clone&nbsp;https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;cd&nbsp;systemtests<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;go&nbsp;test&nbsp;-v&nbsp;./...&nbsp;-aws_region=ca-central-1</code></pre> </div> <script type="text/x-component"> { "type":"imkt.components.CodeBlock", "params": { } } </script> <div class="container-fluid xs-none"> <div class="row flex-container"> <div class="column " > <div class="intra-div no-flex column__background b50 "> <div class="component component--image-heading-textblock margin-default"> <div class="component__image component__image--left"> <div class="component__image "> <div class="div-inline-svg wpl-icon-size-24 wpl-icon-corner-3"> <svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio='xMinYMin meet' viewBox="0 0 36 36"><path style="fill: #0052cc; fill-rule:evenodd;" d="M18,0A18,18,0,1,0,36,18,18,18,0,0,0,18,0Zm.16,10.1a2.68,2.68,0,1,0-2.69-2.68A2.68,2.68,0,0,0,18.16,10.1Zm3.16,15.64a1.42,1.42,0,0,1,.06,2.84H15A1.42,1.42,0,0,1,15,25.74h1.81V15H15a1.43,1.43,0,0,1-1.42-1.35v-.07a1.42,1.42,0,0,1,1.35-1.42h3.25a1.43,1.43,0,0,1,1.42,1.35V25.74Z"/></svg> </div> </div> </div> <div class="component__heading-textblock default component__heading-textblock--right" style="padding-left:24px;"> <p>The execution of the integration tests is commented out for now. The system tests will only pass when the entire application is deployed. Uncomment the integration test steps in your repository, and do another push to run the deployment pipeline after all components of ImageLabeller are deployed. You <strong>must update the git clone line</strong> for SystemTests to be your SystemTests repository.</p> </div> </div> </div> </div> </div> </div> </div> <div class="column no-flex" > <div class="component component--heading-textblock text-oversized"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Understanding a .gitlab-ci.yml file </h3> <p>This step executes unit tests that are a part of the SubmitImage repository.</p> </div> <div class="component component--codeblock"> <pre><code>unit-test-us-west-1:<br/>&nbsp;&nbsp;stage:&nbsp;unit-test-us-west-1<br/>&nbsp;&nbsp;environment:&nbsp;test-us-west-1<br/>&nbsp;&nbsp;image:&nbsp;golang:buster<br/>&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;!=&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;cd&nbsp;submitImage<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;go&nbsp;test&nbsp;./opendevopslambda/...</code></pre> </div> <script type="text/x-component"> { "type":"imkt.components.CodeBlock", "params": { } } </script> <div class="component component--textblock text-oversized"> <p>This step deploys the SubmitImage AWS Lambda using AWS SAM. Notice the <strong>before_script</strong> section. This step runs before the <strong>script</strong> section, and can be used to install dependencies, and setup various tools.</p> </div> <div class="component component--codeblock"> <pre><code>deploy-us-west-1:<br/>&nbsp;&nbsp;stage:&nbsp;deploy-us-west-1<br/>&nbsp;&nbsp;environment:&nbsp;test-us-west-1<br/>&nbsp;&nbsp;image:&nbsp;python:latest<br/>&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;!=&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;before_script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;pip3&nbsp;install&nbsp;awscli&nbsp;--upgrade<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;pip3&nbsp;install&nbsp;aws-sam-cli&nbsp;--upgrade<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;wget&nbsp;https://golang.org/dl/go1.16.6.linux-amd64.tar.gz<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;rm&nbsp;-rf&nbsp;/usr/local/go&nbsp;&amp;&amp;&nbsp;tar&nbsp;-C&nbsp;/usr/local&nbsp;-xzf&nbsp;go1.16.6.linux-amd64.tar.gz<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;PATH=$PATH:/usr/local/go/bin<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;go&nbsp;version<br/>&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;build<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;package&nbsp;--output-template-file&nbsp;submit-image-packaged.yaml&nbsp;--s3-bucket&nbsp;open-devops-code-us-west-1-$AWS_ACCOUNT_ID&nbsp;--region&nbsp;us-west-1<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;deploy&nbsp;--template-file&nbsp;submit-image-packaged.yaml&nbsp;--stack-name&nbsp;OpenDevOpsSubmitImage&nbsp;&nbsp;--s3-bucket&nbsp;open-devops-code-us-west-1-$AWS_ACCOUNT_ID&nbsp;--capabilities&nbsp;CAPABILITY_IAM&nbsp;--region&nbsp;us-west-1&nbsp;--no-fail-on-empty-changeset</code></pre> </div> <script type="text/x-component"> { "type":"imkt.components.CodeBlock", "params": { } } </script> <div class="component component--textblock text-oversized"> <p>This step downloads, and runs the integration tests in the SystemTests repository. You <strong>must update the git clone line</strong> for SystemTests to be your SystemTests repository.</p> </div> <div class="component component--codeblock"> <pre><code>test-us-west-1:<br/>&nbsp;&nbsp;stage:&nbsp;test-us-west-1<br/>&nbsp;&nbsp;environment:&nbsp;test-us-west-1<br/>&nbsp;&nbsp;image:&nbsp;golang:buster<br/>&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;!=&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;git&nbsp;clone&nbsp;https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;cd&nbsp;systemtests<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;go&nbsp;test&nbsp;-v&nbsp;./...&nbsp;-aws_region=us-west-1</code></pre> </div> <script type="text/x-component"> { "type":"imkt.components.CodeBlock", "params": { } } </script> <div class="component component--textblock text-oversized"> <p>The <a data-event="clicked" data-uuid="0789c78f-190" data-event-component="linkButton" data-event-container="textBlock" data-schema-version="1" data-label="deploy token" data-label-english="deploy token" href="https://hello.atlassian.net/wiki/spaces/~881875339/pages/1223432159/GitLab+Quick+Start+Guide+1st+Draft#testdeploykeys">deploy token</a> created earlier is referenced in the git clone line.</p> </div> <div class="component component--codeblock"> <pre><code>-&nbsp;git&nbsp;clone&nbsp;https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git</code></pre> </div> <script type="text/x-component"> { "type":"imkt.components.CodeBlock", "params": { } } </script> </div> <div class="column no-flex" > <div class="component component--heading-textblock text-oversized"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Pushing to a feature branch </h3> <p>Run the following from the command line to push your changes to the IM-8 branch of your SubmitImage repository. Include the Jira issue ID in commit messages, and branch names to enable the Jira GitLab integration to keep track of what is happening in your project.</p> </div> <div class="component component--codeblock"> <pre><code>git&nbsp;add&nbsp;--all<br/>git&nbsp;commit&nbsp;-m&nbsp;&quot;IM-8&nbsp;add&nbsp;.gitlab-ci.yml&nbsp;to&nbsp;SubmitImage&quot;<br/>git&nbsp;push&nbsp;-u&nbsp;origin&nbsp;IM-8</code></pre> </div> <script type="text/x-component"> { "type":"imkt.components.CodeBlock", "params": { } } </script> <div class="component component--textblock text-oversized"> <p>Click <strong>CI/CD</strong>, then <strong>Pipelines</strong> to see the pipeline run.</p> </div> <div class="component component--image"> <img id="37df20b2" alt="screenshot of pipeline run in gitlab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:9bef95c2-61b6-4b89-8aaa-3683083605dc/screenshot_gitlab_pipelinerun.png?cdnVersion=2631" loading="lazy" /> </div> </div> <div class="column no-flex" > <div class="component component--heading-textblock text-oversized"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Create a merge request </h3> <p><a data-event="clicked" data-uuid="3b9c7498-e10" data-event-component="linkButton" data-event-container="headingTextBlock" data-schema-version="1" data-label="Create a merge" data-label-english="Create a merge" href="https://hello.atlassian.net/wiki/spaces/~881875339/pages/1223432159/GitLab+Quick+Start+Guide+1st+Draft#createmergerequest">Create a merge</a> request to deploy to your production environments after GitLab deploys to your test environments. Choose the IM-8 branch.</p> </div> <div class="component component--image"> <img id="7ab2c0c1" alt="screenshot of merge requests in gitlab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:e6915a7c-00f3-4ee4-b1af-df7d936033a5/screenshot_gitlab_mergerequestssubmitimage.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Click <strong>CI/CD</strong>, then <strong>Pipelines</strong> to see the running merge request pipeline.</p> </div> <div class="component component--image"> <img id="072e374a" alt="screenshot of running merge request oin gitlab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:edec3e6b-830e-4fe8-af86-f67178bd83ba/screenshot_gitlab_runningmergerequest.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p><strong>Merge</strong> the changes to mainline after the merge request pipeline completes. Click <strong>CI/CD</strong>, then <strong>Pipelines</strong> to see the running Production pipeline.</p> </div> <div class="component component--image"> <img id="8a317e05" alt="screenshot of running production pipeline in gitlab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:29153944-0768-448a-8cdb-6c9e8f2989b1/screenshot_gitlab_runningproductionpipeline.png?cdnVersion=2631" loading="lazy" /> </div> </div> <div class="column no-flex" > <div class="component component--heading-textblock text-oversized"> <h2 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Create a repository for InvokeLabeller AWS Lambda </h2> <p>Go to Jira, and create a new issue for adding a InvokeLabeller AWS Lambda repository to GitLab. Make note of the issue ID. IM-10 in this example.</p> </div> <div class="component component--image"> <img id="c1632770" alt="screenshot of jira issue create repo &quot;invokelabeller&quot; in gitlab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:2917371c-fe94-4059-add8-2ca8d5739908/screenshot_jsw_createissuerepoinvokelabellergitlab.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>Go to GitLab and click <strong>New project</strong>, then <strong>Create blank project</strong>. Add a <strong>Project name</strong>, and choose the appropriate group in <strong>Project URL</strong>. Click <strong>Create project</strong> to proceed.</p> </div> <div class="component component--image"> <img id="261b543f" alt="screenshot of creating new project &quot;invokelabeller&quot; in gitlab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:f8c18f79-7ac0-4c55-81f2-b877981bdeba/screenshot_gitlab_createprojectinvokelabeller.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p>In your terminal go to your InvokeLabeller repository, and run the following to push your code to GitLab.</p> </div> <div class="component component--codeblock"> <pre><code>git&nbsp;add&nbsp;--all<br/>git&nbsp;commit&nbsp;-m&nbsp;&quot;IM-10&nbsp;add&nbsp;InvokeLabeller&nbsp;to&nbsp;gitlab&quot;<br/>git&nbsp;remote&nbsp;add&nbsp;origin&nbsp;git@gitlab.com:pmmquickstartguides/invokelabeller.git<br/>git&nbsp;branch&nbsp;-m&nbsp;mainline<br/>git&nbsp;push&nbsp;-u&nbsp;origin&nbsp;mainline</code></pre> </div> <script type="text/x-component"> { "type":"imkt.components.CodeBlock", "params": { } } </script> <div class="component component--textblock text-oversized"> <p>You must <a data-event="clicked" data-uuid="f0a7a878-f80" data-event-component="linkButton" data-event-container="textBlock" data-schema-version="1" data-label="add AWS access keys" data-label-english="add AWS access keys" href="/devops/deploy-imagelabeller/gitlab#awsaccesskey">add AWS access keys</a>, <a data-event="clicked" data-uuid="f0a7a878-f81" data-event-component="linkButton" data-event-container="textBlock" data-schema-version="1" data-label="configure protected branches" data-label-english="configure protected branches" href="/devops/deploy-imagelabeller/gitlab#configure-protected-branches">configure protected branches</a>, and <a data-event="clicked" data-uuid="f0a7a878-f82" data-event-component="linkButton" data-event-container="textBlock" data-schema-version="1" data-label="setup deployment environments" data-label-english="setup deployment environments" href="/devops/deploy-imagelabeller/gitlab#setup-deployment-environments">setup deployment environments</a>.</p> <p>Then <a data-event="clicked" data-uuid="f0a7a878-f83" data-event-component="linkButton" data-event-container="textBlock" data-schema-version="1" data-label="add the deploy keys" data-label-english="add the deploy keys" href="/devops/deploy-imagelabeller/gitlab#add-deploy-token">add the deploy keys</a> from your SystemTests repository to enable the InvokeLabeller GitLab pipeline to download, and run the SystemTests.</p> <p>Finally, add your AWS account ID as a CI/CD Variable.</p> </div> <div class="component component--image"> <img id="9ab9f416" alt="screenshot of variables page in gitlab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:e958bb2f-019a-417e-88b6-a9fa33c082be/screenshot_gitlab_variables2.png?cdnVersion=2631" loading="lazy" /> </div> </div> <div class="column no-flex" > <div class="component component--heading-textblock text-oversized"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > .gitlab-ci.yml for deploying to AWS </h3> <p>Go to your InvokeLabeller repository in your terminal, and create a branch named after your Jira issue ID.</p> </div> <div class="component component--codeblock"> <pre><code>git&nbsp;checkout&nbsp;-b&nbsp;IM-10</code></pre> </div> <script type="text/x-component"> { "type":"imkt.components.CodeBlock", "params": { } } </script> <div class="component component--textblock text-oversized"> <p>Create a .gitlab-ci.yml file with the following yaml. This defines a deployment workflow for your Test, Staging, and Production environments. You <strong>must update the git clone line</strong> for SystemTests to be your SystemTests repository.</p> </div> <div class="component component--codeblock"> <pre><code>stages:<br/>&nbsp;&nbsp;-&nbsp;merge-request<br/>&nbsp;&nbsp;-&nbsp;run-unit-tests<br/>#US-WEST-1<br/>&nbsp;&nbsp;-&nbsp;deploy-us-west-1<br/>&nbsp;&nbsp;-&nbsp;test-us-west-1<br/>#US-EAST-2<br/>&nbsp;&nbsp;-&nbsp;deploy-us-east-2<br/>&nbsp;&nbsp;-&nbsp;test-us-east-2<br/>#US-WEST-2<br/>&nbsp;&nbsp;-&nbsp;deploy-us-west-2<br/>&nbsp;&nbsp;-&nbsp;test-us-west-2<br/>#US-EAST-1<br/>&nbsp;&nbsp;-&nbsp;deploy-us-east-1<br/>&nbsp;&nbsp;-&nbsp;test-us-east-1<br/>#CA-CENTRAL-1<br/>&nbsp;&nbsp;-&nbsp;deploy-ca-central-1<br/>&nbsp;&nbsp;-&nbsp;test-ca-central-1<br/><br/>merge-request-pipeline-job:<br/>&nbsp;&nbsp;stage:&nbsp;merge-request<br/>&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_PIPELINE_SOURCE&nbsp;==&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;echo&nbsp;&quot;This&nbsp;pipeline&nbsp;always&nbsp;succeeds&nbsp;and&nbsp;enables&nbsp;merge&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;echo&nbsp;true<br/><br/>run-unit-tests:<br/>&nbsp;&nbsp;stage:&nbsp;run-unit-tests<br/>&nbsp;&nbsp;image:&nbsp;python:3.8-buster<br/>&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;!=&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;before_script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;pip3&nbsp;install&nbsp;pytest<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;pip3&nbsp;install&nbsp;moto<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;pip3&nbsp;install&nbsp;-r&nbsp;tst/requirements.txt&nbsp;--user<br/>&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;python3&nbsp;-m&nbsp;pytest&nbsp;-v&nbsp;tst/unit&nbsp;--junitxml=test-reports/report.xml<br/><br/>#US-WEST-1<br/>deploy-us-west-1:<br/>&nbsp;&nbsp;stage:&nbsp;deploy-us-west-1<br/>&nbsp;&nbsp;environment:&nbsp;test-us-west-1<br/>&nbsp;&nbsp;image:&nbsp;python:3.8-buster<br/>&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;!=&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;before_script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;pip3&nbsp;install&nbsp;awscli&nbsp;--upgrade<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;pip3&nbsp;install&nbsp;aws-sam-cli&nbsp;--upgrade<br/>&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;build<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;package&nbsp;--output-template-file&nbsp;invoke-labeller-packaged.yaml&nbsp;--s3-bucket&nbsp;open-devops-code-us-west-1-$AWS_ACCOUNT_ID&nbsp;--region&nbsp;us-west-1<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;deploy&nbsp;--template-file&nbsp;invoke-labeller-packaged.yaml&nbsp;--stack-name&nbsp;OpenDevOpsInvokeLabeller&nbsp;&nbsp;--s3-bucket&nbsp;open-devops-code-us-west-1-$AWS_ACCOUNT_ID&nbsp;--capabilities&nbsp;CAPABILITY_IAM&nbsp;--region&nbsp;us-west-1&nbsp;--no-fail-on-empty-changeset<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#test-us-west-1:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;stage:&nbsp;test-us-west-1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;environment:&nbsp;test-us-west-1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;image:&nbsp;golang:buster<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;!=&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;git&nbsp;clone&nbsp;https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;cd&nbsp;systemtests<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;go&nbsp;test&nbsp;-v&nbsp;./...&nbsp;-aws_region=us-west-1<br/><br/>#US-EAST-2<br/>deploy-us-east-2:<br/>&nbsp;&nbsp;stage:&nbsp;deploy-us-east-2<br/>&nbsp;&nbsp;environment:&nbsp;test-us-east-2<br/>&nbsp;&nbsp;image:&nbsp;python:3.8-buster<br/>&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;!=&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;before_script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;pip3&nbsp;install&nbsp;awscli&nbsp;--upgrade<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;pip3&nbsp;install&nbsp;aws-sam-cli&nbsp;--upgrade<br/>&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;build<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;package&nbsp;--output-template-file&nbsp;invoke-labeller-packaged.yaml&nbsp;--s3-bucket&nbsp;open-devops-code-us-east-2-$AWS_ACCOUNT_ID&nbsp;--region&nbsp;us-east-2<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;deploy&nbsp;--template-file&nbsp;invoke-labeller-packaged.yaml&nbsp;--stack-name&nbsp;OpenDevOpsInvokeLabeller&nbsp;&nbsp;--s3-bucket&nbsp;open-devops-code-us-east-2-$AWS_ACCOUNT_ID&nbsp;--capabilities&nbsp;CAPABILITY_IAM&nbsp;--region&nbsp;us-east-2&nbsp;--no-fail-on-empty-changeset<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#test-us-east-2:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;stage:&nbsp;test-us-east-2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;environment:&nbsp;test-us-east-2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;image:&nbsp;golang:buster<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;!=&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;git&nbsp;clone&nbsp;https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;cd&nbsp;systemtests<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;go&nbsp;test&nbsp;-v&nbsp;./...&nbsp;-aws_region=us-east-2<br/><br/>#US-WEST-2<br/>deploy-us-west-2:<br/>&nbsp;&nbsp;stage:&nbsp;deploy-us-west-2<br/>&nbsp;&nbsp;environment:&nbsp;production-us-west-2<br/>&nbsp;&nbsp;image:&nbsp;python:3.8-buster<br/>&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;==&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;before_script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;pip3&nbsp;install&nbsp;awscli&nbsp;--upgrade<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;pip3&nbsp;install&nbsp;aws-sam-cli&nbsp;--upgrade<br/>&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;build<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;package&nbsp;--output-template-file&nbsp;invoke-labeller-packaged.yaml&nbsp;--s3-bucket&nbsp;open-devops-code-us-west-2-$AWS_ACCOUNT_ID&nbsp;--region&nbsp;us-west-2<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;deploy&nbsp;--template-file&nbsp;invoke-labeller-packaged.yaml&nbsp;--stack-name&nbsp;OpenDevOpsInvokeLabeller&nbsp;&nbsp;--s3-bucket&nbsp;open-devops-code-us-west-2-$AWS_ACCOUNT_ID&nbsp;--capabilities&nbsp;CAPABILITY_IAM&nbsp;--region&nbsp;us-west-2&nbsp;--no-fail-on-empty-changeset<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#test-us-west-2:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;stage:&nbsp;test-us-west-2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;environment:&nbsp;production-us-west-2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;image:&nbsp;golang:buster<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;==&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;git&nbsp;clone&nbsp;https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;cd&nbsp;systemtests<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;go&nbsp;test&nbsp;-v&nbsp;./...&nbsp;-aws_region=us-west-2<br/><br/>#US-EAST-1<br/>deploy-us-east-1:<br/>&nbsp;&nbsp;stage:&nbsp;deploy-us-east-1<br/>&nbsp;&nbsp;environment:&nbsp;production-us-east-1<br/>&nbsp;&nbsp;image:&nbsp;python:3.8-buster<br/>&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;==&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;before_script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;pip3&nbsp;install&nbsp;awscli&nbsp;--upgrade<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;pip3&nbsp;install&nbsp;aws-sam-cli&nbsp;--upgrade<br/>&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;build<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;package&nbsp;--output-template-file&nbsp;invoke-labeller-packaged.yaml&nbsp;--s3-bucket&nbsp;open-devops-code-us-east-1-$AWS_ACCOUNT_ID&nbsp;--region&nbsp;us-east-1<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;deploy&nbsp;--template-file&nbsp;invoke-labeller-packaged.yaml&nbsp;--stack-name&nbsp;OpenDevOpsInvokeLabeller&nbsp;&nbsp;--s3-bucket&nbsp;open-devops-code-us-east-1-$AWS_ACCOUNT_ID&nbsp;--capabilities&nbsp;CAPABILITY_IAM&nbsp;--region&nbsp;us-east-1&nbsp;--no-fail-on-empty-changeset<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#test-us-east-1:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;stage:&nbsp;test-us-east-1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;environment:&nbsp;production-us-east-1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;image:&nbsp;golang:buster<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;==&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;git&nbsp;clone&nbsp;https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;cd&nbsp;systemtests<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;go&nbsp;test&nbsp;-v&nbsp;./...&nbsp;-aws_region=us-east-1<br/><br/>#CA-CENTRAL-1<br/>deploy-central-1:<br/>&nbsp;&nbsp;stage:&nbsp;deploy-ca-central-1<br/>&nbsp;&nbsp;environment:&nbsp;production-ca-central-1<br/>&nbsp;&nbsp;image:&nbsp;python:3.8-buster<br/>&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;==&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;before_script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;pip3&nbsp;install&nbsp;awscli&nbsp;--upgrade<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;pip3&nbsp;install&nbsp;aws-sam-cli&nbsp;--upgrade<br/>&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;build<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;package&nbsp;--output-template-file&nbsp;invoke-labeller-packaged.yaml&nbsp;--s3-bucket&nbsp;open-devops-code-ca-central-1-$AWS_ACCOUNT_ID&nbsp;--region&nbsp;ca-central-1<br/>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;sam&nbsp;deploy&nbsp;--template-file&nbsp;invoke-labeller-packaged.yaml&nbsp;--stack-name&nbsp;OpenDevOpsInvokeLabeller&nbsp;&nbsp;--s3-bucket&nbsp;open-devops-code-ca-central-1-$AWS_ACCOUNT_ID&nbsp;--capabilities&nbsp;CAPABILITY_IAM&nbsp;--region&nbsp;ca-central-1&nbsp;--no-fail-on-empty-changeset<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#test-central-1:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;stage:&nbsp;test-ca-central-1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;environment:&nbsp;production-ca-central-1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;image:&nbsp;golang:buster<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;rules:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;if:&nbsp;$CI_COMMIT_BRANCH&nbsp;==&nbsp;$CI_DEFAULT_BRANCH&nbsp;&amp;&amp;&nbsp;$CI_PIPELINE_SOURCE&nbsp;!=&nbsp;&quot;merge_request_event&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;script:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;export&nbsp;AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;git&nbsp;clone&nbsp;https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;cd&nbsp;systemtests<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;go&nbsp;test&nbsp;-v&nbsp;./...&nbsp;-aws_region=ca-central-1</code></pre> </div> <script type="text/x-component"> { "type":"imkt.components.CodeBlock", "params": { } } </script> <div class="container-fluid xs-none"> <div class="row flex-container"> <div class="column " > <div class="intra-div no-flex column__background b50 "> <div class="component component--image-heading-textblock margin-default"> <div class="component__image component__image--left"> <div class="component__image "> <div class="div-inline-svg wpl-icon-size-24 wpl-icon-corner-3"> <svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio='xMinYMin meet' viewBox="0 0 36 36"><path style="fill: #0052cc; fill-rule:evenodd;" d="M18,0A18,18,0,1,0,36,18,18,18,0,0,0,18,0Zm.16,10.1a2.68,2.68,0,1,0-2.69-2.68A2.68,2.68,0,0,0,18.16,10.1Zm3.16,15.64a1.42,1.42,0,0,1,.06,2.84H15A1.42,1.42,0,0,1,15,25.74h1.81V15H15a1.43,1.43,0,0,1-1.42-1.35v-.07a1.42,1.42,0,0,1,1.35-1.42h3.25a1.43,1.43,0,0,1,1.42,1.35V25.74Z"/></svg> </div> </div> </div> <div class="component__heading-textblock default component__heading-textblock--right" style="padding-left:24px;"> <p>The execution of the integration tests is commented out for now. The system tests will only pass when the entire application is deployed. Uncomment the integration test steps in your repository, and do another push to run the deployment pipeline after all components of ImageLabeller are deployed. You <strong>must update the git clone line</strong> for SystemTests to be your SystemTests repository.</p> </div> </div> </div> </div> </div> </div> </div> <div class="column no-flex" > <div class="component component--heading-textblock text-oversized"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Update src/app.py with AWS SageMaker endpoint </h3> <p>Open InvokeLabeller’s src/app.py file and look for query_endpoint. Change the endpoint_name, and client region_name to match your AWS SageMaker notebook.</p> </div> <div class="component component--codeblock"> <pre><code>def&nbsp;query_endpoint(img):<br/>&nbsp;&nbsp;endpoint_name&nbsp;=&nbsp;&#039;jumpstart-dft-image-labeller-endpoint&#039;<br/>&nbsp;&nbsp;client&nbsp;=&nbsp;boto3.client(service_name=&#039;runtime.sagemaker&#039;,&nbsp;region_name=&#039;us-west-1&#039;)<br/>&nbsp;&nbsp;response&nbsp;=&nbsp;client.invoke_endpoint(EndpointName=endpoint_name,&nbsp;ContentType=&#039;application/x-image&#039;,&nbsp;Body=img)<br/>&nbsp;&nbsp;model_predictions&nbsp;=&nbsp;json.loads(response[&#039;Body&#039;].read())[&#039;predictions&#039;][0]<br/>&nbsp;&nbsp;return&nbsp;model_predictions</code></pre> </div> <script type="text/x-component"> { "type":"imkt.components.CodeBlock", "params": { } } </script> </div> <div class="column no-flex" > <div class="component component--heading-textblock text-oversized"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Pushing to a feature branch </h3> <p>Run the following from the command line to push your changes to the IM-10 branch of your InvokeLabeller repository. Include the Jira issue ID in commit messages, and branch names to enable the Jira GitLab integration to keep track of what is happening in your project.</p> </div> <div class="component component--codeblock"> <pre><code>git&nbsp;add&nbsp;--all<br/>git&nbsp;commit&nbsp;-m&nbsp;&quot;IM-10&nbsp;add&nbsp;.gitlab-ci.yml&nbsp;to&nbsp;InvokeLabeller&quot;<br/>git&nbsp;push&nbsp;-u&nbsp;origin&nbsp;IM-10</code></pre> </div> <script type="text/x-component"> { "type":"imkt.components.CodeBlock", "params": { } } </script> <div class="component component--textblock text-oversized"> <p>Click <strong>CI/CD,</strong> then <strong>Pipelines</strong> to see the pipeline run.</p> </div> <div class="component component--image"> <img id="f937d657" alt="screenshot of pipeline running in gitlab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:06f6da58-4877-422c-a2cc-22873f81ae59/screenshot_gitlab_pipelinerunninginvokelabeller.png?cdnVersion=2631" loading="lazy" /> </div> </div> <div class="column no-flex" > <div class="component component--heading-textblock text-oversized"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Create a merge request </h3> <p><a data-event="clicked" data-uuid="77de9f53-6d0" data-event-component="linkButton" data-event-container="headingTextBlock" data-schema-version="1" data-label="Create a merge" data-label-english="Create a merge" href="https://hello.atlassian.net/wiki/spaces/~881875339/pages/1223432159/GitLab+Quick+Start+Guide+1st+Draft#createmergerequest">Create a merge</a> request to deploy to your production environments after GitLab deploys to your test environments. Choose the IM-10 branch.</p> </div> <div class="component component--image"> <img id="ed451248" alt="screenshot of creating merge request in gitlab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:46a6d6b8-6086-4ce3-81e6-4f2e84ea90db/screenshot_gitlab_createmergerequestinvokelabeller.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--textblock text-oversized"> <p><strong>Merge</strong> the changes to mainline after the merge request pipeline completes. Click <strong>CI/CD</strong>, then <strong>Pipelines</strong> to see the running Production pipeline.</p> </div> <div class="component component--image"> <img id="721621dc" alt="screenshot of running production pipeline in gitlab" class="component__image" src="https://wac-cdn.atlassian.com/dam/jcr:221f4820-b1f9-455b-bf5c-b64dba9b64f5/screenshot_gitlab_runningproductionpipelineinvokelabeller.png?cdnVersion=2631" loading="lazy" /> </div> </div> <div class="column no-flex" > <div class="container-fluid xs-none"> <div class="row flex-container"> <div class="column " > <div class="intra-div no-flex column__background g50 "> <div class="component component--image-heading-textblock margin-default"> <div class="component__image component__image--left"> <div class="component__image "> <div class="div-inline-svg wpl-icon-size-24 wpl-icon-corner-3"> <svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio='xMinYMin meet' viewBox="0 0 36 36"><path style="fill: #00875a; fill-rule:evenodd;" d="M18,0A18,18,0,1,0,36,18,18,18,0,0,0,18,0Zm7.08,14.61a1.43,1.43,0,0,0,0-2l0,0a1.44,1.44,0,0,0-2,0l-7.48,7.48L13,17.56l-.05,0a1.42,1.42,0,0,0-2,2.06l3.57,3.57.05.05a1.43,1.43,0,0,0,2-.05L25,14.65Z"/></svg> </div> </div> </div> <div class="component__heading-textblock default component__heading-textblock--right" style="padding-left:24px;"> <p>If you’ve made this far, congratulations! You just deployed ImageLabeller. The next step is to <a data-event="clicked" data-uuid="3af1fe1d-dc0" data-event-component="linkButton" data-event-container="richText" data-schema-version="1" data-label="set up monitoring ImageLabeller with Opsgenie" data-label-english="set up monitoring ImageLabeller with Opsgenie" href="/devops/monitor-imagelabeller/monitor-with-opsgenie">set up monitoring ImageLabeller with Opsgenie</a>.</p> </div> </div> </div> </div> </div> </div> </div> <div class="column s0 between" > <div class="component component--author--large "> <div class="component--author--large--content"> <div class="component--author--large--content--wrapper--picture"> <img class="component--author--large--content--picture--image" src="https://wac-cdn.atlassian.com/dam/jcr:7509aefb-43e8-401d-90fe-0850cbe6bb13/wmarusiak_headshot%20(1).png?cdnVersion=2631" loading="lazy" alt="Warren Marusiak"> </div> <div class="component--author--large--content--wrapper"> <div class="component--author--large--content--wrapper--name"> Warren Marusiak </div> <div class="component--author--large--content--wrapper--description"> <p>Warren is a Canadian developer from Vancouver, BC with over 10 years of experience. He came to Atlassian from AWS in January of 2021.</p> </div> </div> </div> </div> </div> <div class="column s0 between" > <div class="component component--horizontal-rule align-center"> <hr class="default " /> </div> </div> <div class="column column-xs-8 column-xl-9 text-left s0 between" > <div class="component component--heading"> <h6 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- eyebrows heading" > Share this article </h6> </div> <div class="imkt-social-buttons-group"> <div class="imkt-social-buttons standard"> <ul class="align left"> <li class="imkt-social-button social-code facebook"> <a target="_blank" rel="noopener noreferrer" href="https://www.facebook.com/dialog/feed?app_id=743864389089816&caption=Deploy%20ImageLabeller%20with%20GitLab&link=https://www.atlassian.com/devops/deploy-imagelabeller/gitlab&description=Use%20GitLab%20to%20deploy%20ImageLabeller%2C%20a%20simple%20demo%20application%20from%20Atlassian%20built%20on%20AWS%20that%20uses%20machine%20learning%20to%20apply%20labels%20to%20images.&picture=https://wac-cdn.atlassian.com/dam/jcr:325fff80-6aa7-4d46-a3f9-4db402f17a8d/devops-loop-illustrations.png&name=Deploy%20ImageLabeller%20with%20GitLab" title="Share on Facebook" data-uuid="4fb459fa-83c2-45f0-8b7a-0e253b3556fa-shareonfacebook" onclick="window.open(this.href,'', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=400,width=600'); return false;"></a> </li> <li class="imkt-social-button social-code twitter"> <a target="_blank" rel="noopener noreferrer" href="//twitter.com/share?text=Use%20GitLab%20to%20deploy%20ImageLabeller%2C%20a%20simple%20demo%20application%20from%20Atlassian%20built%20on%20AWS%20that%20uses%20machine%20learning%20to%20apply%20labels%20to%20images.&url=https://www.atlassian.com/devops/deploy-imagelabeller/gitlab&via=Atlassian" data-uuid="4fb459fa-83c2-45f0-8b7a-0e253b3556fa-shareontwitter" title="Share on Twitter" onclick="window.open(this.href,'', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=400,width=600'); return false;"></a> </li> <li class="imkt-social-button social-code linked-in"> <a target="_blank" rel="noopener noreferrer" href="http://www.linkedin.com/shareArticle?mini=true&url=https://www.atlassian.com/devops/deploy-imagelabeller/gitlab&title=Deploy%20ImageLabeller%20with%20GitLab&summary=Use%20GitLab%20to%20deploy%20ImageLabeller%2C%20a%20simple%20demo%20application%20from%20Atlassian%20built%20on%20AWS%20that%20uses%20machine%20learning%20to%20apply%20labels%20to%20images.&source=Atlassian" data-uuid="4fb459fa-83c2-45f0-8b7a-0e253b3556fa-shareonlinkedin" title="Share on LinkedIn" onclick="window.open(this.href,'', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=400,width=600'); return false;"></a> </li> </ul> </div> </div> </div> <div class="column column-xs-4 column-xl-3 s0 between" > <div class="component component--heading" style="margin-bottom:-10px;padding-top:3px;"> <h5 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Next Topic </h5> </div> <div class="component component--link-button "> <a href="/devops/monitor-imagelabeller/monitor-with-opsgenie" data-event="clicked" data-uuid="152fc09c-c6" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Monitor with Opsgenie" data-label-english="Monitor with Opsgenie" class="component__link link-arrow " > Monitor with Opsgenie<svg class="link-arrow-image" width="11px" height="8px" viewBox="0 0 11 8" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g class="group-path" transform="translate(-138.000000, -586.000000)" fill="#0052CC"><path d="M145.2803,586.507862 L144.2193,587.568863 L145.9393,589.287862 L138.7503,589.287862 C138.3363,589.287862 138.0003,589.623862 138.0003,590.037862 C138.0003,590.451862 138.3363,590.787862 138.7503,590.787862 L145.9393,590.787862 L144.2193,592.507862 L145.2803,593.568863 L148.8103,590.037862 L145.2803,586.507862 Z"></path></g></g></svg> </a> </div> </div> </div> </div> </div> </div> </div> <div class="container-fluid md-cozy theme-two"> <div class="row reduced-row"> <div class="column s0 between" > <div class="component component--heading-textblock"> <h2 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Recommended reading </h2> <p>Bookmark these resources to learn about types of DevOps teams, or for ongoing updates about DevOps at Atlassian.</p> </div> </div> <div class="column column-md-4 s0 between" > <div class="component component--image-heading-textblock"> <div class="component__image"> <img id="5d984b31" alt="Devops illustration" class="component__image" style="width:100%;" src="https://wac-cdn.atlassian.com/dam/jcr:bd9d8b2c-ca36-444f-8595-719cb1990e64/Devops-community.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component__heading-textblock"> <h4 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > DevOps community </h4> </div> </div> <div class="component component--link-button "> <a href="https://community.atlassian.com/t5/DevOps/ct-p/devops" data-event="clicked" data-uuid="c53216e8-e1" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Learn more" data-label-english="Learn more" class="component__link link-arrow " > Learn more<svg class="link-arrow-image" width="11px" height="8px" viewBox="0 0 11 8" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g class="group-path" transform="translate(-138.000000, -586.000000)" fill="#0052CC"><path d="M145.2803,586.507862 L144.2193,587.568863 L145.9393,589.287862 L138.7503,589.287862 C138.3363,589.287862 138.0003,589.623862 138.0003,590.037862 C138.0003,590.451862 138.3363,590.787862 138.7503,590.787862 L145.9393,590.787862 L144.2193,592.507862 L145.2803,593.568863 L148.8103,590.037862 L145.2803,586.507862 Z"></path></g></g></svg> </a> </div> </div> <div class="column column-md-4 s0 between" > <div class="component component--image-heading-textblock"> <div class="component__image"> <img id="d8aef67c" alt="Devops illustration" class="component__image" style="width:100%;" src="https://wac-cdn.atlassian.com/dam/jcr:297108ea-d232-4368-af51-b53af230c4fe/Simulation-workshop.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component__heading-textblock"> <h4 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > DevOps learning path </h4> </div> </div> <div class="component component--link-button "> <a href="https://university.atlassian.com/student/path/837218-devops?sid=40f7e9cd-efb5-4168-8587-49c3d15610a0&amp;sid_i=0" data-event="clicked" data-uuid="8d7c5c19-f4" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Learn more" data-label-english="Learn more" class="component__link link-arrow " > Learn more<svg class="link-arrow-image" width="11px" height="8px" viewBox="0 0 11 8" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g class="group-path" transform="translate(-138.000000, -586.000000)" fill="#0052CC"><path d="M145.2803,586.507862 L144.2193,587.568863 L145.9393,589.287862 L138.7503,589.287862 C138.3363,589.287862 138.0003,589.623862 138.0003,590.037862 C138.0003,590.451862 138.3363,590.787862 138.7503,590.787862 L145.9393,590.787862 L144.2193,592.507862 L145.2803,593.568863 L148.8103,590.037862 L145.2803,586.507862 Z"></path></g></g></svg> </a> </div> </div> <div class="column column-md-4 s0 between" > <div class="component component--image-heading-textblock"> <div class="component__image"> <img id="6cced032" alt="Map illustration" class="component__image" style="width:100%;" src="https://wac-cdn.atlassian.com/dam/jcr:25f6330a-4191-408f-a4e5-2e24bfba67b4/Maturity-model.png?cdnVersion=2631" loading="lazy" /> </div> <div class="component__heading-textblock"> <h4 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Get started for free </h4> </div> </div> <div class="component component--link-button "> <a href="/solutions/devops" data-event="clicked" data-uuid="9a24dd9f-e7" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Learn more" data-label-english="Learn more" class="component__link link-arrow " > Learn more<svg class="link-arrow-image" width="11px" height="8px" viewBox="0 0 11 8" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g class="group-path" transform="translate(-138.000000, -586.000000)" fill="#0052CC"><path d="M145.2803,586.507862 L144.2193,587.568863 L145.9393,589.287862 L138.7503,589.287862 C138.3363,589.287862 138.0003,589.623862 138.0003,590.037862 C138.0003,590.451862 138.3363,590.787862 138.7503,590.787862 L145.9393,590.787862 L144.2193,592.507862 L145.2803,593.568863 L148.8103,590.037862 L145.2803,586.507862 Z"></path></g></g></svg> </a> </div> </div> <div class="column column-md-6 s0 between" > <div class="component component--heading"> <h3 class="fnt-wt font-wt- fnt-mg font-mgn- fnt-ln font-lnh- heading" > Sign up for our DevOps newsletter </h3> </div> <div class="component component--exact-target-form theme-one"> <form class="exact-target-form" data-mailing-list-id="1412722"> <div class="exact-target-form__label"> <label for="et-f89443c5-adf8-4b33-90e3-745f8556c767">Email address</label> </div> <div class="exact-target-form__email-input"> <input type="email" name="et-f89443c5-adf8-4b33-90e3-745f8556c767" required id="et-f89443c5-adf8-4b33-90e3-745f8556c767" /> </div> <div class="exact-target-form__hp-field"> <input type="text" name="list_name" aria-label="Keep this field blank" /> </div> <div class="exact-target-form__submit-input"> <input type="submit" data-event="clicked" data-uuid="f89443c5-ad" data-event-component="linkButton" data-event-container="exactTargetForm" data-schema-version="1" value="Sign up" class="button button--three button--regular button--primary" /> </div> </form> <div class="exact-target-form__message hide-all"> <p>Thank you for signing up</p> </div> <script type="text/x-component-translate"> /* <sl:translate_json> */ { "sl_translate": "requiredError, invalidEmailError, submitError, consentLabel", "type":"imkt.components.ExactTargetFormV2", "params": { "formId":"f89443c5-adf8-4b33-90e3-745f8556c767", "consentYes":"", "subscriptionKey":"atlassian.devOpsCentral", "eapTermsOfService":"", "useSocs":false, "exactTargetId":"1412722", "name":"et-f89443c5-adf8-4b33-90e3-745f8556c767", "requiredError":"This field is required", "invalidEmailError":"This field requires a valid email address", "submitError":"There was a server error submitting", "redirectUrl":"", "useGdpr":true, "needsConsent":false, "consentLabel":"", "privacyPolicy":"", "gdprId":"gdpr-f89443c5-adf8-4b33-90e3-745f8556c767", "site":"atlassian", "useSubmissionBlock":"false", "postSubmissionBlockId":"" } } /* </sl:translate_json> */ </script></div> </div> </div> </div> </main> <footer id="footer" class="footer footer--wac"> <div class="container-fluid"> <div class="container-fluid"> <div class="row reduced-row"> <div class="component s0 between component--block" id="footer-block-above" style="margin:0;" > <style> footer#footer { background: none; } #footer > .container-fluid > .container-fluid > .row { width: 1200px; margin: auto; max-width: 100%; min-width: auto; } div#bottom-links-footer { padding: 0 40px; } footer#footer.footer.footer--wac .footer-standard-links a { color: #101214; margin-bottom: 24px; } .see-all-footer { padding-top: 30px; } .component--block.left-footer a { font-weight: 600; } .footer .language-selector:before { content: ""; width: 19px; height: 19px; background-size: 100% 100%; background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAYAAACoPemuAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAT0SURBVHgBzVg/VxtHEJ/ZI7YQPOcCKI/y/AmsdOkiOndBpauITwB8AlCVlw46dxZdOnCXznKXLnKXLucmDyME6wQLGUu7nt07nW7/nJCwC+Y9/bnd2Zm5mdnZ3yzCHShcW6uBgCog/AQSqwAyVMPpNAfAGFDGIOE1BNjm3W4H5iSclTGMohD+u9qmJQ0yJIK5SBkKTfgmaPPT03imFbMwhStre/SzAxOv3JHIQJAtfnHevJVz2mS4vh7BzeiYhFXhqxIZ+CDYmOY9VjQRrq7+AjfDvwqM4jCTfmj7JygVSHa4+v0mzGOYNkpiC9zQKYOagLjrrtL81hB2QCw81mt0GE01IMWx1uWhwDWK3kLC7x4lhyCW6/zy3z9Ki0vHYBiNMb/obpQWyyo1atmwhB/hITvk3bOT0sNHL2mnfkejVgRws1RejAfX12/yo4bHdE5J8QJc2uW97g7nMQ9XKw1nV4pgI/kdHjie+TRSGwc4P1XGN5QsR7rEA627yDBK9Fdghw/lFu2ig4kQuW1KxZZSmijnHFCYiqVs6FKTkpaFuGXKIJ16k00oC2VaEuxk3OUXvecZT6VSpfDsGxxioT4YXGWbgULyd6lcrtHfKOP5ePNxcN1vT3j6HQr7e/r7NCdpXaXCmE97LHGjKpx5wpbhKW0EmN6S8HLsLXvcGtm2WRLZ8tDmG3s3CeWnUc3MG8oTETQ9CmvGM2Mt8JEYqvF8SQn1MebwjfZtPjpddiaGSdizLDiyPaHDaCY9572zE/CQzjWSYYrETT8fWF5DXT6YR6HKm5YtBEayZiqiA3oaMTyx+H/28umdnPeajJR3mUehP29s4wurekrDYcdRmNudY0p2Mpjog5AL09BlFoWIT4xnBlOhTBqm2Bj8v1/zMtubhXKZ0Vc0k0KJJt8QZzgvpRluKSIvG2E245mcgFS/JNw/4gzuJ4X31TC4r4bxhRTuRtmQwB84d5uHcKXyj8k3fEwbL54iHDQSkTKHVhSs7m05fElz82oygjGVC2kaway6lvFS15On4MHtcFvatY+99/IJC6NJ+ZY5FRwLKrTEt+ZzwdY3ZT2xFMYFfE4tZU7dklD1VWia6FiL/S9gyoqMZ0+NTMCpBbcEthk/P29bqDM74U3mBfvsK3iBnEIbRi8vu8X7ZmhhfoLplOPprrSQQA4XjSk9P02IcnVVnGcaSuX1QZvHMXeNt3CgaoxhXC6cE14p/WBBIc8LOHBp2hwegWv8noMDR0E7M8yLi4TcoePKDKkLZWq+cHobllRhxrNS2Vb9gLlyggMzzK+wNmFulYTrOc6n+dZq0O/Ht+F5RZ72rsUvz44mhute8rlplGoBz+vjJ7PyU2MBdpdNja/pOScke/nWK2lqnPauOZlXnnKaY561gCkZDa/qdkrlpXfgdkvkuaWo9O2jN9S8kmeXGpD3iBBV8tqRNnAkLLideEuFvMQWfqWBfbAJ2TN++e5PYwg85B4lGXusjpV0nZ34++4VFfEHUCeUrGqe/7ZI9a29XssZhgKiPKCrAnwBX3b1NE6L0DuHctdn1FTDtLSQQsNUdz7vRd1tpC5bgrq/t0gomLZc5RzlzmFyWYIRfPHFnfbgb7T7nuW7dx/NftWpvBdQNdeF8w5Xnao4i+UDdTEz0wq4A4Uh9aIKHklCBahrmvrkL4c5bZ4Ozb1WB3dyHs9HnwFJdEGUx9BaTwAAAABJRU5ErkJggg==); } .language-selector { display: flex; gap: 5px; margin-right: 20px; } .footer select#footer-language-selector { background: none; } .column.footer-standard-links > .intra-div { column-gap: 24px; row-gap: 48px; display: grid; grid-template-columns: 1fr 1fr 1fr 1fr; } @media (max-width: 1023px) { .column.footer-standard-links > .intra-div { grid-template-columns: 1fr 1fr; } } @media (max-width: 768px) { .column.footer-standard-links > .intra-div { grid-template-columns: 1fr; } } </style> </div> <div class="column footer-standard-links " style="border-radius:0 0 24px 24px;float:none;" > <div class="intra-div alignItemsStretch justifySpaceBetween wrap no s40 between column__background n10 has-border border-color- padding-24 padding-style-allSides allSides border-radius-15 border-width-0"> <div class="component s0 between component--block left-footer" > <div class="component component--image"> <img id="d8cf6e7a" alt="" class="component__image xs-outerspace-bottom" style="width:26px;height:26px;" src="https://wac-cdn.atlassian.com/dam/jcr:9c4bf443-5045-4ff9-a48d-36ae466f3ced/logos-atlassian-mini-icon-onecolor-blue.svg?cdnVersion=2631" loading="lazy" /> </div> <div class="component component--link-button "> <a href="/company" data-event="clicked" data-uuid="fbf3b54c-4e" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Company" data-label-english="Company" class="component__link default " > Company </a> </div> <div class="component component--link-button "> <a href="/company/careers" data-event="clicked" data-uuid="658e91b4-45" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Careers" data-label-english="Careers" class="component__link default " > Careers </a> </div> <div class="component component--link-button "> <a href="/company/events" data-event="clicked" data-uuid="f547dec4-ee" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Events" data-label-english="Events" class="component__link default " > Events </a> </div> <div class="component component--link-button "> <a href="https://atlassian.com/blog" data-event="clicked" data-uuid="104c1e17-07" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Blogs" data-label-english="Blogs" class="component__link default " > Blogs </a> </div> <div class="component component--link-button "> <a href="https://investors.atlassian.com/" data-event="clicked" data-uuid="8dff4c3d-81" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Investor Relations" data-label-english="Investor Relations" class="component__link default " > Investor Relations </a> </div> <div class="component component--link-button "> <a href="https://www.atlassianfoundation.org/" data-event="clicked" data-uuid="99564f33-ce" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Atlassian Foundation" data-label-english="Atlassian Foundation" class="component__link default " > Atlassian Foundation </a> </div> <div class="component component--link-button "> <a href="/company/contact" data-event="clicked" data-uuid="f40912fd-d4" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Contact us" data-label-english="Contact us" class="component__link default " > Contact us </a> </div> </div> <div class="component flexCol alignItemsBaseline justifyStart noWrap anchorLastItem s0 between component--block" > <div class="component component--heading"> <div class="color-head text-n900"> <h5 class="fnt-wt font-wt-600 fnt-mg font-mgn- fnt-ln font-lnh- heading" > products </h5> </div> </div> <div class="component component--link-button "> <a href="/software/rovo" data-event="clicked" data-uuid="887f4120-85" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Rovo" data-label-english="Rovo" class="component__link default " > Rovo </a> </div> <div class="component component--link-button "> <a href="/software/jira" data-event="clicked" data-uuid="7c6497e9-48" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Jira" data-label-english="Jira" class="component__link default " > Jira </a> </div> <div class="component component--link-button "> <a href="/software/jira-align" data-event="clicked" data-uuid="80aff0eb-ad" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Jira Align" data-label-english="Jira Align" class="component__link default " > Jira Align </a> </div> <div class="component component--link-button "> <a href="/software/jira/service-management" data-event="clicked" data-uuid="0a3a2afd-da" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Jira Service Management" data-label-english="Jira Service Management" class="component__link default " > Jira Service Management </a> </div> <div class="component component--link-button "> <a href="/software/confluence" data-event="clicked" data-uuid="8837ace6-b7" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Confluence" data-label-english="Confluence" class="component__link default " > Confluence </a> </div> <div class="component component--link-button "> <a href="/software/trello" data-event="clicked" data-uuid="6619f65d-b2" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Trello" data-label-english="Trello" class="component__link default " > Trello </a> </div> <div class="component component--link-button "> <a href="https://bitbucket.org/product" data-event="clicked" data-uuid="89700592-1c" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Bitbucket" data-label-english="Bitbucket" class="component__link default " > Bitbucket </a> </div> <div class="component component--link-button see-all-footer "> <a href="/software" data-event="clicked" data-uuid="5e63d93e-26" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="See all products" data-label-english="See all products" class="component__link link-arrow " > See all products<svg class="link-arrow-image" width="11px" height="8px" viewBox="0 0 11 8" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g class="group-path" transform="translate(-138.000000, -586.000000)" fill="#0052CC"><path d="M145.2803,586.507862 L144.2193,587.568863 L145.9393,589.287862 L138.7503,589.287862 C138.3363,589.287862 138.0003,589.623862 138.0003,590.037862 C138.0003,590.451862 138.3363,590.787862 138.7503,590.787862 L145.9393,590.787862 L144.2193,592.507862 L145.2803,593.568863 L148.8103,590.037862 L145.2803,586.507862 Z"></path></g></g></svg> </a> </div> </div> <div class="component flexCol alignItemsBaseline justifyStart noWrap anchorLastItem s0 between component--block" > <div class="component component--heading"> <div class="color-head text-n900"> <h5 class="fnt-wt font-wt-600 fnt-mg font-mgn- fnt-ln font-lnh- heading" > Resources </h5> </div> </div> <div class="component component--link-button "> <a href="https://support.atlassian.com/" data-event="clicked" data-uuid="e22460f0-ec" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Technical support" data-label-english="Technical support" class="component__link default " > Technical support </a> </div> <div class="component component--link-button "> <a href="/licensing/purchase-licensing" data-event="clicked" data-uuid="fc29565e-9f" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Purchasing &amp; licensing" data-label-english="Purchasing & licensing" class="component__link default " > Purchasing &amp; licensing </a> </div> <div class="component component--link-button "> <a href="https://community.atlassian.com/" data-event="clicked" data-uuid="e94fb789-37" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Atlassian Community" data-label-english="Atlassian Community" class="component__link default " > Atlassian Community </a> </div> <div class="component component--link-button "> <a href="https://confluence.atlassian.com/kb" data-event="clicked" data-uuid="b834bedf-ea" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Knowledge base" data-label-english="Knowledge base" class="component__link default " > Knowledge base </a> </div> <div class="component component--link-button "> <a href="https://marketplace.atlassian.com/" data-event="clicked" data-uuid="45742a09-c9" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Marketplace" data-label-english="Marketplace" class="component__link default " > Marketplace </a> </div> <div class="component component--link-button "> <a href="https://my.atlassian.com/products/index" data-event="clicked" data-uuid="a97e819e-0f" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="My account" data-label-english="My account" class="component__link default " > My account </a> </div> <div class="component component--link-button see-all-footer "> <a href="https://support.atlassian.com/contact/" data-event="clicked" data-uuid="c6ad22a8-4a" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Create support ticket" data-label-english="Create support ticket" class="component__link link-arrow " > Create support ticket<svg class="link-arrow-image" width="11px" height="8px" viewBox="0 0 11 8" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g class="group-path" transform="translate(-138.000000, -586.000000)" fill="#0052CC"><path d="M145.2803,586.507862 L144.2193,587.568863 L145.9393,589.287862 L138.7503,589.287862 C138.3363,589.287862 138.0003,589.623862 138.0003,590.037862 C138.0003,590.451862 138.3363,590.787862 138.7503,590.787862 L145.9393,590.787862 L144.2193,592.507862 L145.2803,593.568863 L148.8103,590.037862 L145.2803,586.507862 Z"></path></g></g></svg> </a> </div> </div> <div class="component flexCol alignItemsBaseline justifyStart noWrap anchorLastItem s0 between component--block" > <div class="component component--heading"> <div class="color-head text-n900"> <h5 class="fnt-wt font-wt-600 fnt-mg font-mgn- fnt-ln font-lnh- heading" > Learn </h5> </div> </div> <div class="component component--link-button "> <a href="/partners" data-event="clicked" data-uuid="c16e749d-b8" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Partners" data-label-english="Partners" class="component__link default " > Partners </a> </div> <div class="component component--link-button "> <a href="/university" data-event="clicked" data-uuid="21032dda-9c" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Training &amp; certification" data-label-english="Training & certification" class="component__link default " > Training &amp; certification </a> </div> <div class="component component--link-button "> <a href="https://confluence.atlassian.com/display/ALLDOC/Atlassian+Documentation" data-event="clicked" data-uuid="071e1282-f9" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Documentation" data-label-english="Documentation" class="component__link default " > Documentation </a> </div> <div class="component component--link-button "> <a href="/developers" data-event="clicked" data-uuid="9372cc4e-70" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Developer resources" data-label-english="Developer resources" class="component__link default " > Developer resources </a> </div> <div class="component component--link-button "> <a href="/enterprise/success" data-event="clicked" data-uuid="667d04b1-f4" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Enterprise services" data-label-english="Enterprise services" class="component__link default " > Enterprise services </a> </div> <div class="component component--link-button see-all-footer "> <a href="/resources" data-event="clicked" data-uuid="6c951c94-0f" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="See all resources" data-label-english="See all resources" class="component__link link-arrow " > See all resources<svg class="link-arrow-image" width="11px" height="8px" viewBox="0 0 11 8" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g class="group-path" transform="translate(-138.000000, -586.000000)" fill="#0052CC"><path d="M145.2803,586.507862 L144.2193,587.568863 L145.9393,589.287862 L138.7503,589.287862 C138.3363,589.287862 138.0003,589.623862 138.0003,590.037862 C138.0003,590.451862 138.3363,590.787862 138.7503,590.787862 L145.9393,590.787862 L144.2193,592.507862 L145.2803,593.568863 L148.8103,590.037862 L145.2803,586.507862 Z"></path></g></g></svg> </a> </div> </div> </div> </div> <div class="component component--block" id="bottom-links-footer" > <div class="intra-div flexRow alignContentStretch alignItemsStretch justifySpaceBetween wrap no s16 between flexColSm has-border border-color- padding-40 padding-style-leftRight allSides border-radius-default border-width-0"> <div class="component flexRow alignItemsCenter justifyEnd noWrap no s24 between flexColSm component--block footer-callout-column" style="margin-top:0;" > <div class="component component--heading" style="margin-right:auto;"> <p class="font-xs-14 fnt-wt font-wt- fnt-mg font-mgn-0 fnt-ln font-lnh- heading" > Copyright © 2025 Atlassian </p> </div> </div> <div class="component flexRow alignItemsStretch justifyStart noWrap no s24 between flexColXs component--block footer-callout-column" > <div class="component component--link-button "> <a href="/legal/privacy-policy#what-this-policy-covers" data-event="clicked" data-uuid="2c84a357-37" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Privacy Policy" data-label-english="Privacy Policy" class="component__link default " > Privacy Policy </a> </div> <div class="component component--link-button "> <a href="/trust" data-event="clicked" data-uuid="3927006b-a3" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Terms" data-label-english="Terms" class="component__link default " > Terms </a> </div> <div class="component component--link-button "> <a href="/trust" data-event="clicked" data-uuid="27e098b6-72" data-event-component="linkButton" data-event-container="linkButton" data-schema-version="1" data-label="Impressum" data-label-english="Impressum" class="component__link default " > Impressum </a> </div> <div class="language-selector"> <form action="#" method="GET"> <label for="footer-language-selector" aria-label="Choose language"></label> <select id="footer-language-selector" option="language-selector" name="url" style="width: 3.6rem"> <option disabled>Choose language</option> <option aria-label="Deutsch" aria-label="Deutsch" class="notranslate SL_opaque" data-lang="de" data-width="4rem" value="https://www.atlassian.com/de/devops/deploy-imagelabeller/gitlab">Deutsch</option> <option selected aria-label="English" aria-label="English" class="notranslate SL_opaque" data-lang="en" data-width="3.6rem" value="https://www.atlassian.com/devops/deploy-imagelabeller/gitlab">English</option> <option aria-label="Espa&#241;ol" aria-label="Espa&#241;ol" class="notranslate SL_opaque" data-lang="es" data-width="4rem" value="https://www.atlassian.com/es/devops/deploy-imagelabeller/gitlab">Espa&#241;ol</option> <option aria-label="Fran&#231;ais" aria-label="Fran&#231;ais" class="notranslate SL_opaque" data-lang="fr" data-width="4.1rem" value="https://www.atlassian.com/fr/devops/deploy-imagelabeller/gitlab">Fran&#231;ais</option> <option aria-label="Italiano" aria-label="Italiano" class="notranslate SL_opaque" data-lang="it" data-width="3.8rem" value="https://www.atlassian.com/it/devops/deploy-imagelabeller/gitlab">Italiano</option> <option aria-label="한국어" aria-label="한국어" class="notranslate SL_opaque" data-lang="ko" data-width="2.9rem" value="https://www.atlassian.com/ko/devops/deploy-imagelabeller/gitlab">한국어</option> <option aria-label="Nederlands" aria-label="Nederlands" class="notranslate SL_opaque" data-lang="nl" data-width="5.4rem" value="https://www.atlassian.com/nl/devops/deploy-imagelabeller/gitlab">Nederlands</option> <option aria-label="&#26085;&#26412;&#35486;" aria-label="&#26085;&#26412;&#35486;" class="notranslate SL_opaque" data-lang="ja" data-width="3.15rem" value="https://www.atlassian.com/ja/devops/deploy-imagelabeller/gitlab">&#26085;&#26412;&#35486;</option> <option aria-label="Polski" aria-label="Polski" class="notranslate SL_opaque" data-lang="pl" data-width="3.1rem" value="https://www.atlassian.com/pl/devops/deploy-imagelabeller/gitlab">Polski</option> <option aria-label="Portugu&#234;s" aria-label="Portugu&#234;s" class="notranslate SL_opaque" data-lang="br" data-width="4.85rem" value="https://www.atlassian.com/br/devops/deploy-imagelabeller/gitlab">Portugu&#234;s</option> <option aria-label="&#1088;&#1091;&#1089;&#1089;&#1082;&#1080;&#1081;" aria-label="&#1088;&#1091;&#1089;&#1089;&#1082;&#1080;&#1081;" class="notranslate SL_opaque" data-lang="ru" data-width="4.1rem" value="https://www.atlassian.com/ru/devops/deploy-imagelabeller/gitlab">&#1088;&#1091;&#1089;&#1089;&#1082;&#1080;&#1081;</option> <option aria-label="&#20013;&#25991;" aria-label="&#20013;&#25991;" class="notranslate SL_opaque" data-lang="zh" data-width="2.35rem" value="https://www.atlassian.com/zh/devops/deploy-imagelabeller/gitlab">&#20013;&#25991;</option> </select> <script type="text/x-component"> { "type":"imkt.components.LanguageSelector", "params": { } } </script></form> </div> </div> </div> </div> </div> </div> </div> </footer> <script type="text/x-component"> { "type":"imkt.components.PageLeaveTracking", "params": { } } </script> <script type="text/javascript" src="https://wac-cdn.atlassian.com/static/master/8974/assets/build/js/main.js?cdnVersion=2631"></script> <script type="text/javascript"> (function(){ var imkt = window.imkt = window.imkt || {}; imkt.isEditMode = false; imkt.isProduction = true; imkt.constants = imkt.constants || {}; imkt.constants.rootPath = "/"; imkt.constants.assetPath = "https://wac-cdn.atlassian.com/static/master/8974" + "/assets/"; imkt.constants.libPath = imkt.constants.assetPath + "bower_components/"; imkt.constants.cdnVersionQuery = "?cdnVersion=2631"; imkt.constants.isDevUser = false; imkt.constants.isFreeEnabled = true; imkt.constants.getUserAccounts = false; imkt.constants.headerLoginMenu = true; imkt.constants.public = true; imkt.constants.mobileBreakpoint = 640; })(); </script> <script type="text/x-component"> { "type":"imkt.pages.WACPage", "params": { } } </script> <script> function initializeATLAnalytics() { var pageViewProperties = { contentSite: 'DevOps Microsite', contentType: 'Microsite', contentProduct: 'Other' }; /* get url path, convert to dash format and add it to page view properties. */ var originProduct = window.location.pathname; pageViewProperties.originProduct = "wac" + (originProduct === '/' ? "" : originProduct.replace(new RegExp('/', 'g'),"-")); if (typeof ace !== 'undefined') { ace.analytics.Initializer.initWithPageAnalytics('kiv6wyh2nw', pageViewProperties, null, null, window.atlGlobalLoadStart); } window.initializeATLAnalyticsTriggered = true; const initAtlAnalyticsOnloadEvent = new CustomEvent('onLoadExternalJSATLAnalytics', { bubbles: true, cancelable: true, detail: 'Emit onLoad event for ATL Analytics function.' }); document.dispatchEvent(initAtlAnalyticsOnloadEvent); } </script> <script type = "text/javascript"> /** * function to load external js through javascript. * * @param url - javascript url * @param location - location of the dom (e.g. document.head) */ var loadExternalJS = function(url, location, callback){ var scriptTag = document.createElement('script'); scriptTag.src = url; scriptTag.type = 'text/javascript'; /* Then bind the event to the callback function. There are several events for cross browser compatibility. */ scriptTag.onreadystatechange = callback; scriptTag.onload = callback; window.atlGlobalLoadStart = new Date(); /* Fire the loading */ location.appendChild(scriptTag); }; </script> <script type="text/javascript" class="optanon-category-2"> loadExternalJS("https://atl-global.atlassian.com/js/atl-global.min.js", document.body, initializeATLAnalytics); </script> </body> <!-- LastRendered: Mar 30, 2025 9:25:37 AM --> </html>

Pages: 1 2 3 4 5 6 7 8 9 10