CINXE.COM

<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="ie=edge"/><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/><meta name="generator" content="Gatsby 5.14.0"/><meta data-react-helmet="true" content="text/html; charset=UTF-8" http-equiv="Content-Type"/><meta data-react-helmet="true" charSet="utf-8"/><meta data-react-helmet="true" content="width=device-width, initial-scale=1" name="viewport"/><meta data-react-helmet="true" content="ie=edge" http-equiv="x-ua-compatible"/><meta data-react-helmet="true" content="#2b5797" name="msapplication-TileColor"/><meta data-react-helmet="true" content="#ffffff" name="theme-color"/><meta data-react-helmet="true" content="@JenkinsCI" name="twitter:site"/><meta data-react-helmet="true" content="article" property="og:type"/><meta data-react-helmet="true" name="description" content="This plugin integrates &lt;a href=&quot;https://www.hello2morrow.com/products/sonargraph&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Sonargraph&lt;/a&gt; functionality into Jenkins, for Sonargraph versions 9 and 10"/><meta data-react-helmet="true" name="image" content="https://jenkins.io/images/logo-title-opengraph.png"/><meta data-react-helmet="true" property="og:url" content="https://plugins.jenkins.io/sonargraph-integration"/><meta data-react-helmet="true" property="og:site_name" content="Sonargraph Integration"/><meta data-react-helmet="true" property="og:title" content="Sonargraph Integration"/><meta data-react-helmet="true" property="apple-mobile-web-app-title" content="Sonargraph Integration"/><meta data-react-helmet="true" property="og:description" content="This plugin integrates &lt;a href=&quot;https://www.hello2morrow.com/products/sonargraph&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Sonargraph&lt;/a&gt; functionality into Jenkins, for Sonargraph versions 9 and 10"/><meta data-react-helmet="true" property="og:image" content="https://jenkins.io/images/logo-title-opengraph.png"/><meta data-react-helmet="true" name="twitter:card" content="summary_large_image"/><meta data-react-helmet="true" name="twitter:creator" content="@JenkinsCI"/><meta data-react-helmet="true" name="twitter:title" content="Sonargraph Integration"/><meta data-react-helmet="true" name="twitter:description" content="This plugin integrates &lt;a href=&quot;https://www.hello2morrow.com/products/sonargraph&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Sonargraph&lt;/a&gt; functionality into Jenkins, for Sonargraph versions 9 and 10"/><meta data-react-helmet="true" name="twitter:image" content="https://jenkins.io/images/logo-title-opengraph.png"/><style data-href="/styles.9cc8d7d728642dfb2d92.css" data-identity="gatsby-global-css">@import url(https://www.jenkins.io/assets/bower/bootstrap/css/bootstrap.min.css);@import url(https://www.jenkins.io/css/jenkins.css);@import url(https://www.jenkins.io/css/copy-to-clipboard.css);@import url(https://www.jenkins.io/stylesheets/styles.css);@import url(https://www.jenkins.io/css/footer.css);body .fixed.top{z-index:999}img{max-width:100%}body{overflow-x:hidden}body .showResults.item-finder>#plugin-search-form.HomeHeader{padding:.25rem .5rem}#plugin-search-form .SearchBox .SearchBtn,#plugin-search-form .SearchBox .ShowFilter{color:#fff!important}.SearchBox label.input-group{width:100%}.SearchBox .input-group .btn{border:1px solid #900}body .showResults.item-finder>.HomeHeader>.navbar{padding:0 10.5rem 0 0;width:100%}body .showResults.item-finder>.HomeHeader>.navbar>.nav,body .showResults.item-finder>.HomeHeader>.navbar>.nav>.SearchBox{padding:0!important;width:100%}body .showResults.item-finder>.HomeHeader>.navbar>.nav>.btn-group>button>i{line-height:1.5rem}body .showResults.item-finder>.HomeHeader>.navbar>.nav>.btn-group{position:absolute;right:0;top:0}body .showResults.item-finder>.HomeHeader>.navbar>.nav>.SearchBox .ShowFilter{max-width:10rem!important;width:18.6%!important}body .showResults.item-finder .filters{border-left:none;border-radius:0;border-top:none;box-shadow:-.25rem 0 #fff;left:.25rem;margin-top:-1px;padding-top:1rem!important;top:5px}body .showResults.item-finder .filters .row{border:none;padding:0}body .showResults.item-finder .filters .row>div{font-size:.75rem;overflow:hidden;padding:0 .5rem}body .showResults.item-finder .filters .row>div label{white-space:nowrap}body .showResults #plugin-search-form .nav>.btn-group{display:inline-block}body .showResults #plugin-search-form h1,body .showResults #plugin-search-form p,body .showResults #plugin-search-form:before{display:none}.page-link{cursor:pointer}.CategoryList,.CategoryList ul{list-style:none;margin:0;padding:0;vertical-align:middle}.CategoryList>li>label{font-weight:700}.CategoryList>li>ul{padding:0 0 1rem}.CategoryList>li{-moz-column-break-inside:avoid;break-inside:avoid-column;display:table;page-break-inside:avoid}h1 .anchor ion-icon,h2 .anchor ion-icon,h3 .anchor ion-icon,h4 .anchor ion-icon,h5 .anchor ion-icon,h6 .anchor ion-icon{visibility:hidden}h1 .anchor:focus ion-icon,h1:hover .anchor ion-icon,h2 .anchor:focus ion-icon,h2:hover .anchor ion-icon,h3 .anchor:focus ion-icon,h3:hover .anchor ion-icon,h4 .anchor:focus ion-icon,h4:hover .anchor ion-icon,h5 .anchor:focus ion-icon,h5:hover .anchor ion-icon,h6 .anchor:focus ion-icon,h6:hover .anchor ion-icon{visibility:visible}.filters .show-all{background:#168bb9;border:none;border-radius:2px;color:#fff;font-size:.67rem;font-weight:200;margin-left:.5rem;padding:.15rem .5rem}.isFiltered .filters .show-all{display:inline-block}#pluginDependencies h3{font-size:1.2rem;margin-top:.7rem}#pluginDependencies h2{margin-top:.7rem}.empty{opacity:.5}.NoLabels>.Categories label>input{display:none}.NoLabels>.Categories label>span{color:#0275d8;cursor:pointer;margin-left:0!important}h1.title{margin-right:2rem}:root{--code-background:#f6f8fa;--no-labels-background:#e5f8ff;--base-size-8:0.5rem;--base-size-16:1rem;--borderColor-default:#30363d;--borderColor-accent-emphasis:#1f6feb;--borderColor-success-emphasis:#238636;--borderColor-done-emphasis:#8957e5;--borderColor-attention-emphasis:#9e6a03;--borderColor-danger-emphasis:#da3633;--fgColor-accent:#4493f8;--fgColor-success:#3fb950;--fgColor-done:#a371f7;--fgColor-attention:#d29922;--fgColor-danger:#f85149}body #grid-box .NoLabels{background:#e5f8ff;background:var(--no-labels-background);padding:2rem 0}body #grid-box .NoLabels .CategoryList{font-size:.875rem}body #grid-box .NoLabels .CategoryList label>span{margin-left:.5rem}body #grid-box .NoLabels .Entry-box{display:block;font-size:.875rem;line-height:1rem;padding:.25rem 0}body #grid-box .NoLabels .Entry-box a{cursor:pointer}body #grid-box .NoLabels legend{font-size:1.1rem}#cb-item-finder-grid-box>.grid>.no-results{color:rgba(0,0,0,.667);display:block;padding:.5rem}.not-found-box{text-align:center}.not-found{display:inline-block;margin:6rem 0;padding:1.5rem 0 1.5rem 8rem;position:relative;text-align:left}.not-found h3{margin-bottom:.25rem}.not-found i{color:rgba(0,0,0,.25);display:block;font-size:8rem;left:0;line-height:8rem;position:absolute;top:0;vertical-align:middle}.not-found i.icon-plug{color:#000;font-size:6rem;left:.5rem;transform:scaleX(-1)}.markdown-alert{border-left:.25em solid #30363d;border-left:.25em solid var(--borderColor-default);color:inherit;margin-bottom:16px;padding:.5rem 1rem;padding:var(--base-size-8) var(--base-size-16)}.markdown-alert .markdown-alert-title{align-items:center;display:flex;font-weight:600;line-height:1}.octicon{fill:currentcolor;display:inline-block;margin-right:8px;overflow:visible!important;vertical-align:text-bottom}.markdown-alert>:first-child{margin-top:0}.markdown-alert.markdown-alert-note{border-left-color:#1f6feb;border-left-color:var(--borderColor-accent-emphasis)}.markdown-alert.markdown-alert-note .markdown-alert-title{color:#4493f8;color:var(--fgColor-accent)}.markdown-alert.markdown-alert-tip{border-left-color:#238636;border-left-color:var(--borderColor-success-emphasis)}.markdown-alert.markdown-alert-tip .markdown-alert-title{color:#3fb950;color:var(--fgColor-success)}.markdown-alert.markdown-alert-important{border-left-color:#8957e5;border-left-color:var(--borderColor-done-emphasis)}.markdown-alert.markdown-alert-important .markdown-alert-title{color:#a371f7;color:var(--fgColor-done)}.markdown-alert.markdown-alert-warning{border-left-color:#9e6a03;border-left-color:var(--borderColor-attention-emphasis)}.markdown-alert.markdown-alert-warning .markdown-alert-title{color:#d29922;color:var(--fgColor-attention)}.markdown-alert.markdown-alert-caution{border-left-color:#da3633;border-left-color:var(--borderColor-danger-emphasis)}.markdown-alert.markdown-alert-caution .markdown-alert-title{color:#f85149;color:var(--fgColor-danger)}#plugin-spinner{color:rgba(0,0,0,.33);cursor:pointer;display:block;left:0;padding:5rem 0;position:absolute;right:0;text-align:center;text-shadow:0 1px 1px #fff}#plugin-spinner>.swing{display:inline-block;padding:1rem}#plugin-spinner .icon-jenkins{display:block;font-size:10.5rem}.swing div{background:#fff;border:1px solid #69c;border-radius:50%;box-shadow:inset 0 0 1px #039,inset 0 0 0 1px #fff,0 5px 3px -2px rgba(0,0,0,.15),inset -5px -5px 7px 1px #168bb9,inset -4px -6px 10px 10px #69c;display:inline-block;height:32px;width:32px}.spinner-wrapper{margin:2rem auto auto;width:2rem}@keyframes ball-l{0%,50%{transform:rotate(0) translateX(0)}to{transform:rotate(0deg) translateX(-2.5em)}}@keyframes ball-r{0%{transform:rotate(0deg) translateX(2.5em)}50%,to{transform:rotate(0) translateX(0)}}@keyframes shadow-l-n{0%,50%{opacity:.5;transform:translateX(0)}to{opacity:.125;transform:translateX(-1.75em)}}@keyframes shadow-r-n{0%{opacity:.125;transform:translateX(1.75em)}50%,to{opacity:.5;transform:translateX(0)}}.swing-l{animation:ball-l .425s ease-in-out infinite alternate}.swing-r{animation:ball-r .425s ease-in-out infinite alternate}.maintainers>.maintainer{display:block}#pluginPage #grid-box .sidebar>.btn{display:block;margin-bottom:1rem;padding:.5rem 1rem .75rem 3.5rem;position:relative;text-align:left}#pluginPage #grid-box .sidebar>.btn i{font-size:2.25rem;left:.75rem;position:absolute;top:.5rem}#pluginPage #grid-box .sidebar>.btn>span{font-size:1.1rem;font-weight:500;line-height:1.3rem}#pluginPage #grid-box .sidebar>.btn>.v{display:block;font-size:.75rem;font-weight:200;white-space:normal}#pluginPage #grid-box .sidebar .lbl{display:inline-block;margin-right:.5rem}##pluginPage #grid-box .sidebar .label-link a{display:block;line-height:1.5rem;padding:4px 0}#pluginPage #grid-box .sidebar .chart{margin:1rem 0 0}.sidebar .sidebarSection{border-top:1px solid #aaa;margin-top:1rem;padding-top:.5rem}#pluginPage #grid-box{font-size:.875rem;margin-left:15px;margin-right:15px}#pluginPage #grid-box .download{margin:2rem 0 2rem -.5rem}#pluginPage #grid-box .alert>.alert-icon{background-position:top;background-repeat:no-repeat;background-size:3rem;display:inline-block;height:3rem;left:1rem;opacity:.54;position:absolute;top:calc(50% - 1.5rem);width:3rem}#grid-box .pluginContainer{margin:auto;max-width:72rem}.alert-warning .alert-icon .main-path{fill:#856404}.alert-danger .alert-icon .main-path{fill:#721c24}#pluginPage #grid-box .alert-with-icon{min-height:4rem;padding-left:5rem}#pluginPage #grid-box .security-warning-list{list-style:none;padding-left:0}#pluginPage #grid-box .active-warning{font-size:1rem;font-weight:bolder;margin-bottom:0}.row.flex{display:flex}.title-wrapper{align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between;margin:1rem auto 0;max-width:72rem;padding-left:15px;padding-right:15px}.plugin-id{margin-bottom:.5rem;opacity:.7}.content h1{font-size:2rem;margin:1.5rem 0 1rem}.content h2{font-size:1.5rem;margin-top:1.5rem}.content h3{font-size:1.25rem}.content h4{font-size:1.1rem}.filters .mask li>label{opacity:.5;position:relative}.filters .mask li>label:hover{color:#168bb9;opacity:1}.filters .mask li>label:before{background:#168bb9;content:"";display:block;font-size:0;height:.5rem;margin:.25rem .4rem;position:absolute;width:.5rem}.filters .mask li input[type=checkbox]{visibility:hidden}.filters label{cursor:pointer}.filterOptions{display:none}body .item-finder.Tiles .Entry-box{display:inline-block}.categories-box .list-group{box-shadow:0 3px 2px -1px rgba(0,0,0,.1);margin-top:-2.75rem;position:relative;z-index:2}.categories-box .list-group>.label{background:rgba(0,0,0,.5);border:none;border-radius:0;border-top-right-radius:10px;display:block}.categories-box .list-group>.label>.list-group-item{background:none;border:none;color:#fff;font-size:1rem;text-align:left}button.nav-link{background:#f9f9f9;border:1px solid #ccc;border-radius:3px;box-shadow:0 2px 4px -3px rgba(0,0,0,.25)}button.nav-link b{color:#666}.form-inline>.form-control.nav-link{background:#f9f9f9;border:1px solid #ccc;border-radius:3px;box-shadow:inset 0 2px 4px -2px rgba(0,0,0,.25);margin:0;padding:.25rem;width:11rem}.Tile,body .item-finder.Tiles a.item{background:#fff;border:.1rem solid #ccc;border-radius:3px;box-sizing:border-box;color:#666;display:block;font-size:.875rem;height:16.5rem;margin:.25rem;opacity:.9;padding:.67rem;-webkit-text-decoration:none!important;text-decoration:none!important;width:13rem}body .item-finder.Tiles .grid-box>div{padding:.5rem 0 2rem .5rem;text-align:left}body .item-finder.List a.item>div,body .item-finder.Tiles a.item>div{display:block;left:auto;position:relative;top:auto;width:auto}.Tile:hover,body .item-finder.Tiles a.item:hover{border:.1rem solid #999;box-shadow:0 2px 3px rgba(0,0,0,.25);opacity:1;-webkit-text-decoration:none;text-decoration:none}.Tile:hover h4,body .item-finder.Tiles a.item .Title:hover h4{color:#069}.Tile .Icon,body .item-finder.Tiles a.item .Icon{bottom:0;display:block;opacity:.75;position:absolute;right:.75rem}body .item-finder.Tiles a.item:hover .Icon{opacity:1}.Tile .Icon>i,body .item-finder.List a.item .Icon>i,body .item-finder.Tiles a.item .Icon>i{border-radius:3px;color:#fff;display:inline-block;font-size:1.33rem;font-style:normal;height:3rem;line-height:3rem;margin:-1px 0 0 -1px;text-shadow:rgba(0,0,0,.5) 1px 2px 1px;width:3rem}body .item-finder.Tiles a.item .Icon>i{margin-bottom:1rem}.Tile .Score,body .item-finder a.item .Score{margin:0 0 .67rem}.Tile .Score>.scr_4:after,body .item-finder a.item .Score>.scr_4:after{content:"\2605 \2605 \2605 \2605 \2606";display:block;text-align:center}.Tile .Downloads,body .item-finder a.item .Downloads{color:#999;font-size:.75rem;margin:0}.Tile .Labels,body .item-finder.Tiles a.item .Labels{line-height:.75rem;margin:.25rem 0;max-height:2rem;min-height:1rem;overflow:hidden}.Tile .Version span,body .item-finder.Tiles a.item .Version span{margin-right:.25rem}.Tile .Version span.v,body .item-finder.Tiles a.item .Version span.v{display:none;margin-right:1rem}.Tile .Version span.c:after,body .item-finder.Tiles a.item .Version span.c:after{content:"+"}body div .item-finder a.item>.Wiki{display:none}.Tile .Excerpt,body .item-finder.Tiles a.item .Excerpt{height:4.4rem;line-height:1.1rem;margin:0;overflow:hidden;position:relative;text-overflow:ellipsis;white-space:normal}body .item-finder a.item .Excerpt a{color:#666;-webkit-text-decoration:none;text-decoration:none}.Tile .Excerpt div,.Tile .Excerpt p,body .item-finder.Tiles a.item .Excerpt div,body .item-finder.Tiles a.item .Excerpt p{display:inline}.Tile .Excerpt:after,.Tile h4:after,body .item-finder.Tiles a.item .Excerpt:after,body .item-finder.Tiles a.item h4:after{bottom:0;box-shadow:inset -250px 0 250px -200px #fff;content:" ";display:block;height:19px;height:1.1rem;position:absolute;right:0;width:100%}.Tile h4,body .item-finder a.item h4{color:#000;font-size:1rem;font-weight:400;line-height:1.1rem;margin:0 0 .25rem;max-height:2.2rem;overflow:hidden;position:relative}body .item-finder.Tiles a.item h4{min-height:2.2rem}.Tile .Authors>div,body .item-finder.List a.item .Authors>div,body .item-finder.List a.item .Labels>span,body .item-finder.List a.item .Version,body .item-finder.Tiles a.item .Authors>div,body .item-finder.Tiles a.item .Labels>span,body .item-finder.Tiles a.item .Version{color:var(--link-color);font-size:.75rem;line-height:1rem;margin-right:.5rem}body .item-finder.Tiles a.item .Authors{bottom:1rem;max-width:8rem;overflow:hidden;position:absolute;white-space:nowrap}.VirtualScroll>div>div{display:inline-block;height:auto!important;padding:.25rem;position:static!important;text-align:left;vertical-align:top;width:auto!important}.VirtualScroll>div>div.spinner{height:40px!important;margin:100px auto!important;overflow:hidden;position:relative!important;text-indent:999rem;white-space:nowrap;width:40px!important}.spinner .double-bounce2{animation:sk-bounce 2s ease-in-out infinite;background-color:rgba(0,0,0,.2);border-radius:50%;height:100%;left:0;opacity:.6;position:absolute;top:0;width:100%}.double-bounce2{animation-delay:-1s}@keyframes sk-bounce{0%,to{transform:scale(0)}50%{transform:scale(1)}}.tbody{display:table}.tbody>.thead{display:table-header-group}.tbody>.thead>.tr{display:table-row}.tbody>.thead>.tr>div{border-bottom:1px solid #ccc;display:table-cell;padding:.25rem}.tbody>.Row,body .item-finder.Table .Entry-box{display:table-row-group}.tbody>.Row>.Tile,body .item-finder.Table a.Entrty{display:table-row;height:auto;margin:0;padding:0;width:auto}.tbody>.Row>.Tile>div,body .item-finder.Table a.Entry>div{border-bottom:1px solid #eee;display:table-cell;height:auto;max-height:3.3rem;padding:.25rem}body .item-finder.Table a.Entry>div.Score{font-size:.875rem;margin:0;position:static}body .item-finder.Table a.Entry>div.Wiki{display:none}.tbody>.Row>.Tile>div.Title,body .item-finder.Table a.Entry>div.Title{width:20%}body .item-finder.Table a.Entry>div.Title>h4{color:#369;font-size:.875rem;font-weight:700}.tbody>.Row>.Tile>div.Icon,body .item-finder.Table a.Entry>div.Icon{display:none}.tbody>.Row>.Tile>div.Authors>div,body .item-finder.Table a.Entry>div.Authors>div{white-space:nowrap}.list>.list>.thead{display:none}.list>.item>.Tile,body .item-finder.List a.Entry{display:block;height:auto;padding:.5rem .5rem .5rem 6rem;position:relative;text-align:left;width:auto}.list>.item>.Tile>.Icon,.list>.item>.Tile>.Score,body .item-finder.List a.Entry .Icon,body .item-finder.List a.Entry .Score{left:.5rem;position:absolute;width:5rem}.list>.item>.Tile>.Score,body .item-finder.List a.Entry .Score{top:4rem}.list>.item>.Tile>.Excerpt,body .item-finder.List a.Entry .Excerpt{height:auto;margin:.5rem 0;max-height:3.3rem}.list>.item>.Tile>.Authors,body .item-finder.List a.Entry .Authors{margin:0}.list>.item>.Tile>.Authors>div,body .item-finder.List a.Entry .Authors>div{display:inline-block}.overview{padding-top:1.5rem}.overview p{font-size:1.1rem}body .btn-primary{background:#d24939;border-color:#900;color:#fff}body .btn-primary:hover{background:#335061;border-color:#88c5cc}nav .nav-item.active{box-shadow:inset 0 -2px #d33833}#cb-grid-toolbar .navbar-nav .nav-item{margin-left:.5rem}#cb-grid-toolbar .navbar-nav .nav-link{padding:.33rem}#cb-grid-toolbar .nav-link.dropdown-toggle{padding:.25rem .5rem}.categories-box .filter-keys.dropdown-menu{background:#f9f9f9;border-color:#ccc;border-radius:0;display:block;float:none;margin:-1px 0 0;max-width:9999rem;padding:0;position:static;width:auto}.categories-box .filter-keys.dropdown-menu a{color:#999;display:block;font-size:.875rem;padding:1px 2px;position:relative;width:auto}.categories-box .filter-keys.dropdown-menu a:hover{box-shadow:inset 0 100px rgba(0,0,0,.06)}.categories-box .filter-keys.dropdown-menu a:nth-child(odd){background:#eee}.categories-box .filter-keys.dropdown-menu a span{color:#369;display:inline-block;padding:.25rem 0 .25rem 2.25rem}.categories-box .filter-keys.dropdown-menu a .count{padding:.25rem .75rem;position:absolute;right:0;text-align:right;width:5rem}body .list-group>li>a.active,body .list-group>li>a.active:active,body .list-group>li>a.active:hover{background:#fff!important;box-shadow:inset 0 99rem rgba(200,240,255,.67);color:#000!important}#download-menu>.dropdown-menu{padding:2rem;width:50rem}nav .form-inline .input-group>.form-control{border-color:#900;transition:all .5s ease}form.showFilter nav .form-inline .ShowFilter{background:#900}nav .form-inline .input-group>.form-control:focus{border-color:red}form.search{float:right;opacity:.9}nav form.search .input-group:focus>input.form-control,nav form.search .input-group:hover>input.form-control,nav form.search .input-group>input.form-control:focus{opacity:1;width:12rem}.cardGroup{display:flex;overflow:hidden}.cardGroup__card{border:none;border-radius:0;flex:1 1 0%}a.card:hover{background-color:#eef3f5}.cardGroup__card+.cardGroup__card{border-left:1px solid #d7dbdd}.cardGroup__cardDescription{flex:1 1 auto}.card{border:1px solid #cad0d2;border-radius:4px;overflow:hidden}.card,.card__description{display:flex;flex-direction:column}.card__description{align-items:center;justify-content:center;padding:15px 0}.svg-icon{fill:#168bb9}.header .svg-icon{fill:#fff}.card__descriptionIcon{font-size:32px;margin-bottom:10px}.card__descriptionText{color:#57727c;font-size:18px;max-width:calc(100% - 30px);text-align:center}.card--fixedWidth{max-width:120px}.featureListItem{align-items:center;display:flex;padding:10px}.featureListItem+.featureListItem{border-top:1px solid #d7dbdd}.featureListItem--reverse{flex-direction:row-reverse}.featureListItem__description,.featureListItem__icon{padding:5px 15px}.featureListItem__icon{font-size:50px;line-height:0}.featureListItem__description{color:#000;width:100%}.formFooter{display:flex;overflow:hidden;width:100%}.formFooter__section{flex:1 1 100%}.formFooter__item+.formFooter__item{margin-left:5px}.underline{border-bottom:1px solid #cad0d2;border-radius:4px}#pluginPage #grid-box .content .main table{border:1px solid silver}#pluginPage #grid-box .content .main td{padding:1em}#grid-box .content{padding-top:1rem;word-break:break-word}#grid-box .content table{word-break:normal}.code-wrapper pre,.markdown-body pre{background-color:#f6f8fa;background-color:var(--code-background);border-radius:4px;padding:16px}.markdown-body clipboard-copy{display:none}@media (min-width:576px){.modal-dialog.wide{margin:.5rem auto;max-width:none}}@media (min-width:776px){.modal-dialog.wide{max-width:700px}}@media (prefers-color-scheme:dark){body{--no-labels-background:#212529;--code-background:#111;--search-background:#313539;--bs-body-color:#dee2e6;--bs-body-color-rgb:222,226,230;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#fff;--bs-emphasis-color-rgb:255,255,255;--bs-secondary-color:rgba(222,226,230,.75);--bs-secondary-color-rgb:222,226,230;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(222,226,230,.5);--bs-tertiary-color-rgb:222,226,230;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-primary-text-emphasis:#6ea8fe;--bs-secondary-text-emphasis:#a7acb1;--bs-success-text-emphasis:#75b798;--bs-info-text-emphasis:#6edff6;--bs-warning-text-emphasis:#ffda6a;--bs-danger-text-emphasis:#ea868f;--bs-light-text-emphasis:#f8f9fa;--bs-dark-text-emphasis:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#161719;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#41464b;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#087990;--bs-warning-border-subtle:#997404;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:inherit;--bs-link-color:#6ea8fe;--bs-link-hover-color:#8bb9fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:139,185,254;--bs-code-color:#e685b5;--bs-highlight-color:#dee2e6;--bs-highlight-bg:#664d03;--bs-border-color:#495057;--bs-border-color-translucent:hsla(0,0%,100%,.15);--bs-form-valid-color:#75b798;--bs-form-valid-border-color:#75b798;--bs-form-invalid-color:#ea868f;--bs-form-invalid-border-color:#ea868f}.btn-close{filter:var(--bs-btn-close-white-filter)}}@font-face{font-family:ji;font-style:normal;font-weight:400;src:url(/static/ji-06ec8f35b7fcf628bc6eadd35a1af855.ttf) format("truetype"),url(/static/ji-d09d228cf69136a06df3444806157d4d.woff) format("woff"),url(/static/ji-351ec2c6ddd54431698e9cdfbc45c4bf.svg#ji) format("svg")}@font-face{font-family:icomoon;font-style:normal;font-weight:400;src:url(/static/icomoon-067def7ea015b2fb62e5bc963c5eec42.eot);src:url(/static/icomoon-067def7ea015b2fb62e5bc963c5eec42.eot#iefix) format("embedded-opentype"),url(/static/icomoon-3539e0715542420d24bb9fd27f21d3f8.ttf) format("truetype"),url(/static/icomoon-341ea04290ca1f972b7316b4fecd09b9.woff) format("woff"),url(/static/icomoon-3456ed3433d20110c82d649f1f0c6fb6.svg#icomoon) format("svg")}[class*=" icon-"],[class^=icon-]{speak:none;font-feature-settings:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:ji,sans-serif!important;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none}.icon-jira:before{content:"\e677"}.icon-hipchat:before{content:"\e67e"}.icon-AWS_Elastic_BeanStalk:before{content:"\e67b"}.icon-mercurial:before{content:"\e673"}.icon-bitbucket:before{content:"\e67f"}.icon-git-logo:before{content:"\e674"}.icon-github:before{content:"\e675"}.icon-subversion:before{content:"\e676"}.icon-pivotal:before{content:"\e660"}.icon-vmware:before{content:"\e65e"}.icon-ec2:before{content:"\e65f"}.icon-siren:before{content:"\e656"}.icon-cloudbees-logo:before{content:"\e64a"}.icon-code:before{content:"\e647"}.icon-docker:before{content:"\e640"}.icon-fingerprint:before{content:"\e63a"}.icon-groovy:before{content:"\e638"}.icon-grails:before{content:"\e637"}.icon-git:before{content:"\e635"}.icon-sbt:before{content:"\e636"}.icon-gradle:before{content:"\e634"}.icon-ant:before{content:"\e632"}.icon-service:before{content:"\e62a"}.icon-service-o:before{content:"\e62b"}.icon-menu:before{content:"\e620"}.icon-build-hand:before{content:"\e61b"}.icon-featured_play_list:before{content:"\e90e"}.icon-menu2:before{content:"\e66b"}.icon-content-paste:before{content:"\e666"}.icon-format-color-fill:before{content:"\e658"}.icon-puzzle:before{content:"\e64f"}.icon-lightbulb:before{content:"\e901"}.icon-flow-merge:before{content:"\e671"}.icon-flow-switch:before{content:"\e672"}.icon-thermometer:before{content:"\e659"}.icon-arrow-shuffle:before{content:"\e630"}.icon-arrow-right:before{content:"\e631"}.icon-chat-3:before{content:"\e680"}.icon-health:before{content:"\e657"}.icon-grid:before,.icon-icons:before{content:"\e90f"}.icon-book2:before{content:"\e909"}.icon-screwdriver:before{content:"\e668"}.icon-clipboard:before{content:"\e667"}.icon-calendar:before{content:"\e663"}.icon-maven:before{content:"\e633"}.icon-brick-menu-o:before{content:"\e62c"}.icon-brick-o:before{content:"\e62d"}.icon-gear-menu-o:before{content:"\e627"}.icon-gear-menu:before{content:"\e626"}.icon-brick-menu:before{content:"\e621"}.icon-folder-menu:before{content:"\e622"}.icon-jenkins-alt:before{content:"\e617"}.icon-jenkins:before{content:"\e618"}.icon-jenkins-o:before{content:"\e619"}.icon-brick:before{content:"\e61a"}.icon-checkbox-checked:before{content:"\e623"}.icon-bulb:before{content:"\e900"}.icon-phone:before{content:"\e642"}.icon-checkmark:before{content:"\e681"}.icon-map-pin-fill:before{content:"\e678"}.icon-box-add:before{content:"\e67d"}.icon-box-remove:before{content:"\e67c"}.icon-clock:before{content:"\e661"}.icon-plug:before{content:"\e64e"}.icon-refresh:before{content:"\e679"}.icon-search:before{content:"\e63f"}.icon-move:before{content:"\e615"}.icon-bug:before{content:"\e611"}.icon-tools:before{content:"\e669"}.icon-pulse:before{content:"\e655"}.icon-key:before{content:"\e653"}.icon-lock:before{content:"\e64b"}.icon-gear:before{content:"\e624"}.icon-repo-forked:before{content:"\e610"}.icon-issue-closed:before{content:"\e608"}.icon-lightning:before{content:"\e603"}.icon-rainy:before{content:"\e604"}.icon-cloud:before{content:"\e605"}.icon-cloudy:before{content:"\e606"}.icon-sun:before{content:"\e607"}.icon-office:before{content:"\e600"}.icon-pencil:before{content:"\e905"}.icon-quill:before{content:"\e62e"}.icon-book:before{content:"\e63c"}.icon-copy:before{content:"\e66e"}.icon-copy2:before{content:"\e66f"}.icon-tag:before{content:"\e61c"}.icon-support:before{content:"\e66c"}.icon-phone2:before{content:"\e66d"}.icon-map:before{content:"\e651"}.icon-stopwatch:before{content:"\e648"}.icon-mobile:before{content:"\e643"}.icon-users:before{content:"\e641"}.icon-wrench:before{content:"\e66a"}.icon-settings:before{content:"\e614"}.icon-hammer:before{content:"\e601"}.icon-aid:before{content:"\e654"}.icon-pie:before{content:"\e65b"}.icon-stats:before{content:"\e639"}.icon-bars:before{content:"\e65c"}.icon-rocket:before{content:"\e649"}.icon-remove:before{content:"\e664"}.icon-signup:before{content:"\e682"}.icon-list:before{content:"\e910"}.icon-download:before{content:"\e670"}.icon-globe:before{content:"\e652"}.icon-flag:before{content:"\e644"}.icon-bookmark:before{content:"\e906"}.icon-star:before{content:"\e907"}.icon-star2:before{content:"\e908"}.icon-cancel-circle:before{content:"\e665"}.icon-loop:before{content:"\e65d"}.icon-table:before{content:"\e911"}.icon-insert-template:before{content:"\e64d"}.icon-console:before{content:"\e628"}.icon-facebook:before{content:"\e902"}.icon-facebook2:before{content:"\e903"}.icon-twitter:before{content:"\e904"}.icon-file-css:before{content:"\e629"}.icon-grid-alt:before{content:"\e912"}.icon-menu3:before{content:"\e913"}.icon-list2:before{content:"\e914"}.icon-screen:before{content:"\e60b"}.icon--:before{content:"\e90a"}.icon-help:before{content:"\e67a"}.icon-feather-o:before{content:"\e62f"}.icon-compass:before{content:"\e61d"}.icon-graduation:before{content:"\e65a"}.icon-box:before{content:"\e63b"}.icon-logout:before{content:"\e90b"}.icon-flow-cascade:before{content:"\e61e"}.icon-flow-branch:before{content:"\e60c"}.icon-flow-tree:before{content:"\e60d"}.icon-list-ul:before{content:"\e915"}.icon-stethoscope:before{content:"\e90d"}.icon-code-fork:before{content:"\e90c"}.icon-calendar-o:before{content:"\e662"}.icon-ban:before{content:"\e64c"}.icon-flag-checkered:before{content:"\e645"}.icon-envelope-o:before{content:"\e63d"}.icon-envelope:before{content:"\e63e"}.icon-cog:before{content:"\e625"}.icon-puzzle-piece:before{content:"\e61f"}.icon-folder-open-o:before{content:"\e60e"}.icon-folder-o:before{content:"\e60f"}.icon-thumbs-o-down:before{content:"\e609"}.icon-thumbs-o-up:before{content:"\e60a"}.icon-enlarge:before{content:"\e650"}.icon-shield:before{content:"\e646"}.icon-factory:before{content:"\e616"}.icon-unlocked:before{content:"\e612"}.icon-locked:before{content:"\e613"}.icon-uniE602:before{content:"\e602"} /*! * GitHub Light v0.5.0 * Copyright (c) 2012 - 2017 GitHub, Inc. * Licensed under MIT (https://github.com/primer/github-syntax-theme-generator/blob/master/LICENSE) */.pl-c{color:#6a737d}.pl-c1,.pl-s .pl-v{color:#005cc5}.pl-e,.pl-en{color:#6f42c1}.pl-s .pl-s1,.pl-smi{color:#24292e}.pl-ent{color:#22863a}.pl-k{color:#d73a49}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#032f62}.pl-smw,.pl-v{color:#e36209}.pl-bu{color:#b31d28}.pl-ii{background-color:#b31d28;color:#fafbfc}.pl-c2{background-color:#d73a49;color:#fafbfc}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{color:#22863a;font-weight:700}.pl-ml{color:#735c0f}.pl-mh,.pl-mh .pl-en,.pl-ms{color:#005cc5;font-weight:700}.pl-mi{color:#24292e;font-style:italic}.pl-mb{color:#24292e;font-weight:700}.pl-md{background-color:#ffeef0;color:#b31d28}.pl-mi1{background-color:#f0fff4;color:#22863a}.pl-mc{background-color:#ffebda;color:#e36209}.pl-mi2{background-color:#005cc5;color:#f6f8fa}.pl-mdr{color:#6f42c1;font-weight:700}.pl-ba{color:#586069}.pl-sg{color:#959da5}.pl-corl{color:#032f62;-webkit-text-decoration:underline;text-decoration:underline}@media (prefers-color-scheme:dark){.pl-c{color:#959da5}/*! * GitHub Dark v0.5.0 * Copyright (c) 2012 - 2017 GitHub, Inc. * Licensed under MIT (https://github.com/primer/github-syntax-theme-generator/blob/master/LICENSE) */.pl-c1,.pl-s .pl-v{color:#c8e1ff}.pl-e,.pl-en{color:#b392f0}.pl-s .pl-s1,.pl-smi{color:#f6f8fa}.pl-ent{color:#7bcc72}.pl-k{color:#ea4a5a}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#79b8ff}.pl-ml,.pl-v{color:#fb8532}.pl-bu{color:#d73a49}.pl-c2,.pl-ii{background-color:#d73a49;color:#fafbfc}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{color:#7bcc72;font-weight:700}.pl-mh,.pl-mh .pl-en,.pl-ms{color:#0366d6;font-weight:700}.pl-mi{color:#f6f8fa;font-style:italic}.pl-mb{color:#f6f8fa;font-weight:700}.pl-md{background-color:#ffeef0;color:#b31d28}.pl-mi1{background-color:#f0fff4;color:#176f2c}.pl-mc{background-color:#fffdef;color:#b08800}.pl-mi2{background-color:#959da5;color:#2f363d}.pl-mdr{color:#b392f0;font-weight:700}.pl-mo{color:#0366d6}.pl-ba{color:#ffeef0}.pl-sg{color:#6a737d}.pl-corl{color:#79b8ff;-webkit-text-decoration:underline;text-decoration:underline}}.InstallViaCLI-module--root--e7571{line-height:2rem;position:relative}.InstallViaCLI-module--root--e7571 span{margin-right:5px}.InstallViaCLI-module--root--e7571 code{display:block;margin-right:3rem;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ClipboardButton-module--copy-wrapper--e75f0{bottom:0;min-height:2rem;position:absolute;right:0}.ClipboardButton-module--copy-wrapper--e75f0 img{opacity:.87}.ClipboardButton-module--copy-success--e2048{line-height:1rem;position:absolute;right:4rem;white-space:nowrap}@media (prefers-color-scheme:dark){.ClipboardButton-module--copy-wrapper--e75f0 img{filter:invert(1)}}.PluginWikiContent-module--lightbox--13a29{align-items:center;background-color:rgba(0,0,0,.5);display:flex;height:100%;justify-content:center;left:0;position:fixed;top:0;width:100%;z-index:9999}.PluginWikiContent-module--lightbox--13a29 img{box-shadow:0 0 20px rgba(0,0,0,.5);max-height:90%;max-width:90%}.PluginWikiContent-module--lightbox--13a29 img:hover{cursor:pointer}.pluginHealth>div:last-child{margin-bottom:2rem}#pluginHealth--score{align-items:center;display:flex;justify-content:space-evenly;line-height:1;padding:20px 0 30px}#pluginHealth--score #pluginHealth--score-value{font-size:64px}#pluginHealth--score #pluginHealth--score-unit{font-size:24px}#pluginHealth--score #pluginHealth--score-label{font-size:14px;text-align:center;text-transform:uppercase}.pluginHealth--score-section{border-top:1px solid silver;padding:13px 0}.pluginHealth--score-section:last-of-type{border-bottom:1px solid silver;margin-bottom:2rem}.pluginHealth--score-section--collapsible-icon{display:flex;justify-content:flex-end;width:24px}.pluginHealth--score-section--collapsible-icon ion-icon{width:14px}.pluginHealth--score-section--header{align-items:center;cursor:pointer;display:flex;font-size:1.5rem;height:3rem;line-height:3rem;margin-top:.5rem}.pluginHealth--score-section--header--icon{align-items:center;display:flex;width:24px}.pluginHealth-score-icon--incorrect{color:#e6001f}.pluginHealth-score-icon--correct{color:#1ea64b}.pluginHealth--score-section--header-title{flex-grow:1;font-size:2rem;font-weight:400}.pluginHealth--score-section--header-score{font-size:1.5rem;font-weight:400}.pluginHealth--score-section--header-icon{width:40px}.pluginHealth-score-components--list{padding-left:40px;padding-right:24px}.pluginHealth-score-components--list.collapse{visibility:collapse}.pluginHealth--score-component{align-items:flex-start;display:flex;line-height:1.75;margin:14px 0 16px}.pluginHealth--score-component--icon{line-height:1;margin-right:6px}.pluginHealth--score-component--reasons{align-items:flex-start;display:flex;flex-direction:column;flex-grow:1}.pluginHealth--score-component--reasons span{line-height:1}#pluginReleases--container{margin-top:10px}#pluginReleases--container .item{margin-bottom:10px}#pluginReleases--container .card-text h2{font-size:1.4rem}#pluginReleases--container .card-text h3{font-size:1.2rem}#pluginReleases--container .card-text h4{font-size:1.1rem}#pluginReleases--container .card-text h5{font-size:1rem}#pluginReleases--container .github-icon{margin-left:7px}:root{--plugin-icon-width:2.25em;--plugin-padding:0.25em;--search-background:#eae9e8}#searchpage #grid-box{background:#eae9e8;background:var(--search-background)}.SearchResults--GridBox{display:flex;flex-flow:row wrap;justify-content:center;margin:0 2rem}.SearchResults--ItemBox{background:var(--background);border:.1rem solid #ccc;border-radius:3px;box-sizing:border-box;color:var(--bs-secondary);display:block;flex:0 0 auto;font-size:.85rem;height:19.5rem;margin:.25rem;min-height:6rem;opacity:.9;padding:.67rem;position:relative;text-align:left;-webkit-text-decoration:none!important;text-decoration:none!important;width:13rem}@media (max-width:768px){.SearchResults--ItemBox{width:calc(100% - .4rem)}}.SearchResults--ItemBox:hover{border:.1rem solid #999;box-shadow:0 2px 3px rgba(0,0,0,.25);cursor:pointer;opacity:1;-webkit-text-decoration:none;text-decoration:none}.Plugin--PluginContainer{display:block;height:100%;position:relative}.Plugin--PluginContainer *{color:var(--color)}.Plugin--PluginContainer a,.Plugin--PluginContainer a:visited{color:var(--link-color)}.Plugin--PluginContainer:hover{-webkit-text-decoration:none;text-decoration:none}.Plugin--IconContainer{bottom:3rem;display:block;grid-area:icon;opacity:.75;position:absolute;right:.25rem;z-index:9}.Plugin--IconContainer i{border-radius:3px;color:#fff;display:inline-block;font-size:1.33rem;font-style:normal;height:3rem;line-height:3rem;margin:-1px 0 0 -1px;text-align:center;text-shadow:rgba(0,0,0,.5) 1px 2px 1px;width:2.25em;width:var(--plugin-icon-width)}.Plugin--IconContainer i *{color:inherit}.Plugin--TitleContainer{grid-area:title}.Plugin--TitleContainer h4{color:var(--color);font-size:1rem;font-weight:400;line-height:1.1rem;margin:0 0 .25rem;max-height:2.2rem;overflow:hidden;position:relative}.Plugin--InstallsContainer{color:#999;font-size:.75rem;grid-area:installs;margin:0;padding:0}.Plugin--VersionContainer{color:var(--link-color);font-size:.75rem;grid-area:version;line-height:1rem;margin-right:.5rem;white-space:nowrap}.Plugin--VersionContainer span{margin-right:.25rem}.Plugin--LabelsContainer{grid-area:labels;line-height:.75rem;margin:.25rem 0;max-height:2rem;min-height:1rem;overflow:hidden}.Plugin--LabelsContainer div{color:var(--link-color);display:inline;font-size:.75rem;line-height:1rem;margin-right:.25rem}.Plugin--LabelsContainer div:after{content:", "}.Plugin--LabelsContainer div:last-child:after{content:""}.Plugin--LabelsContainer .label-link{white-space:nowrap}.Plugin--ExcerptContainer{word-wrap:break-word;grid-area:excerpt;height:4.4rem;line-height:1.1rem;margin:0;max-height:4.4rem;min-height:.5rem;overflow:hidden;padding:0;position:relative;text-overflow:ellipsis;white-space:normal}.Plugin--AuthorsContainer{bottom:3rem;grid-area:authors;max-width:8rem;overflow:hidden;position:absolute;white-space:nowrap}.Plugin--AuthorsContainer div{font-size:.75rem;line-height:1rem;margin-right:.5rem}.Plugin--HealthScoreContainer{bottom:0;position:absolute;width:100%}.Plugin--HealthScoreContainer div{display:flex;font-size:1rem;font-weight:700;justify-content:space-between;row-gap:.5rem}.SearchResults--List .SearchResults--ItemBox{height:auto;min-height:0;min-height:auto;width:calc(100% - 1rem)}.SearchResults--List .Plugin--IconContainer{bottom:auto;left:.25em;left:var(--plugin-padding);right:auto;top:.25em;top:var(--plugin-padding)}.SearchResults--List .Plugin--PluginContainer{padding-left:5em;padding-left:calc(var(--plugin-padding) + var(--plugin-icon-width)*2 + var(--plugin-padding));position:relative}.SearchResults--List .Plugin--PluginContainer .Plugin--AuthorsContainer{position:static}.SearchResults--List .Plugin--ExcerptContainer{height:auto;margin-bottom:1rem}.SearchResults--List .Plugin--HealthScoreContainer{margin-top:10px;position:static}.Pagination--Container{align-items:center;display:flex;flex-flow:column wrap;justify-content:center;margin-top:1rem}.SearchResultsCount{text-align:center}.SearchBox--Container .form-group{width:100%}.add-m{margin-left:8rem}@media only screen and (max-width:768px){.add-m{margin-left:1rem;margin-right:1rem}}.IndexPage--Container{align-items:start;background:#168bb9;border-radius:0;color:#fff;display:grid;grid-template-areas:"logo content";justify-content:center;justify-items:center;margin:0;min-height:350px;place-items:start center;text-align:center;transition:all .5s ease-in}.IndexPage--Container .logo{display:inline-block;grid-area:logo;height:294px;width:271px}.IndexPage--Container .content{grid-area:content;max-width:1024px}@media (max-width:992px){.IndexPage--Container{grid-template-areas:"logo" "content"}}.IndexPage--Container p{box-sizing:content-box;font-size:1.1rem;margin:1rem;text-align:center}.IndexPage--Container h1{font-feature-settings:normal;font-family:Georgia,Times,Times New Roman,serif;font-size:64px;font-style:normal;font-variant:normal;font-weight:700;line-height:70px}.IndexPage--Container fieldset{display:block;margin:1em 10%;text-align:center}.IndexPage--Container .input-group>.form-control{max-width:75%}.Filters--Container{background:var(--background);border:1px solid rgba(0,0,0,.2);border-radius:3px;box-shadow:0 1px .5rem rgba(0,0,0,.15);font-size:.85rem;font-weight:200;padding:0 1rem 1.5rem;position:relative;text-align:left}.Filters--Container fieldset{margin-bottom:1rem}.Filters--Container legend{font-size:1rem}.Filters--Container label{display:block;float:none}.Filters--Container li>label>input,.Filters--Container li>label>span{display:inline-block;margin-left:.25rem}.Filters--Container .headerContainer{border-top:1px solid rgba(0,0,0,.1);padding:1rem}.ActiveFilters--FilterBox{text-align:center;white-space:nowrap;width:100%}.ActiveFilters--FilterBox div{display:inline-block;margin-right:.5rem;padding-right:.5rem;white-space:nowrap}.ActiveFilters--FilterBox .nav-link{cursor:pointer;display:inline-block;margin:0 .5rem 0 0}.ActiveFilters--FilterBox .nav-link:before{border:1px solid #ccc;border-radius:2;content:"x ";display:inline-block;font-size:.75rem;line-height:1em;margin:-.133rem .25rem 0 -.75rem;padding:0 0 .1rem;text-align:center;vertical-align:middle;width:1.3em}.SearchByAlgolia-module--root--26db9{padding-left:1em}</style><style type="text/css"> .anchor.before { position: absolute; top: 0; left: 0; transform: translateX(-100%); padding-right: 4px; } .anchor.after { display: inline-block; padding-left: 4px; } h1 .anchor svg, h2 .anchor svg, h3 .anchor svg, h4 .anchor svg, h5 .anchor svg, h6 .anchor svg { visibility: hidden; } h1:hover .anchor svg, h2:hover .anchor svg, h3:hover .anchor svg, h4:hover .anchor svg, h5:hover .anchor svg, h6:hover .anchor svg, h1 .anchor:focus svg, h2 .anchor:focus svg, h3 .anchor:focus svg, h4 .anchor:focus svg, h5 .anchor:focus svg, h6 .anchor:focus svg { visibility: visible; } </style><script> document.addEventListener("DOMContentLoaded", function(event) { var hash = window.decodeURI(location.hash.replace('#', '')) if (hash !== '') { var element = document.getElementById(hash) if (element) { var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop var clientTop = document.documentElement.clientTop || document.body.clientTop || 0 var offset = element.getBoundingClientRect().top + scrollTop - clientTop // Wait for the browser to finish rendering before scrolling. setTimeout((function() { window.scrollTo(0, offset - 0) }), 0) } } }) </script><style>.gatsby-image-wrapper{position:relative;overflow:hidden}.gatsby-image-wrapper picture.object-fit-polyfill{position:static!important}.gatsby-image-wrapper img{bottom:0;height:100%;left:0;margin:0;max-width:none;padding:0;position:absolute;right:0;top:0;width:100%;object-fit:cover}.gatsby-image-wrapper [data-main-image]{opacity:0;transform:translateZ(0);transition:opacity .25s linear;will-change:opacity}.gatsby-image-wrapper-constrained{display:inline-block;vertical-align:top}</style><noscript><style>.gatsby-image-wrapper noscript [data-main-image]{opacity:1!important}.gatsby-image-wrapper [data-placeholder-image]{opacity:0!important}</style></noscript><script type="module">const e="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;e&&document.body.addEventListener("load",(function(e){const t=e.target;if(void 0===t.dataset.mainImage)return;if(void 0===t.dataset.gatsbyImageSsr)return;let a=null,n=t;for(;null===a&&n;)void 0!==n.parentNode.dataset.gatsbyImageWrapper&&(a=n.parentNode),n=n.parentNode;const o=a.querySelector("[data-placeholder-image]"),r=new Image;r.src=t.currentSrc,r.decode().catch((()=>{})).then((()=>{t.style.opacity=1,o&&(o.style.opacity=0,o.style.transition="opacity 500ms linear")}))}),!0);</script><title data-react-helmet="true">Sonargraph Integration | Jenkins plugin</title><link data-react-helmet="true" href="https://www.jenkins.io/favicon.ico" rel="shortcut icon" type="image/x-icon"/><link data-react-helmet="true" href="https://www.jenkins.io/apple-touch-icon.png" rel="apple-touch-icon" sizes="180x180"/><link data-react-helmet="true" href="https://www.jenkins.io/favicon-32x32.png" rel="icon" sizes="32x32" type="image/png"/><link data-react-helmet="true" href="https://www.jenkins.io/favicon-16x16.png" rel="icon" sizes="16x16" type="image/png"/><link data-react-helmet="true" href="/site.webmanifest" rel="manifest"/><link data-react-helmet="true" color="#5bbad5" href="https://www.jenkins.io/safari-pinned-tab.svg" rel="mask-icon"/><link data-react-helmet="true" href="https://plugins.jenkins.io/sonargraph-integration" rel="canonical"/><script data-react-helmet="true" src="https://www.jenkins.io/assets/bower/jquery/jquery.min.js"></script><script data-react-helmet="true" src="https://www.jenkins.io/js/copy-to-clipboard.js"></script><script data-react-helmet="true" src="https://www.jenkins.io/assets/bower/anchor-js/anchor.min.js"></script><script data-react-helmet="true" src="https://www.jenkins.io/assets/bower/@popperjs/core/umd/popper.min.js"></script><script data-react-helmet="true" src="https://www.jenkins.io/assets/bower/bootstrap/js/bootstrap.min.js"></script><script data-react-helmet="true" src="https://cdn.jsdelivr.net/npm/lit@3.1.4/polyfill-support.js"></script><script data-react-helmet="true" src="https://cdn.jsdelivr.net/npm/@webcomponents/webcomponentsjs@2.8.0/webcomponents-loader.js"></script><script data-react-helmet="true" data="ionicons" src="https://cdnjs.cloudflare.com/ajax/libs/ionicons/7.3.1/ionicons/ionicons.esm.js" type="module"></script><script data-react-helmet="true" data="ionicons" src="https://cdnjs.cloudflare.com/ajax/libs/ionicons/7.3.1/ionicons/ionicons.js"></script><script data-react-helmet="true" src="https://cdn.jsdelivr.net/npm/@jenkinsci/jenkins-io-components/+esm" type="module"></script><script data-react-helmet="true" src="https://cdn.jsdelivr.net/npm/@jenkinsci/jenkins-io-components/"></script><style data-react-helmet="true">html { min-height:100%; position: relative; }</style><link rel="sitemap" type="application/xml" href="/sitemap-index.xml"/><link rel="canonical" href="https://plugins.jenkins.io/sonargraph-integration/" data-baseprotocol="https:" data-basehost="plugins.jenkins.io"/><link rel="preconnect" href="https://jenkins-matomo.do.g4v.dev"/></head><body><div id="___gatsby"><div style="outline:none" tabindex="-1" id="gatsby-focus-wrapper"><div id="pluginPage"><jio-navbar class="fixed-nav" theme="auto" property="https://plugins.jenkins.io/"></jio-navbar><div id="grid-box"><div class="title-wrapper"><h1 class="title">Sonargraph Integration</h1><button class="app-button">How to install</button></div><div class="row flex pluginContainer flex-column-reverse flex-md-row"><div class="col-md-9 main"><ul class="nav nav-pills"><li class="nav-item"><a aria-current="page" class="nav-link active" href="/sonargraph-integration/">Documentation</a></li><li class="nav-item"><a class="nav-link" href="/sonargraph-integration/releases/">Releases</a></li><li class="nav-item"><a class="nav-link" href="/sonargraph-integration/issues/">Issues</a></li><li class="nav-item"><a class="nav-link" href="/sonargraph-integration/dependencies/">Dependencies</a></li><li class="nav-item"><a class="nav-link" href="/sonargraph-integration/healthscore/">Health Score</a></li></ul><div><div class="content"><div><div id="plugin-content-readme" class="md" data-path="README.md"> <article class="markdown-body entry-content container-lg" itemprop="text"> <markdown-accessiblity-table> <div class="table-responsive"><table class="table table-bordered"> <thead> <tr> <th>Plugin Information</th> </tr> </thead> </table></div> </markdown-accessiblity-table> <p dir="auto">Older versions of this plugin may not be safe to use. Please review the following warnings before using an older version:</p> <ul dir="auto"> <li><a href="https://jenkins.io/security/advisory/2020-07-02/#SECURITY-1775" rel="nofollow">Stored XSS vulnerability</a></li> </ul> <div class="markdown-heading" dir="auto"> </div> <p dir="auto">This plugin integrates <a href="https://www.hello2morrow.com/products/sonargraph" rel="nofollow">Sonargraph</a> version 9 and newer into your build. Sonargraph allows to define an architecture for a software system and automatically checks how the code base conforms to it.</p> <div class="markdown-heading" dir="auto"> <h4 class="heading-element" dir="auto" id="plugin-content-contents" style="position: relative">Contents<a href="#plugin-content-contents" aria-label="contents permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h4> </div> <div class="markdown-heading" dir="auto"> <h2 class="heading-element" dir="auto" id="plugin-content-introduction" style="position: relative">Introduction<a href="#plugin-content-introduction" aria-label="introduction permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h2> </div> <p dir="auto"><a href="https://www.hello2morrow.com/products/sonargraph" rel="nofollow">Sonargraph</a> analyzes the static (i.e. compile-time) dependencies of your software. The free-of-charge license for the integration with Jenkins and also <a href="http://www.sonarsource.org/" rel="nofollow">SonarQube</a> allows to detect cyclic dependencies and additional metrics. You can mark the build as "unstable" or "failed" if cyclic dependencies are detected.<br> The real benefit of Sonargraph is that you can define a logical architecture and perform automatic checks how the code conforms to it. This functionality is only available for free, if you are working on a non-commercial Open-Source project. More information is available on our <a href="https://www.hello2morrow.com/" rel="nofollow">homepage</a>, you can check there if you are eligible for a <a href="https://www.hello2morrow.com/products/pricelist" rel="nofollow">free license</a>.</p> <p dir="auto">The Sonargraph Build component integrates Sonargraph in Ant, Bazel, Gradle, Maven and Shell based builds. The <a href="http://eclipse.hello2morrow.com/doc/build/content/index.html" rel="nofollow">online manual</a> provides more details. This Jenkins plugin allows to define if the build should be marked as "unstable" or "failed" if architecture violations, cyclic dependencies, etc. are detected. Trends of metrics are displayed in charts and additionally the generated detailed HTML report is available for each build.</p> <div class="markdown-heading" dir="auto"> <h2 class="heading-element" dir="auto" id="plugin-content-getting-started" style="position: relative">Getting Started<a href="#plugin-content-getting-started" aria-label="getting started permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h2> </div> <p dir="auto">If you already have Sonargraph integrated in your build, and a Sonargraph report is already generated during one of your build steps, use the post-build step called "Sonargraph Integration Report Generation &#x26; Analysis", and select "Pre-generated". In this case no global Jenkins configuration for Sonargraph Build is needed.</p> <p dir="auto">If you are new to Sonargraph, we advice you to register on our <a href="http://www.hello2morrow.com/" rel="nofollow">Sonargraph Web Site</a>, have a look at the whitepapers and screencasts to get an idea of Sonargraph's capabilities.<br> You need to have a license in order to analyse a project. To get started an evaluation license or the free integration license is sufficient.</p> <p dir="auto">If you are new to Sonargraph, use the post-build step called "Sonargraph Integration Report Generation &#x26; Analysis", and select "Generate with Sonargraph Build". In this case an installation of SonargraphBuild must be configured in global Jenkins configuration.</p> <p dir="auto"><strong>NOTE:</strong> This Jenkins plugin requires Sonargraph version 9 and newer. For Sonargraph version 7 use <a href="https://wiki.jenkins-ci.org/display/JENKINS/Sonargraph+Plugin" rel="nofollow">Sonargraph Plugin</a>.</p> <div class="markdown-heading" dir="auto"> <h2 class="heading-element" dir="auto" id="plugin-content-global-configuration" style="position: relative">Global Configuration<a href="#plugin-content-global-configuration" aria-label="global configuration permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h2> </div> <p dir="auto">The first step is to configure one or more versions of Sonargraph Build in "Manage Jenkins"-> "Global Tool Configuration"</p> <div class="markdown-heading" dir="auto"> <h3 class="heading-element" dir="auto" id="plugin-content-tool-installation-for-sonargraph-build" style="position: relative">Tool Installation for Sonargraph Build<a href="#plugin-content-tool-installation-for-sonargraph-build" aria-label="tool installation for sonargraph build permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h3> </div> <p dir="auto"><strong>NOTE:</strong> This global configuration is only required when you are going to use the "Generate with Sonargraph Build" option in "Sonargraph Integration Generation &#x26; Analysis" post-build action.</p> <p dir="auto">To see the global configuration options after installing the plugin, go to "Manage Jenkins" -> "Global Tool Configuration". You will find the "Sonargraph Build" section</p> <p dir="auto"><a target="_blank" rel="noopener noreferrer" href="https://github.com/jenkinsci/sonargraph-integration-plugin/blob/develop/screenshot/GlobalToolConfiguration1.png"><img src="https://cdn.jsdelivr.net/gh/jenkinsci/sonargraph-integration-plugin@develop/screenshot/GlobalToolConfiguration1.png" style="max-width: 100%;"></a></p> <p dir="auto">Press button "Sonargraph Build Installations..." to see the list of already installed Sonargraph Build installations Jenkins knows about, if any. To add a new "Installation" of Sonargraph Build press button "Add Sonargraph Build", give it a descriptive name, use default Installer "Install from hello2morrow" for it, and select a Sonargraph Build version from the version drop down box.</p> <p dir="auto"><a target="_blank" rel="noopener noreferrer" href="https://github.com/jenkinsci/sonargraph-integration-plugin/blob/develop/screenshot/GlobalToolConfiguration2.png"><img src="https://cdn.jsdelivr.net/gh/jenkinsci/sonargraph-integration-plugin@develop/screenshot/GlobalToolConfiguration2.png" style="max-width: 100%;"></a></p> <p dir="auto"><strong>NOTE:</strong> Version "newest" automatically updates your Sonargraph Build installation to the most recent version.</p> <div class="markdown-heading" dir="auto"> <h3 class="heading-element" dir="auto" id="plugin-content-sonargraph-license-server" style="position: relative">Sonargraph License Server<a href="#plugin-content-sonargraph-license-server" aria-label="sonargraph license server permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h3> </div> <p dir="auto">Sonargraph uses a web-based hello2morrow license server for activation code based licenses by default.<br> If you run your own local Sonargraph license server configure it at "Manage Jenkins" -> "Configure System".</p> <p dir="auto"><a target="_blank" rel="noopener noreferrer" href="https://github.com/jenkinsci/sonargraph-integration-plugin/blob/develop/screenshot/LicenseServerConfiguration.png"><img src="https://cdn.jsdelivr.net/gh/jenkinsci/sonargraph-integration-plugin@develop/screenshot/LicenseServerConfiguration.png" style="max-width: 100%;"></a></p> <div class="markdown-heading" dir="auto"> <h2 class="heading-element" dir="auto" id="plugin-content-job-configuration" style="position: relative">Job Configuration<a href="#plugin-content-job-configuration" aria-label="job configuration permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h2> </div> <p dir="auto">Use the post-build action "Sonargraph Integration Report Generation &#x26; Analysis" to create Sonargraph's XML and HTML reports (or use a pre-generated XML report) and to configure how the Sonargraph analysis should affect the final result of the build.<br> For every Sonargraph metric supported by this plugin, you have the following options:</p> <ul dir="auto"> <li>Don't mark: Will not change the build result in any way.</li> <li>Build unstable: If the value for this metric is greater than zero, the build result will be set as "unstable".</li> <li>Build failed: If the value for this metric is greater than zero, the build result will be set as "failure".</li> </ul> <p dir="auto">Take into account that if you have set to mark the build unstable for one metric, failed for any other and both metric's value are greater than zero, the worst state will prevail, so the build will be marked as failure in this case.<br> Besides controlling the build result, the plugin also generates graphics to monitor the trend of metrics across builds and it will display the full Sonargraph HTML report for each build.</p> <p dir="auto">NOTE: For the free Jenkins / SonarQube license, only the options for "cyclic elements" and "empty workspace" are available.</p> <div class="markdown-heading" dir="auto"> <h3 class="heading-element" dir="auto" id="plugin-content-add-post-build-action" style="position: relative">Add post-build action<a href="#plugin-content-add-post-build-action" aria-label="add post build action permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h3> </div> <p dir="auto">Add post build action "Sonargraph Integration Report Generation &#x26; Analysis" to your job.</p> <p dir="auto"><a target="_blank" rel="noopener noreferrer" href="https://github.com/jenkinsci/sonargraph-integration-plugin/blob/develop/screenshot/AddPostBuildAction.png"><img src="https://cdn.jsdelivr.net/gh/jenkinsci/sonargraph-integration-plugin@develop/screenshot/AddPostBuildAction.png" style="max-width: 100%;"></a></p> <div class="markdown-heading" dir="auto"> <h2 class="heading-element" dir="auto" id="plugin-content-use-pre-generated-report" style="position: relative">Use Pre-Generated Report<a href="#plugin-content-use-pre-generated-report" aria-label="use pre generated report permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h2> </div> <p dir="auto">Use this option to use a pre-generated Sonargraph report. To do so you must use Sonargraph Maven plugin, Sonargraph Gradle plugin, or Sonargraph Ant task in another upstream build step.<br> Enter the path to the Sonargraph XML report file that has been generated via the ANT task of Sonargraph. This path must be relative to the workspace.</p> <p dir="auto"><a target="_blank" rel="noopener noreferrer" href="https://github.com/jenkinsci/sonargraph-integration-plugin/blob/develop/screenshot/PreGeneratedReport.png"><img src="https://cdn.jsdelivr.net/gh/jenkinsci/sonargraph-integration-plugin@develop/screenshot/PreGeneratedReport.png" style="max-width: 100%;"></a></p> <ul dir="auto"> <li><strong>"Sonargraph XML Report"</strong> Enter the path to the pre-generated Sonargraph XML report file (without extension ".xml"). This path must be relative to the workspace.</li> </ul> <div class="markdown-heading" dir="auto"> <h2 class="heading-element" dir="auto" id="plugin-content-generate-report-with-sonargraph-build" style="position: relative">Generate Report with Sonargraph Build<a href="#plugin-content-generate-report-with-sonargraph-build" aria-label="generate report with sonargraph build permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h2> </div> <p dir="auto">Use this option to let Sonargraph Build create a Sonargraph report.</p> <p dir="auto"><a target="_blank" rel="noopener noreferrer" href="https://github.com/jenkinsci/sonargraph-integration-plugin/blob/develop/screenshot/GenerateWithSonargraphBuild.png"><img src="https://cdn.jsdelivr.net/gh/jenkinsci/sonargraph-integration-plugin@develop/screenshot/GenerateWithSonargraphBuild.png" style="max-width: 100%;"></a></p> <ul dir="auto"> <li><strong>"Sonargraph System Directory"</strong> Enter the path to the Sonargraph system (*.sonargraph) directory. This path must be relative to the workspace.</li> <li><strong>"Sonargraph License File"</strong> Sonargraph license file location. If this parameter is not specified, you must specify the activation code parameter.</li> <li><strong>"Sonargraph Activation Code"</strong> Sonargraph license activation code. If this parameter is not specified, you must specify a license file parameter.</li> </ul> <p dir="auto"><a target="_blank" rel="noopener noreferrer" href="https://github.com/jenkinsci/sonargraph-integration-plugin/blob/develop/screenshot/AdvancedOptions.png"><img src="https://cdn.jsdelivr.net/gh/jenkinsci/sonargraph-integration-plugin@develop/screenshot/AdvancedOptions.png" style="max-width: 100%;"></a></p> <ul dir="auto"> <li><strong>"Skip"</strong> Skip Sonargraph Jenkins Plugin.</li> <li><strong>"UseProxy"</strong> Use Jenkins proxy configuration when connecting to Sonargraph license server.</li> <li><strong>"Workspace Profile"</strong> The profile file name (e.g. "BuildProfile.xml") for transforming the workspace paths to match the build environment.</li> <li><strong>"Quality Model File"</strong> Use a built-in Quality Model, or an external Quality Model instead of the Quality Model included in Sonargraph Software System. Must be either a file within workspace with extension "sgqm", or one of the built-in Quality Models <ul dir="auto"> <li>Sonargraph:Default.sgqm (language-independent)</li> <li>Sonargraph:Java.sgqm (language-specific)</li> <li>Sonargraph:CSharp.sgqm (language-specific)</li> <li>Sonargraph:CPlusPlus.sgqm (language-specific)</li> </ul> </li> <li><strong>"Virtual Model"</strong> The virtual model to be used when checking for issues. This parameter overrides the default virtual model that is set when the system is opened. Licensing: <ul dir="auto"> <li>Sonargraph Explorer Changing virtual models is not supported, "Parser" model is taken.</li> <li>Sonargraph Architect Changing virtual models is supported, "Modifiable.vm" is taken by default.</li> </ul> </li> <li><strong>"Snapshot Directory"</strong> Target directory for the created snapshot. Only if either this parameter or snapshotFileName is provided, a snapshot will be generated. Parameter can only be used with Sonargraph Architect license.</li> <li><strong>"Snapshot File Name"</strong> The target file name (without extension). Only if either this parameter or snapshotDirectory is provided, a snapshot will be generated. Parameter can only be used with Sonargraph Architect license.</li> <li><strong>"Sonargraph Build Version"</strong> Select the Sonargraph Build version.</li> <li><strong>"JDK"</strong> Select a JDK to be used for Sonargraph Build.</li> <li><strong>"Java"</strong> Select if your Sonargraph system uses Java.</li> <li><strong>"C#"</strong> Select if your Sonargraph system uses C#.</li> <li><strong>"C++"</strong> Select if your Sonargraph system uses C+.</li> <li><strong>"Python"</strong> Select if your Sonargraph system uses Python.</li> </ul> <p dir="auto"><a target="_blank" rel="noopener noreferrer" href="https://github.com/jenkinsci/sonargraph-integration-plugin/blob/develop/screenshot/Logging.png"><img src="https://cdn.jsdelivr.net/gh/jenkinsci/sonargraph-integration-plugin@develop/screenshot/Logging.png" style="max-width: 100%;"></a></p> <ul dir="auto"> <li><strong>"Log level"</strong> Level of logging detail. One of: off, error, warn, info, debug, trace, all. Default: info.</li> <li><strong>"Log file"</strong> Path of the log file to be used for SonargraphBuild (relative to workspace of Jenkins job). Default: sonargraph_build.log.</li> </ul> <p dir="auto"><a target="_blank" rel="noopener noreferrer" href="https://github.com/jenkinsci/sonargraph-integration-plugin/blob/develop/screenshot/Baseline.png"><img src="https://cdn.jsdelivr.net/gh/jenkinsci/sonargraph-integration-plugin@develop/screenshot/Baseline.png" style="max-width: 100%;"></a></p> <ul dir="auto"> <li><strong>"Baseline Report Path"</strong> Path to the baseline Sonargraph XML report file (without extension ".xml"). This path must be relative to the workspace.</li> </ul> <div class="markdown-heading" dir="auto"> <h3 class="heading-element" dir="auto" id="plugin-content-chart-configuration" style="position: relative">Chart Configuration<a href="#plugin-content-chart-configuration" aria-label="chart configuration permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h3> </div> <p dir="auto">Besides controlling the build result, the plugin also generates graphics to monitor the trend of metrics across builds and it will display the full Sonargraph HTML report for each build.</p> <p dir="auto"><a target="_blank" rel="noopener noreferrer" href="https://github.com/jenkinsci/sonargraph-integration-plugin/blob/develop/screenshot/ChartConfiguration.png"><img src="https://cdn.jsdelivr.net/gh/jenkinsci/sonargraph-integration-plugin@develop/screenshot/ChartConfiguration.png" alt="Chart Configuration" style="max-width: 100%;"></a></p> <p dir="auto">Either select the charts that you want to show by their language, or show all of them by selecting "All charts".</p> <p dir="auto"><a target="_blank" rel="noopener noreferrer" href="https://github.com/jenkinsci/sonargraph-integration-plugin/blob/develop/screenshot/SelectCharts.png"><img src="https://cdn.jsdelivr.net/gh/jenkinsci/sonargraph-integration-plugin@develop/screenshot/SelectCharts.png" alt="Select Charts" style="max-width: 100%;"></a></p> <div class="markdown-heading" dir="auto"> <h3 class="heading-element" dir="auto" id="plugin-content-mark-build" style="position: relative">Mark Build<a href="#plugin-content-mark-build" aria-label="mark build permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h3> </div> <p dir="auto">For every Sonargraph metric supported by this plugin, you have the following options:</p> <ul dir="auto"> <li><strong>Don't mark:</strong> Will not change the build result in any way.</li> <li><strong>Build unstable:</strong> If the value for this metric is greater than zero, the build result will be set as "unstable".</li> <li><strong>Build failed:</strong> If the value for this metric is greater than zero, the build result will be set as "failure".</li> </ul> <p dir="auto">Take into account that if you have set to mark the build unstable for one metric, failed for any other and both metric's value are greater than zero, the worst state will prevail, so the build will be marked as failure in this case.</p> <p dir="auto">NOTE: For the free Jenkins / SonarQube license, only the options for "cyclic elements" and "empty workspace" are available.</p> <p dir="auto"><a target="_blank" rel="noopener noreferrer" href="https://github.com/jenkinsci/sonargraph-integration-plugin/blob/develop/screenshot/MarkBuild.png"><img src="https://cdn.jsdelivr.net/gh/jenkinsci/sonargraph-integration-plugin@develop/screenshot/MarkBuild.png" style="max-width: 100%;"></a></p> <div class="markdown-heading" dir="auto"> <h2 class="heading-element" dir="auto" id="plugin-content-configure-jenkins-logging" style="position: relative">Configure Jenkins Logging<a href="#plugin-content-configure-jenkins-logging" aria-label="configure jenkins logging permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h2> </div> <p dir="auto">Sonargraph's Jenkins integration uses the standard Jenkins logger mechanism to provide feedback to the user about the events that occur during the execution of the post-build action or the generation of the graphics. To enable this feature follow these steps:</p> <ul dir="auto"> <li>Go to "Manage Jenkins" -> "System Log".</li> <li>Click "Add new log recorder" button.</li> <li>Provide the name you wish for this log recorder.</li> <li>In the field logger, provide the value with the exact value "com.hello2morrow.sonargraph.integration.jenkins" (Without the quotation marks).</li> <li>Select the logging level for this logger.</li> </ul> <p dir="auto">Now you should have the new log recorder configured like this:</p> <p dir="auto"><a target="_blank" rel="noopener noreferrer" href="https://github.com/jenkinsci/sonargraph-integration-plugin/blob/develop/screenshot/SonargraphLogger.png"><img src="https://cdn.jsdelivr.net/gh/jenkinsci/sonargraph-integration-plugin@develop/screenshot/SonargraphLogger.png" style="max-width: 100%;"></a></p> <ul dir="auto"> <li>Click the save button.</li> </ul> <p dir="auto">When first created this log recorder is going to be empty and you will be able to see messages as the post-build actions are executed and graphics are generated.</p> <div class="markdown-heading" dir="auto"> <h2 class="heading-element" dir="auto" id="plugin-content-changelog" style="position: relative">Changelog<a href="#plugin-content-changelog" aria-label="changelog permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h2> </div> <div class="markdown-heading" dir="auto"> <h4 class="heading-element" dir="auto" id="plugin-content-501-september-29th-2020" style="position: relative">5.0.1 September 29th, 2020<a href="#plugin-content-501-september-29th-2020" aria-label="501 september 29th 2020 permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h4> </div> <ul dir="auto"> <li>Fixed Issue Category 'QualityGate'</li> </ul> <div class="markdown-heading" dir="auto"> <h4 class="heading-element" dir="auto" id="plugin-content-500-september-15th-2020" style="position: relative">5.0.0 September 15th, 2020<a href="#plugin-content-500-september-15th-2020" aria-label="500 september 15th 2020 permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h4> </div> <ul dir="auto"> <li>Requires Sonargraph Build 10.4.0</li> </ul> <div class="markdown-heading" dir="auto"> <h4 class="heading-element" dir="auto" id="plugin-content-402-july-29th-2020" style="position: relative">4.0.2 July 29th, 2020<a href="#plugin-content-402-july-29th-2020" aria-label="402 july 29th 2020 permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h4> </div> <ul dir="auto"> <li>Added possibility to mark build on quality gate issues</li> </ul> <div class="markdown-heading" dir="auto"> <h4 class="heading-element" dir="auto" id="plugin-content-401-july-14th-2020" style="position: relative">4.0.1 July 14th, 2020<a href="#plugin-content-401-july-14th-2020" aria-label="401 july 14th 2020 permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h4> </div> <ul dir="auto"> <li>Moved documentation from wiki to github</li> </ul> <div class="markdown-heading" dir="auto"> <h4 class="heading-element" dir="auto" id="plugin-content-400-july-7th-2020" style="position: relative">4.0.0 July 7th, 2020<a href="#plugin-content-400-july-7th-2020" aria-label="400 july 7th 2020 permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h4> </div> <ul dir="auto"> <li>Pipeline support</li> <li>Use Jenkins Proxy settings for SonargraphBuild鈥檚 license handler</li> <li>Added links for Sonargraph diff reports</li> <li>Removed splitting options</li> </ul> <div class="markdown-heading" dir="auto"> <h4 class="heading-element" dir="auto" id="plugin-content-301-may-28th-2020" style="position: relative">3.0.1 May 28th, 2020<a href="#plugin-content-301-may-28th-2020" aria-label="301 may 28th 2020 permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h4> </div> <ul dir="auto"> <li>Security fix SECURITY-1775</li> </ul> <div class="markdown-heading" dir="auto"> <h4 class="heading-element" dir="auto" id="plugin-content-300-march-31th-2020" style="position: relative">3.0.0 March 31th, 2020<a href="#plugin-content-300-march-31th-2020" aria-label="300 march 31th 2020 permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h4> </div> <ul dir="auto"> <li>Sonargraph baseline report support</li> <li>Java 11 support</li> </ul> <div class="markdown-heading" dir="auto"> <h4 class="heading-element" dir="auto" id="plugin-content-222-september-5th-2019" style="position: relative">2.2.2 September 5th, 2019<a href="#plugin-content-222-september-5th-2019" aria-label="222 september 5th 2019 permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h4> </div> <ul dir="auto"> <li>Fixed misleading message regarding Cycle Groups</li> <li>Fixed link "Show most recent Sonargraph Report"</li> <li>Show basic progress info for SonargraphBuild 9.12.0</li> </ul> <div class="markdown-heading" dir="auto"> <h4 class="heading-element" dir="auto" id="plugin-content-220-december-19th-2018" style="position: relative">2.2.0 December 19th, 2018<a href="#plugin-content-220-december-19th-2018" aria-label="220 december 19th 2018 permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h4> </div> <ul dir="auto"> <li>Support for Sonargraph Python systems</li> <li>No metadata file needed anymore to get dynamic metrics created by automated Sonargraph scripts</li> <li>Select charts by language</li> <li>Requires SonargraphBuild 9.9.2</li> </ul> <div class="markdown-heading" dir="auto"> <h4 class="heading-element" dir="auto" id="plugin-content-212-october-24th-2017" style="position: relative">2.1.2 October 24th, 2017<a href="#plugin-content-212-october-24th-2017" aria-label="212 october 24th 2017 permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h4> </div> <ul dir="auto"> <li>Fixed problem on Jenkins/Java/SonargraphBuild installation directories containing blanks</li> </ul> <div class="markdown-heading" dir="auto"> <h4 class="heading-element" dir="auto" id="plugin-content-211-october-2nd-2017" style="position: relative">2.1.1 October 2nd, 2017<a href="#plugin-content-211-october-2nd-2017" aria-label="211 october 2nd 2017 permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h4> </div> <ul dir="auto"> <li>Requires SonargraphBuild 9.4.6</li> </ul> <div class="markdown-heading" dir="auto"> <h4 class="heading-element" dir="auto" id="plugin-content-210-july-7th-2017" style="position: relative">2.1.0 July 7th, 2017<a href="#plugin-content-210-july-7th-2017" aria-label="210 july 7th 2017 permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h4> </div> <ul dir="auto"> <li>Requires SonargraphBuild 9.4.3</li> </ul> <div class="markdown-heading" dir="auto"> <h4 class="heading-element" dir="auto" id="plugin-content-202-march-1st-2017" style="position: relative">2.0.2 March 1st, 2017<a href="#plugin-content-202-march-1st-2017" aria-label="202 march 1st 2017 permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h4> </div> <ul dir="auto"> <li>Fixed Sonargraph Charts on slave</li> </ul> <div class="markdown-heading" dir="auto"> <h4 class="heading-element" dir="auto" id="plugin-content-201-february-15th-2017" style="position: relative">2.0.1 February 15th, 2017<a href="#plugin-content-201-february-15th-2017" aria-label="201 february 15th 2017 permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h4> </div> <ul dir="auto"> <li>Support for Sonargraph License Server</li> <li>Support for splitting of large Sonargraph Reports</li> </ul> <div class="markdown-heading" dir="auto"> <h4 class="heading-element" dir="auto" id="plugin-content-200-december-23rd-2016" style="position: relative">2.0.0 December 23rd, 2016<a href="#plugin-content-200-december-23rd-2016" aria-label="200 december 23rd 2016 permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h4> </div> <ul dir="auto"> <li>Support for new Sonargraph Report format</li> <li>Requires SonargraphBuild 9.1.1</li> </ul> <div class="markdown-heading" dir="auto"> <h4 class="heading-element" dir="auto" id="plugin-content-114-august-25th-2016" style="position: relative">1.1.4 August 25th, 2016<a href="#plugin-content-114-august-25th-2016" aria-label="114 august 25th 2016 permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h4> </div> <ul dir="auto"> <li>Fixed "Pre-Generated" on slave</li> <li>Fixed "Generate with Sonargraph Build" on slave</li> <li>Fixed report history for "Pre-Generated" when report name was changed from default</li> </ul> <div class="markdown-heading" dir="auto"> <h4 class="heading-element" dir="auto" id="plugin-content-105-july-28th-2016" style="position: relative">1.0.5 July 28th, 2016<a href="#plugin-content-105-july-28th-2016" aria-label="105 july 28th 2016 permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h4> </div> <ul dir="auto"> <li>Added configuration parameter "logLevel" (ironiusn)</li> <li>Set build result "failed" instead of "aborted" if report is missing (patrickschlebusch)</li> <li>Added configuration parameter "logFile"</li> <li>Updated default meta data file</li> <li>Read changed meta data file immediately</li> </ul> <div class="markdown-heading" dir="auto"> <h2 class="heading-element" dir="auto" id="plugin-content-compatibility-matrix" style="position: relative">Compatibility Matrix<a href="#plugin-content-compatibility-matrix" aria-label="compatibility matrix permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h2> </div> <p dir="auto">Plugin version 5.0.0: Compatible with SonargraphBuild >= 10.4.0 and Jenkins >= 2.222.4</p> <p dir="auto">Plugin version 4.0.0: Compatible with SonargraphBuild >= 9.9.2 and Jenkins >= 2.222.3</p> <p dir="auto">Plugin version 3.0.0: Compatible with SonargraphBuild >= 9.9.2 and Jenkins >= 2.164.3</p> <p dir="auto">Plugin version 2.2.0: Compatible with SonargraphBuild >= 9.9.2 and Jenkins >= 2.138.2</p> <p dir="auto">Plugin version 2.1.1: Compatible with SonargraphBuild >= 9.4.6 and Jenkins >= 1.609.3</p> <p dir="auto">Plugin version 2.1.0: Compatible with SonargraphBuild >= 9.4.3 and Jenkins >= 1.609.3</p> <p dir="auto">Plugin version 2.0.0: Compatible with SonargraphBuild 9.1.1 - 9.4.2 and Jenkins >= 1.609.3</p> <p dir="auto">Plugin version 1.1.4: Compatible with SonargraphBuild 8.x - 9.1.0 and Jenkins >= 1.609.3</p> </article> </div></div></div></div></div><div class="col-md-3 sidebar"><h5>Version: 5.0.2</h5><div>Released: <time dateTime="2023-06-15T14:16:45.000Z" title="2023-06-15 14:16">about a year ago</time></div><div>Requires Jenkins <!-- -->2.222.4</div><div>ID: <!-- -->sonargraph-integration</div><div class="sidebarSection"><h5 title="Total: 2,713">Installed on 0.98% of聽controllers</h5><div class="chart"><div style="padding:0"><canvas role="img" height="90" width="300"></canvas></div></div><div class="label-link"><a href="https://old.stats.jenkins.io/pluginversions/sonargraph-integration.html">View detailed version information</a></div></div><div class="sidebarSection"><h5>Links</h5><div class="label-link"><a href="https://github.com/jenkinsci/sonargraph-integration-plugin">GitHub</a></div><div class="label-link"><a href="https://issues.jenkins.io/issues/?jql=resolution%20is%20EMPTY%20and%20component%3D21430">Open issues (Jira)</a></div><div class="label-link"><a href="https://www.jenkins.io/participate/report-issue/redirect/#21430">Report an issue (Jira)</a></div><div class="label-link"><a href="https://www.jenkins.io/doc/pipeline/steps/sonargraph-integration">Pipeline Step Reference</a></div><div class="label-link"><a href="https://javadoc.jenkins.io/plugin/sonargraph-integration">Javadoc</a></div></div><div class="sidebarSection"><h5>Labels</h5><div class="label-link"><a href="/ui/search/?labels=external">External Site/Tool Integrations</a></div><div class="label-link"><a href="/ui/search/?labels=post-build">Other Post-Build Actions</a></div><div class="label-link"><a href="/ui/search/?labels=report">Build Reports</a></div></div><div class="sidebarSection"><h5>Maintainers</h5><div class="maintainer"><a href="/ui/search/?query=andreashoyerh2m">Andreas Hoyer</a></div><div class="maintainer"><a href="/ui/search/?query=builderh2m">builder h2m</a></div><div class="maintainer"><a href="/ui/search/?query=a_zitzewitz">Alexander</a></div><div class="maintainer"><a href="/ui/search/?query=dietmar_menges">Dietmar Menges</a></div></div><div class="sidebarSection"><h5>Help us improve this page!</h5>To propose a change submit a pull request to <a href="https://github.com/jenkinsci/sonargraph-integration-plugin" rel="noopener noreferrer" target="_blank">the plugin page</a> on GitHub.</div><div class="sidebarSection"><div><h5>Previous Security Warnings</h5><ul class="security-warning-list"><li><h6><a href="https://jenkins.io/security/advisory/2020-07-02/#SECURITY-1775">Stored XSS vulnerability</a></h6><ul><li>Affects version 3.0.0 and earlier</li></ul></li><li><h6><a href="https://www.jenkins.io/security/advisory/2023-06-14/#SECURITY-3155">Stored XSS vulnerability</a></h6><ul><li>Affects version 5.0.1 and earlier</li></ul></li></ul></div></div></div></div></div><jio-footer githubRepo="" property="https://plugins.jenkins.io/" githubBranch="main" reportAProblemTemplate="4-bug.yml"></jio-footer></div></div><div id="gatsby-announcer" style="position:absolute;top:0;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0" aria-live="assertive" aria-atomic="true"></div></div><script> window.dev = undefined if (window.dev === true || true) { window._paq = window._paq || []; window._paq.push(['setTrackerUrl', 'https://jenkins-matomo.do.g4v.dev/matomo.php']); window._paq.push(['setSiteId', '1']); window._paq.push(['enableHeartBeatTimer']); window.start = new Date(); (function() { var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://jenkins-matomo.do.g4v.dev/matomo.js'; s.parentNode.insertBefore(g,s); })(); if (window.dev === true) { console.debug('[Matomo] Tracking initialized') console.debug('[Matomo] matomoUrl: https://jenkins-matomo.do.g4v.dev, siteId: 1') } } </script><noscript><img src="https://jenkins-matomo.do.g4v.dev/piwik.php?idsite=1&rec=1&url=https://plugins.jenkins.io//sonargraph-integration/" style="border:0" alt="tracker" /></noscript><script id="gatsby-script-loader">/*<![CDATA[*/window.pagePath="/sonargraph-integration/";/*]]>*/</script><!-- slice-start id="_gatsby-scripts-1" --> <script id="gatsby-chunk-mapping" > window.___chunkMapping="{\"app\":[\"/app-245afccca0242903c038.js\"],\"component---src-pages-404-jsx\":[\"/component---src-pages-404-jsx-7e80fca415f6414faf44.js\"],\"component---src-templates-index-jsx\":[\"/component---src-templates-index-jsx-342f05f65f1c3e80f26e.js\"],\"component---src-templates-plugin-dependencies-jsx\":[\"/component---src-templates-plugin-dependencies-jsx-abac5dd31b94bc28ec58.js\"],\"component---src-templates-plugin-documentation-jsx\":[\"/component---src-templates-plugin-documentation-jsx-6781e0b1ce28c75ec828.js\"],\"component---src-templates-plugin-health-score-jsx\":[\"/component---src-templates-plugin-health-score-jsx-e305d9d25bab38ec80fd.js\"],\"component---src-templates-plugin-issues-jsx\":[\"/component---src-templates-plugin-issues-jsx-122938860f561ab2c9a9.js\"],\"component---src-templates-plugin-releases-jsx\":[\"/component---src-templates-plugin-releases-jsx-5fadd9f681f2670d8c08.js\"],\"component---src-templates-search-jsx\":[\"/component---src-templates-search-jsx-0ddc993f23a3b6c44520.js\"],\"component---src-templates-tombstone-jsx\":[\"/component---src-templates-tombstone-jsx-da05f23b6dacb1c3b636.js\"]}"; </script> <script>window.___webpackCompilationHash="6ef083df46f4dafb5899";</script><script src="/webpack-runtime-5791b3d97ae82a0d88d9.js" async></script><script src="/framework-e547aabdcd858de1462d.js" async></script><script src="/app-245afccca0242903c038.js" async></script><!-- slice-end id="_gatsby-scripts-1" --></body></html>

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