| <div role="region"><a href="#" class="skipToContent_fXgn">跳到主要内容</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/zh/"><div class="navbar__logo"><img src="/zh/img/logo.svg" alt="apache devlake" class="themedImage_ToTc themedImage--light_HNdA"><img src="/zh/img/logo.svg" alt="apache devlake" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache DevLake</b></a></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Docs</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/zh/docs/Overview/Introduction">Next</a></li><li><a class="dropdown__link" href="/zh/docs/v1.0/Overview/Introduction">v1.0 (Stable)</a></li><li><a class="dropdown__link" href="/zh/docs/v0.21/Overview/Introduction">v0.21</a></li><li><a class="dropdown__link" href="/zh/docs/v0.20/Overview/Introduction">v0.20</a></li><li><a class="dropdown__link" href="/zh/docs/v0.19/Overview/Introduction">v0.19</a></li><li><a class="dropdown__link" href="/zh/docs/v0.18/Overview/Introduction">v0.18</a></li><li><a class="dropdown__link" href="/zh/docs/v0.17/Overview/Introduction">v0.17</a></li><li><a class="dropdown__link" href="/zh/docs/v0.16/Overview/Introduction">v0.16</a></li><li><a class="dropdown__link" href="/zh/docs/v0.15/Overview/Introduction">v0.15</a></li></ul></div><a class="navbar__item navbar__link" href="/zh/livedemo/EngineeringLeads/DORA">Use Cases</a><a class="navbar__item navbar__link" href="/zh/community/">Community</a><a class="navbar__item navbar__link" href="/zh/team">Team</a><a class="navbar__item navbar__link" href="/zh/blogOverview">Blog</a><a href="https://github.com/apache/incubator-devlake" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub</a><a class="navbar__item navbar__link" href="/zh/download">Download</a><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">ASF</a><ul class="dropdown__menu"><li><a href="https://www.apache.org/" target="_blank" rel="noopener noreferrer" class="dropdown__link">Foundation</a></li><li><a href="https://www.apache.org/licenses/" target="_blank" rel="noopener noreferrer" class="dropdown__link">License</a></li><li><a href="https://www.apache.org/events/current-event" target="_blank" rel="noopener noreferrer" class="dropdown__link">Events</a></li><li><a href="https://www.apache.org/security/" target="_blank" rel="noopener noreferrer" class="dropdown__link">Security</a></li><li><a href="https://privacy.apache.org/policies/privacy-policy-public.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Privacy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship</a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks</a></li></ul></div><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="切换浅色/暗黑模式(当前为浅色模式)" aria-label="切换浅色/暗黑模式(当前为浅色模式)"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"><div class="navbar__search searchBarContainer_NW3z"><input placeholder="搜索" aria-label="Search" class="navbar__search-input"><div class="loadingRing_RJI3 searchBarLoadingRing_YnHq"><div></div><div></div><div></div><div></div></div></div></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="回到顶部" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/zh/docs/v0.15/Overview">Overview</a><button aria-label="打开/收起侧边栏菜单「Overview」" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/zh/docs/v0.15/GettingStarted">Getting Started</a><button aria-label="打开/收起侧边栏菜单「Getting Started」" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/zh/docs/v0.15/UserManuals">User Manuals</a><button aria-label="打开/收起侧边栏菜单「User Manuals」" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--active" aria-expanded="true" href="/zh/docs/v0.15/Metrics">Metrics</a><button aria-label="打开/收起侧边栏菜单「Metrics」" type="button" class="clean-btn menu__caret"></button></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/RequirementCount">Requirement Count</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/RequirementLeadTime">Requirement Lead Time</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/RequirementDeliveryRate">Requirement Delivery Rate</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/RequirementGranularity">Requirement Granularity</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/BugAge">Bug Age</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/BugCountPer1kLinesOfCode">Bug Count per 1k Lines of Code</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/IncidentAge">Incident Age</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/IncidentCountPer1kLinesOfCode">Incident Count per 1k Lines of Code</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/CommitCount">Commit Count</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/CommitAuthorCount">Commit Author Count</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/AddedLinesOfCode">Added Lines of Code</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/DeletedLinesOfCode">Deleted Lines of Code</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/PRCount">PR Count</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/PRCycleTime">PR Cycle Time</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/PRCodingTime">PR Coding Time</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/PRPickupTime">PR Pickup Time</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/PRReviewTime">PR Review Time</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/zh/docs/v0.15/Metrics/PRDeployTime">PR Deploy Time</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/PRTimeToMerge">PR Time To Merge</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/PRMergeRate">PR Merge Rate</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/PRReviewDepth">PR Review Depth</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/PRSize">PR Size</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/BuildCount">Build Count</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/BuildDuration">Build Duration</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/BuildSuccessRate">Build Success Rate</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/DeploymentFrequency">DORA - Deployment Frequency</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/LeadTimeForChanges">DORA - Lead Time for Changes</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/MTTR">DORA - Median Time to Restore Service</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/zh/docs/v0.15/Metrics/CFR">DORA - Change Failure Rate</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/zh/docs/v0.15/DataModels">Data Models</a><button aria-label="打开/收起侧边栏菜单「Data Models」" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/zh/docs/v0.15/DeveloperManuals">Developer Manuals</a><button aria-label="打开/收起侧边栏菜单「Developer Manuals」" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/zh/docs/v0.15/Plugins">Plugins</a><button aria-label="打开/收起侧边栏菜单「Plugins」" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/zh/docs/v0.15/Troubleshooting">Troubleshooting</a><button aria-label="打开/收起侧边栏菜单「Troubleshooting」" type="button" class="clean-btn menu__caret"></button></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="页面路径"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="主页面" class="breadcrumbs__link" href="/zh/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item"><a class="breadcrumbs__link" itemprop="item" href="/zh/docs/v0.15/Metrics"><span itemprop="name">Metrics</span></a><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">PR Deploy Time</span><meta itemprop="position" content="2"></li></ul></nav><span class="theme-doc-version-badge badge badge--secondary">版本:v0.15</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">本页总览</button></div><div class="theme-doc-markdown markdown"><header><h1>PR Deploy Time</h1></header><h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-is-this-metric">What is this metric?<a class="hash-link" href="#what-is-this-metric" title="标题的直接链接"></a></h2><p>The time it takes from when a PR is merged to when it is deployed.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-is-it-important">Why is it important?<a class="hash-link" href="#why-is-it-important" title="标题的直接链接"></a></h2><ol><li>Based on historical data, establish a baseline of the delivery capacity of a single iteration to improve the organization and planning of R&D resources.</li><li>Evaluate whether the delivery capacity matches the business phase and demand scale. Identify key bottlenecks and reasonably allocate resources.</li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="which-dashboards-does-it-exist-in">Which dashboard(s) does it exist in?<a class="hash-link" href="#which-dashboards-does-it-exist-in" title="标题的直接链接"></a></h2><ul><li><a href="/zh/livedemo/EngineeringLeads/EngineeringThroughputAndCycleTime">Engineering Throughput and Cycle Time</a></li><li><a href="/zh/livedemo/EngineeringLeads/EngineeringThroughputAndCycleTimeTeamView">Engineering Throughput and Cycle Time - Team View</a></li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-is-it-calculated">How is it calculated?<a class="hash-link" href="#how-is-it-calculated" title="标题的直接链接"></a></h2><p><code>PR deploy time</code> is calculated by subtracting a PR's deployed_date and merged_date. Hence, we should associate PR/MRs with deployments.</p><p>Here are the detailed steps:</p><p><img loading="lazy" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhgAAABdCAYAAADnjh/mAAASwElEQVR4Xu3diY/U5B/Hcf8mNB6boAhGESSrgiiIQS5BQTSCF7usUUA8USMaMIog3ooYBEVBVkTFI6iI54KKgAcgiOvKDc8v7+eXZ9KtszN9Zp6ZdrqfV9K4dGba+rRP++1znmJEREREAjslvkJERESkWgowREREJDgFGCIiIhKcAgwREREJTgGGiIiIBKcAQ0RERIJTgCEiIiLBKcAQkYb0xx9/mNWrV5tdu3bFPxKRDFCAISINp62tzUyYMMEsXLjQTJo0yVxzzTXm0KFD8a+JSIoUYIhIQ9m8ebMNLqJGjRpl1q5d222diKRLAYaI1NTEiRPNpk2bzPjx401zc7OZMWOGOXDggP1sx44dpqWlxSxfvtwMHjzY3HvvvbFf/9f27dv/Uy0ybtw4s3Hjxm7rRCRdCjBEpKb69etnpk2bZv79919z8uRJs3TpUtPa2mo/27p1q+nbt6+58cYbTUdHh9m7d2/s1z3r7Ow0a9asMbNnz7ZBy5EjR+JfEZEUKcAQkZoiwGhvby/8m7YS/fv3N0ePHrUBRp8+fWyDTV+7d+828+fPt9Uj/FcBhki2KMAQkZoiwNizZ0+3daNHjzZbtmyxAcawYcO6fbZo0SK7Lr6MHDmy2/eipkyZYlatWhVfLSIpUoAhIjVFgBFtH3H8+HG7jioOAowRI0ZEvm3MsWPHzOHDh4suoAfJypUru/2G3iTz5s3rtk5E0qUAQ0RqimBi5syZ5uDBg+bEiRNmxYoVZvLkyfazYgFGOcuWLTPDhw83XV1d9t9UrwwZMsSsX78+9k0RSZMCDBGpKQKMd955xwwdOtRWddCThAadqCTAIEhZsGCB3R7tL5qamszixYvjXxORlCnAEJGaIsDYv3+/rRqhYWYo9Eih9IIqFRHJHgUYIlJTLsAQkd5FAYaI1BTVGYyBISK9iwIMERERCU4BhoiIiASnAENERESCU4AhIiIiwSnAEBERkeAUYIiIiEhwCjBEREQkOAUYIiIiEpwCDBEREQlOAYaIiIgEpwBDREREgkstwPjuu+/MF198EV/trb293fz+++/x1bmybds289dff8VXp2rixImmT58+WgIspGU96dyFW2p57v7880/z9ttvx1d76w33SJ4lK1eutLPrSnakFmA8++yzZv78+fHV3qZOnWo++eST+OpM2rJli3nxxRfjq3t06NAhm06nnXaa2bBhQ/zjVMVvtFqqW+opvm8t1S218s0335jRo0fHV3vL8z3y5MmTZubMmWbYsGFm4cKFZtKkSWbatGnm2LFj8a9KChRg1NFrr71m7r///vjqHo0dO9asWLHCXHvttZkNMKQ6aaRjGvvMo1qnY28MMHzvke+9955pbm62gYZz+eWXm3Xr1kW+JWmpW4CxceNGM3LkSHPRRReZefPmmWeeeaYQYJw4ccI8/fTT5uKLL7af33XXXYXpndesWWNefvlle9Fddtll9uJhnRPNPEePHrXbvOSSS+y27r777sJ25syZYz799NPC77gg+e1PP/1kHn30UXthT5gwwQwcONAe399//22mT59uBg8ebB588EFz4MAB+7tyx7po0SJ7rPzulltuMZs3b7afzZ49264bMGCAueqqq2wVUTlHjhyx/73++usVYORUGumYxj7zKHQ67tq1y1x33XX2HnTTTTeZDz/8sBBglLvvJL1HgqqEK664wm6Hz3bu3GnXN+I98rnnnrPbi5oyZYp9MZP01SXA4MI7//zzzdq1a20QwEXGheQCDEozeIj+9ttvpquryyxYsMBeeHj11VdN3759bWYDdWwEENu3b7f/jmaeBx54wNxxxx32wXz8+HHz+OOP2+IycMHdeuut9m9wUQ8dOtRmottuu80MHz7cZjTqPUeMGGGj4q1bt9rjaWtrMy+99JL9XbljPeOMM2wwQBEd+xw1apT9jAz2wgsv2KDnn3/+sceXlAKM/EojHdPYZx6FTkfuFUuWLLH3CqoKxo8fXwgwyt13kt4jebPn/sZ9DtxXBg0aZPfZyPdI5+effzZNTU1235K+ugQYNFSaNWtWt3WTJ08uBBgXXHCB+fLLLwufHTx40Jxzzjlm37599oIkIo968sknzdKlS+3fLvMcPnzYtlVwmQpcsKeffrp9M+Dvfv36mf3799vP7rnnHhv9gszz/PPPF373xBNPmJaWlsK/P/roI1tNgXLHyhuIQyTfv39/s2fPHvtv3+I/RwFGfqWRjmnsM49CpiNBAW/7UZQCuACj3H0nyT0SlEAsX748+lVbFUupRiPfI/H111/bF1f+XyQb6hJgEJFy4URRrEWAQUNGMumVV15pI1m3EB1///339oLkQo8iUifTwGUe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" width="536" height="93" class="img_ev3q"></p><ol><li>Find the <a href="https://devlake.apache.org/docs/Plugins/refdiff/" target="_blank" rel="noopener noreferrer">commits diff</a> between two consecutive deployments by deployments' commit_sha |
| we get pr-3 connected to commit-3</li><li>Now we can get pr-3's deploy time by finish_time of deployment-2 minus merge_time of pr-3.</li></ol><b>Data Transformation Required</b><p>This metric relies on two sources:</p><ol><li>PR/MRs collected from GitHub or GitLab by enabling "Code Review" under the Data Entities section.</li><li>Deployments collected in one of the following ways::<ul><li>Open APIs of Jenkins, GitLab, GitHub, etc by enabling "CICD" under the Data Entities section.</li><li>Webhook for general CI tools.</li><li>Releases and PR/MRs from GitHub, GitLab APIs, etc.</li></ul></li></ol><b>SQL Queries</b><p>The following SQL shows how to find the <code>deploy time</code> of a specific PR. DevLake pre-calculates the metric and stores it in table.pull_requests.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">SELECT</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> deploy_timespan/60 as 'PR Deploy Time(h)'</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">FROM</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> pull_requests</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>If you want to measure the monthly trend of <code>PR deploy time</code> in the screenshot below, please run the following SQL in Grafana. </p><p><img loading="lazy" src="/zh/assets/images/pr-deploy-time-monthly-cc8f4e0f2bb961f51b6766625fcaf364.png" width="1083" height="342" class="img_ev3q"></p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">SELECT </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> DATE_ADD(date(created_date), INTERVAL -DAY(date(created_date))+1 DAY) as time,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> avg(deploy_timespan)/60 as 'PR Deploy Time(h)'</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">FROM pull_requests</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">GROUP BY 1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ORDER BY 1</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-to-improve">How to improve?<a class="hash-link" href="#how-to-improve" title="标题的直接链接"></a></h2><p>N/A</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/apache/incubator-devlake-website/edit/main/versioned_docs/version-v0.15/Metrics/PRDeployTime.md" target="_blank" rel="noreferrer noopener" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>编辑此页</a></div><div class="col lastUpdated_vwxv"></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="文档分页导航"><a class="pagination-nav__link pagination-nav__link--prev" href="/zh/docs/v0.15/Metrics/PRReviewTime"><div class="pagination-nav__sublabel">上一页</div><div class="pagination-nav__label">PR Review Time</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/zh/docs/v0.15/Metrics/PRTimeToMerge"><div class="pagination-nav__sublabel">下一页</div><div class="pagination-nav__label">PR Time To Merge</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#what-is-this-metric" class="table-of-contents__link toc-highlight">What is this metric?</a></li><li><a href="#why-is-it-important" class="table-of-contents__link toc-highlight">Why is it important?</a></li><li><a href="#which-dashboards-does-it-exist-in" class="table-of-contents__link toc-highlight">Which dashboard(s) does it exist in?</a></li><li><a href="#how-is-it-calculated" class="table-of-contents__link toc-highlight">How is it calculated?</a></li><li><a href="#how-to-improve" class="table-of-contents__link toc-highlight">How to improve?</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/zh/docs/GettingStarted">Getting Started</a></li><li class="footer__item"><a class="footer__link-item" href="/zh/docs/DataModels/DevLakeDomainLayerSchema">Data Models</a></li><li class="footer__item"><a class="footer__link-item" href="/zh/docs/Metrics">Engineering Metrics</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://join.slack.com/t/devlake-io/shared_invite/zt-2ox842kuu-_6x3Lwdj88YpzKhMRpgnMg" target="_blank" rel="noopener noreferrer" class="footer__link-item">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/incubator-devlake/issues" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub Issue Tracker</a></li><li class="footer__item"><a href="https://github.com/apache/incubator-devlake-website/issues" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub Issue Tracker For Docs</a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://github.com/apache/incubator-devlake" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub</a></li><li class="footer__item"><a href="https://twitter.com/ApacheDevLake" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter</a></li><li class="footer__item"><a class="footer__link-item" href="/zh/community/trademark">Trademark Guidelines</a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"> |