{"id":1973,"date":"2015-12-01T11:00:50","date_gmt":"2015-12-01T10:00:50","guid":{"rendered":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/?p=1973"},"modified":"2015-12-01T11:43:54","modified_gmt":"2015-12-01T10:43:54","slug":"integrando-sonar-qube-con-tfs","status":"publish","type":"post","link":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/integrando-sonar-qube-con-tfs\/","title":{"rendered":"Integrando SonarQube con TFS I"},"content":{"rendered":"<p>En este art\u00edculo vamos a ver qu\u00e9 es SonarQube, qu\u00e9 papel tiene dentro del ciclo de vida de nuestras soluciones y c\u00f3mo se integra con nuestro repositorio de c\u00f3digo fuente. En nuestro caso, con Team Foundation Server 2015 en adelante TFS.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/sonarqubehispano.org\/download\/attachments\/2752543\/SQ-logo-big.png?version=1&amp;modificationDate=1424188398000&amp;api=v2\" alt=\"\" width=\"600\" height=\"192\" \/><\/p>\n<p>En ENCAMINA lo estamos utilizando para ver cual es el progreso en nuestros desarrollos para cada d\u00eda ser mejores profesionales.<\/p>\n<p><!--more--><\/p>\n<h1>\u00bfQu\u00e9 es SonarQube?<\/h1>\n<p>SonarQube es una <strong>plataforma abierta para gestionar la calidad del c\u00f3digo<\/strong>. Como tal, cubre los 7 ejes de la calidad del c\u00f3digo:<\/p>\n<p><a href=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/12\/7axes.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1980\" src=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/12\/7axes.png\" alt=\"7axes\" width=\"320\" height=\"151\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/12\/7axes.png 320w, https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/12\/7axes-300x142.png 300w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/a><\/p>\n<p>Sonar es principalmente un <strong>portal Web que almacena todo acerca de nuestras soluciones <\/strong>y<strong>\u00a0<\/strong>nos facilita navegar con todos estos datos.<\/p>\n<p>El portal web se compone de <strong>cuadros de mando personalizables<\/strong>, hechos mediante widgets, que pueden mostrar los datos en diversas formas, con la posibilidad de comparar f\u00e1cilmente con la anterior, o ver la progresi\u00f3n a trav\u00e9s de los \u00faltimos d\u00edas o meses. Desde mi punto de vista, esta caracter\u00edstica es muy importante.<\/p>\n<p>Uno de los problemas con el que nos encontr\u00e1bamos al finalizar un proyecto era analizar la calidad del desarrollo mediante un code-review. Pero ahora podemos\u00a0indicar si es bueno o no. Pero, \u00bfc\u00f3mo podemos saber la evoluci\u00f3n? \u00bfHaciendo code-review cada semana, cada d\u00eda&#8230;? La verdad es que no es una opci\u00f3n a tener en cuenta, adem\u00e1s\u00a0ni siquiera el objetivo principal de un code-review es ese.<strong> Con Sonar podemos ver la evoluci\u00f3n entre distintos periodos y tener toda esta informaci\u00f3n<\/strong>.<\/p>\n<p>Otra de las caracter\u00edsticas es que nos <strong>indica el\u00a0incumplimiento de cualquier m\u00e9trica<\/strong> que nos marca la l\u00ednea de c\u00f3digo en la que se produce y, sobre todo, nos indica la raz\u00f3n de por la que est\u00e1 mal (con lo cual tenemos informaci\u00f3n para no volver a cometer ese error).<\/p>\n<p>Por otro lado, tambi\u00e9n se pueden <strong>definir perfiles de calidad y asignarlos a cada proyecto.<\/strong>\u00a0De esta forma podemos\u00a0valorar si el proyecto es aceptable o no. Esta definici\u00f3n de calidad se basa en el cumplimiento o incumplimiento de ciertas m\u00e9tricas, como pueden ser: % de cobertura demasiado bajo, n\u00famero de errores cr\u00edticos, deuda t\u00e9cnica, etc.<\/p>\n<h1>\u00bfPor qu\u00e9 utilizar Sonar?<\/h1>\n<p>En <a href=\"http:\/\/www.encamina.com\" target=\"_blank\">ENCAMINA<\/a>\u00a0tenemos montado un <strong>sistema de builds,<\/strong> en el\u00a0que cada vez que se sube un cambio al repositorio de c\u00f3digo fuente, <strong>analizamos si el c\u00f3digo subido tiene la calidad que consideramos \u00f3ptima<\/strong>. Para analizar nuestra calidad, utilizamos herramientas como <a href=\"https:\/\/stylecop.codeplex.com\/\" target=\"_blank\">StyleCop<\/a>, JSHint para JavaScript, TSHint para TypeScript o <a href=\"https:\/\/www.spcaf.com\/\" target=\"_blank\">SPCAF\u00a0<\/a>\u00a0para desarrollos en SharePoint\/Office365.<\/p>\n<p>Esta build sale verde, amarilla o roja dependiendo del c\u00f3digo subido. En el caso de que la build sea OK, la integramos diariamente en nuestro servidor de integraci\u00f3n. Para que todo el mundo dentro de la oficina sepa como van nuestros desarrollos en curso, hemos creado una <strong>aplicaci\u00f3n Universal que tenemos alojada en una RasperryPI<\/strong> y muestra el estado de las Builds.<\/p>\n<p><a href=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/12\/WP_20151125_16_58_05_Pro.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1984\" src=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/12\/WP_20151125_16_58_05_Pro-300x169.jpg\" alt=\"WP_20151125_16_58_05_Pro\" width=\"600\" height=\"338\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/12\/WP_20151125_16_58_05_Pro-300x169.jpg 300w, https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/12\/WP_20151125_16_58_05_Pro-1024x576.jpg 1024w, https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2015\/12\/WP_20151125_16_58_05_Pro.jpg 1632w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<p>Ahora bien, todo esto est\u00e1 muy bien para nuestro d\u00eda a d\u00eda, pero&#8230; \u00bfC\u00f3mo podemos medir cuanto hemos mejorado? \u00a1Aqu\u00ed es donde entre en juego Sonar!<\/p>\n<p>El papel de Sonar es <strong>analizar todos estos datos, poder consultarlos<\/strong> y conseguir ser mejores profesionales cada d\u00eda. El papel de Sonar quedar\u00eda reflejado en el siguiente diagrama:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" src=\"http:\/\/www.vlaquest.com\/wp-content\/uploads\/image_thumb10.png\" alt=\"\" width=\"592\" height=\"334\" \/><\/p>\n<h1>Integrando Sonar con TFS<\/h1>\n<p>Para integrar Sonar con TFS, en primer lugar tendremos que <strong>tener instalado Sonar Server en una m\u00e1quina<\/strong>. Para ello, podemos descargarnos los fuentes desde la siguiente <a href=\"http:\/\/www.sonarqube.org\/downloads\/\" target=\"_blank\">url<\/a>. No hace falta una m\u00e1quina con muchos recursos, ya que se puede instalar en muchos sistemas operativos y en muchas bases de datos (Oracle, SQL Server, MySql,..). En nuestro caso, hemos optado por un <strong>servidor Windows Server 2012 R2 y una base de datos SQL Server 2012.<\/strong><\/p>\n<p><em><strong>*NOTA:<\/strong> Esta m\u00e1quina se puede instalar en el mismo servidor que en TFS (aunque no es aconsejable).<\/em><\/p>\n<p>Una vez tenemos instalado Sonar Server, el siguiente paso es <strong>instalar Sonar Scanner<\/strong>. Esta herramienta la tenemos que tener instalada dentro de nuestro servidor TFS. Cada vez que realizamos una compilaci\u00f3n, Sonar recopila toda la informaci\u00f3n que genera la Build y la env\u00eda a Sonar Server para procesarla y tener disponible toda la informaci\u00f3n sobre nuestra deuda t\u00e9cnica. Personalmente, este t\u00e9rmino no me gusta y prefiero llamarlo nuestro margen de mejora (que creo que es un t\u00e9rmino mucho m\u00e1s apropiado).<\/p>\n<p>Para realizar la comunicaci\u00f3n de Sonar Scanner, debemos a\u00f1adir dentro de nuestra build que ejecute antes de compilar el siguiente c\u00f3digo:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nMSBuild.SonarQube.Runner.exe begin \/k:&quot;sonarqube_project_key&quot; \/n:&quot;sonarqube_project_name&quot; \/v:&quot;sonarqube_project_version&quot;\r\n<\/pre>\n<p>Cuando finalice de ejecutar la build, tiene que ejecutar el siguiente c\u00f3digo:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nMSBuild.SonarQube.Runner.exe end\r\n<\/pre>\n<p>Si quieres\u00a0entrar en detalle de c\u00f3mo configurar, puedes descargarte la <a href=\"http:\/\/redirect.sonarsource.com\/doc\/sq-setup-guide-for-dotnet-users.html\" target=\"_blank\">siguiente gu\u00eda<\/a> muy detallada escrita por Visual Studio ALM Rangers.<\/p>\n<h2>Pero, \u00bflo puedo integrar con Visual Studio?<\/h2>\n<p>Toda esta informaci\u00f3n est\u00e1 muy bien, pero al final lo que los developers queremos es tener en\u00a0nuestro Visual Studio todas estas herramientas para poder solucionar\/aprender todas estas cosas en el momento que se\u00a0guarde el c\u00f3digo fuente.<\/p>\n<p>Hay herramientas como <a href=\"https:\/\/www.jetbrains.com\/resharper\/\" target=\"_blank\">ReSharper<\/a>\u00a0que son de gran ayuda. El inconveniente es que es de pago. Ahora bien Sonar para Visual Studio 2015 (aprovechando la liberaci\u00f3n de Roslyn) ha creado una extensi\u00f3n llamada <a href=\"https:\/\/visualstudiogallery.msdn.microsoft.com\/47d1049d-bb27-454e-aab8-24566c85e548\" target=\"_blank\">Sonar Lint<\/a>\u00a0que nos incorpora todos los warnings (errores dentro de nuestro IDE), con lo que es de gran utildad.<\/p>\n<h1>Resumen<\/h1>\n<p><strong>Sonar<\/strong> es una gran herramienta Open Source, f\u00e1cil e intuitiva que <strong>permite incrementar la calidad en nuestros desarrollos<\/strong> y,\u00a0sobre todo, nos proporciona ver cual es nuestra evoluci\u00f3n y cuales son nuestras carencias con la finalidad de mejorar constantemente. Este es uno de las grandes retos de todas las personas que nos dedicamos profesionalmente a la tecnolog\u00eda. Tenemos claro que debemos de mejorar d\u00eda a d\u00eda \ud83d\ude09<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content --><span class=\"et_bloom_bottom_trigger\"><\/span>","protected":false},"excerpt":{"rendered":"<p>En este art\u00edculo vamos a ver qu\u00e9 es SonarQube, qu\u00e9 papel tiene dentro del ciclo de vida de nuestras soluciones y c\u00f3mo se integra con nuestro repositorio de c\u00f3digo fuente. En nuestro caso, con Team Foundation Server 2015 en adelante &hellip; <a href=\"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/integrando-sonar-qube-con-tfs\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":8,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[164,2],"tags":[167,165,166],"class_list":["post-1973","post","type-post","status-publish","format-standard","hentry","category-alm","category-buenas-practicas","tag-ciclo-de-vida","tag-sonar-qube","tag-tfs"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v18.2.1 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Integrando SonarQube con TFS I - Desarrollando sobre SharePoint<\/title>\n<meta name=\"description\" content=\"En este articulo vamos a ver como podemos integrar una herramienta como Sonar Qube dentro de nuestros ciclo de vida del sofware\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/integrando-sonar-qube-con-tfs\/\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Integrando SonarQube con TFS I - Desarrollando sobre SharePoint\" \/>\n<meta name=\"twitter:description\" content=\"En este articulo vamos a ver como podemos integrar una herramienta como Sonar Qube dentro de nuestros ciclo de vida del sofware\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/sonarqubehispano.org\/download\/attachments\/2752543\/SQ-logo-big.png?version=1&amp;modificationDate=1424188398000&amp;api=v2\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Adri\u00e1n D\u00edaz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/integrando-sonar-qube-con-tfs\\\/#article\",\"isPartOf\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/integrando-sonar-qube-con-tfs\\\/\"},\"author\":{\"name\":\"Adri\u00e1n D\u00edaz\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"headline\":\"Integrando SonarQube con TFS I\",\"datePublished\":\"2015-12-01T10:00:50+00:00\",\"dateModified\":\"2015-12-01T10:43:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/integrando-sonar-qube-con-tfs\\\/\"},\"wordCount\":1017,\"commentCount\":1,\"image\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/integrando-sonar-qube-con-tfs\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/sonarqubehispano.org\\\/download\\\/attachments\\\/2752543\\\/SQ-logo-big.png?version=1&amp;modificationDate=1424188398000&amp;api=v2\",\"keywords\":[\"ciclo de vida\",\"sonar qube\",\"tfs\"],\"articleSection\":[\"alm\",\"buenas practicas\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/integrando-sonar-qube-con-tfs\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/integrando-sonar-qube-con-tfs\\\/\",\"url\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/integrando-sonar-qube-con-tfs\\\/\",\"name\":\"Integrando SonarQube con TFS I - Desarrollando sobre SharePoint\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/integrando-sonar-qube-con-tfs\\\/#primaryimage\"},\"image\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/integrando-sonar-qube-con-tfs\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/sonarqubehispano.org\\\/download\\\/attachments\\\/2752543\\\/SQ-logo-big.png?version=1&amp;modificationDate=1424188398000&amp;api=v2\",\"datePublished\":\"2015-12-01T10:00:50+00:00\",\"dateModified\":\"2015-12-01T10:43:54+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"description\":\"En este articulo vamos a ver como podemos integrar una herramienta como Sonar Qube dentro de nuestros ciclo de vida del sofware\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/integrando-sonar-qube-con-tfs\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/integrando-sonar-qube-con-tfs\\\/#primaryimage\",\"url\":\"https:\\\/\\\/sonarqubehispano.org\\\/download\\\/attachments\\\/2752543\\\/SQ-logo-big.png?version=1&amp;modificationDate=1424188398000&amp;api=v2\",\"contentUrl\":\"https:\\\/\\\/sonarqubehispano.org\\\/download\\\/attachments\\\/2752543\\\/SQ-logo-big.png?version=1&amp;modificationDate=1424188398000&amp;api=v2\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#website\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/\",\"name\":\"Desarrollando sobre SharePoint\",\"description\":\"Arquitectura, buenas pr\u00e1cticas y desarrollo sobre la nueva herramienta de Microsoft SharePoint 2016\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\",\"name\":\"Adri\u00e1n D\u00edaz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g\",\"caption\":\"Adri\u00e1n D\u00edaz\"},\"description\":\"Adri\u00e1n D\u00edaz es Ingeniero Inform\u00e1tico por la Universidad Polit\u00e9cnica de Valencia. Es MVP de Microsoft en la categor\u00eda Office Development desde 2014, MCPD de SharePoint 2010, Microsoft Active Profesional y Microsoft Comunity Contribuitor 2012. Cofundador del grupo de usuarios de SharePoint de Levante LevaPoint. Lleva desarrollando con tecnolog\u00edas Microsoft m\u00e1s de 10 a\u00f1os y desde hace 3 a\u00f1os est\u00e1 centrado en el desarrollo sobre SharePoint. Actualmente es Software &amp; Cloud Architect Lead en ENCAMINA.\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/author\\\/desarrollandosobresharepoint\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Integrando SonarQube con TFS I - Desarrollando sobre SharePoint","description":"En este articulo vamos a ver como podemos integrar una herramienta como Sonar Qube dentro de nuestros ciclo de vida del sofware","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/integrando-sonar-qube-con-tfs\/","twitter_card":"summary_large_image","twitter_title":"Integrando SonarQube con TFS I - Desarrollando sobre SharePoint","twitter_description":"En este articulo vamos a ver como podemos integrar una herramienta como Sonar Qube dentro de nuestros ciclo de vida del sofware","twitter_image":"https:\/\/sonarqubehispano.org\/download\/attachments\/2752543\/SQ-logo-big.png?version=1&amp;modificationDate=1424188398000&amp;api=v2","twitter_misc":{"Escrito por":"Adri\u00e1n D\u00edaz","Tiempo de lectura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/integrando-sonar-qube-con-tfs\/#article","isPartOf":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/integrando-sonar-qube-con-tfs\/"},"author":{"name":"Adri\u00e1n D\u00edaz","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"headline":"Integrando SonarQube con TFS I","datePublished":"2015-12-01T10:00:50+00:00","dateModified":"2015-12-01T10:43:54+00:00","mainEntityOfPage":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/integrando-sonar-qube-con-tfs\/"},"wordCount":1017,"commentCount":1,"image":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/integrando-sonar-qube-con-tfs\/#primaryimage"},"thumbnailUrl":"https:\/\/sonarqubehispano.org\/download\/attachments\/2752543\/SQ-logo-big.png?version=1&amp;modificationDate=1424188398000&amp;api=v2","keywords":["ciclo de vida","sonar qube","tfs"],"articleSection":["alm","buenas practicas"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/integrando-sonar-qube-con-tfs\/#respond"]}]},{"@type":"WebPage","@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/integrando-sonar-qube-con-tfs\/","url":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/integrando-sonar-qube-con-tfs\/","name":"Integrando SonarQube con TFS I - Desarrollando sobre SharePoint","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#website"},"primaryImageOfPage":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/integrando-sonar-qube-con-tfs\/#primaryimage"},"image":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/integrando-sonar-qube-con-tfs\/#primaryimage"},"thumbnailUrl":"https:\/\/sonarqubehispano.org\/download\/attachments\/2752543\/SQ-logo-big.png?version=1&amp;modificationDate=1424188398000&amp;api=v2","datePublished":"2015-12-01T10:00:50+00:00","dateModified":"2015-12-01T10:43:54+00:00","author":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"description":"En este articulo vamos a ver como podemos integrar una herramienta como Sonar Qube dentro de nuestros ciclo de vida del sofware","inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/integrando-sonar-qube-con-tfs\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/integrando-sonar-qube-con-tfs\/#primaryimage","url":"https:\/\/sonarqubehispano.org\/download\/attachments\/2752543\/SQ-logo-big.png?version=1&amp;modificationDate=1424188398000&amp;api=v2","contentUrl":"https:\/\/sonarqubehispano.org\/download\/attachments\/2752543\/SQ-logo-big.png?version=1&amp;modificationDate=1424188398000&amp;api=v2"},{"@type":"WebSite","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#website","url":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/","name":"Desarrollando sobre SharePoint","description":"Arquitectura, buenas pr\u00e1cticas y desarrollo sobre la nueva herramienta de Microsoft SharePoint 2016","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb","name":"Adri\u00e1n D\u00edaz","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g","caption":"Adri\u00e1n D\u00edaz"},"description":"Adri\u00e1n D\u00edaz es Ingeniero Inform\u00e1tico por la Universidad Polit\u00e9cnica de Valencia. Es MVP de Microsoft en la categor\u00eda Office Development desde 2014, MCPD de SharePoint 2010, Microsoft Active Profesional y Microsoft Comunity Contribuitor 2012. Cofundador del grupo de usuarios de SharePoint de Levante LevaPoint. Lleva desarrollando con tecnolog\u00edas Microsoft m\u00e1s de 10 a\u00f1os y desde hace 3 a\u00f1os est\u00e1 centrado en el desarrollo sobre SharePoint. Actualmente es Software &amp; Cloud Architect Lead en ENCAMINA.","url":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/author\/desarrollandosobresharepoint\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts\/1973","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/comments?post=1973"}],"version-history":[{"count":0,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts\/1973\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/media?parent=1973"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/categories?post=1973"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/tags?post=1973"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}