{"id":930,"date":"2017-01-30T10:32:06","date_gmt":"2017-01-30T09:32:06","guid":{"rendered":"http:\/\/blogs.encamina.com\/por-una-nube-sostenible\/?p=930"},"modified":"2017-01-30T14:52:41","modified_gmt":"2017-01-30T13:52:41","slug":"orquestando-proyectos-vsts-slack-sonarqube","status":"publish","type":"post","link":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/orquestando-proyectos-vsts-slack-sonarqube\/","title":{"rendered":"Orquestando proyectos: VSTS, Slack, SonarQube"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-932\" src=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/header_compare@2x-2-1024x535-1024x535.png\" alt=\"header_compare@2x-2-1024x535\" width=\"1024\" height=\"535\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/header_compare@2x-2-1024x535.png 1024w, https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/header_compare@2x-2-1024x535-300x157.png 300w, https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/header_compare@2x-2-1024x535-768x401.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Cuando se est\u00e1 desarrollando una aplicaci\u00f3n, y durante todo el ciclo de vida de la misma, se plantean una serie de puntos muy importantes como son: conseguir un producto libre de errores, mediante un desarrollo r\u00e1pido y con una buena comunicaci\u00f3n interna del equipo.<\/p>\n<p>Para conseguir todo esto vamos a hablar sobre<strong> Visual Studio Team Services<\/strong>, o <strong>VSTS,<\/strong> que proporciona mecanismos para organizar proyectos, el c\u00f3digo desarrollado, automatizar compilaciones, Test y despliegues en distintos entornos, <strong>Slack<\/strong> como herramienta de comunicaci\u00f3n y <strong>SonarQube<\/strong> para asegurar que el c\u00f3digo resultante sea m\u00e1s limpio y tenga menos errores en el futuro.<!--more--><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Visual_Studio_Team_Services\"><\/span><strong>Visual Studio Team Services<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Comenzamos repasando <strong>Visual Studio Team Services<\/strong> (a partir de ahora \u00a0VSTS), la herramienta por excelencia de Microsoft para gestiona todas las fases del ciclo de vida.<\/p>\n<p>Engloba varias \u00absubproductos\u00bb. Uno de ellos es la <strong>gesti\u00f3n de c\u00f3digo fuente<\/strong>, permitiendo trabajar varias personas en el mismo proyecto sin problemas y facilitando la clara separaci\u00f3n de c\u00f3digo desplegado en distintos entornos, gracias a la funcionalidad de las ramas y de combinar el c\u00f3digo entre ellas.<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large\" src=\"https:\/\/2innovacion.files.wordpress.com\/2016\/12\/visual-studio-team-services-extensions-by-taavi-kosaar-melborp-3-638.jpg\" alt=\"\" width=\"638\" height=\"359\" \/><\/p>\n<p><strong>VSTS<\/strong> tambi\u00e9n permite plasmar<strong> las tareas<\/strong>, en agrupaciones por \u00e1reas e interaciones, y <strong>casos de usuario<\/strong>, que se deber\u00e1n completar para llevar a cabo un proyecto, pudiendo describirlas, fijarles una prioridad y esfuerzo, asignarlas a usuarios que podr\u00e1n cambiarlas de estado durante el progreso de la tarea, y siempre guardando un hist\u00f3rico de todos cambios sufridos.<\/p>\n<p>Otra ventaja de describir estas tareas y bugs es la de poder asociar conjuntos de cambios del c\u00f3digo a \u00e9stos.<\/p>\n<p>Otro de los grandes beneficios que ofrece VSTS, son las <strong>definiciones de compilaci\u00f3n<\/strong>, o \u201c<strong>Build definitions<\/strong>\u201d. Atras quedaron aquellos tiempos de las Build XAML donde a\u00f1adir una modificaci\u00f3n era una tarea muy compleja y dificil.<\/p>\n<p>Ahora las \u00a0definiciones de compilaci\u00f3n permiten realizar una serie de acciones secuenciales, pudiendo tener en cuenta o no el estado resultante de la tarea anterior, y configurarlas con disparadores\/triggers en funci\u00f3n de eventos sobre el proyecto o en base a una programaci\u00f3n establecida. Con estas definiciones se podr\u00eda conseguir, por ejemplo, que con cada conjunto de cambios subido al repositorio se comprobara que el c\u00f3digo compila sin errores y que pase los test desarrollados, que todas las noches se vuelva a comprobar la integridad de los\u00a0desarrollos y que se desplieguen en un entorno de integraci\u00f3n, o que cuando se suban cambios en una determinada rama se despliegue esa actualizaci\u00f3n en un determinado entorno.<\/p>\n<p>Para trabajar con las definiciones de compilaci\u00f3n se hace desde la pesta\u00f1a Build &amp; Release, donde se almacenan todas las definiciones creadas y se pueden configurar agregando, o quitando, tareas desde el conjunto de disponibles:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-large\" src=\"https:\/\/cake-build.gallerycdn.vsassets.io\/extensions\/cake-build\/cake\/0.2.4\/1474455228429\/Images\/addtasks.png\" alt=\"task\" width=\"651\" height=\"599\" \/><\/p>\n<p>Entre las <strong>acciones disponibles<\/strong> se pueden encontrar de distintos tipos: compilaci\u00f3n, test, utilidades, generaci\u00f3n de paquetes y despliegues. Dentro de estas categor\u00edas se encuentran adem\u00e1s interacciones con otros sistemas como puede ser Azure, NuGet, Sonar, \u2026 o ejecutar acciones npm, Grunt, Gulp, \u2026 Este listado de tareas es extensible en el Marketplace de VSTS.<br \/>\nUna caracter\u00edstica de VSTS que ayuda a conocer el estado de las definiciones de compilaci\u00f3n y de mucho m\u00e1s, son las <strong>notificaciones configurables<\/strong>. \u00c9stas permiten conocer desde cu\u00e1ndo se ha creado, editado o borrado un elemento hasta crear avisos a partir de subidas de conjuntos de cambios de c\u00f3digo o ejecuciones de definiciones de compilaci\u00f3n.<\/p>\n<p>Esta configuraci\u00f3n se realiza desde la opci\u00f3n <strong>Notificaciones del men\u00fa de usuario<\/strong>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-936\" src=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/profile.jpg\" alt=\"profile\" width=\"274\" height=\"277\" \/><\/p>\n<p>A continuaci\u00f3n, se pueden crear y configurar las notificaciones necesarias:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-940\" src=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/4.jpg\" alt=\"4\" width=\"561\" height=\"202\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/4.jpg 561w, https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/4-300x108.jpg 300w\" sizes=\"auto, (max-width: 561px) 100vw, 561px\" \/><\/p>\n<p>Por ejemplo, se puede configurar que se env\u00ede una notificaci\u00f3n cuando una definici\u00f3n de compilaci\u00f3n lanzada por m\u00ed en un determinado proyecto termine:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-938\" src=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/2.jpg\" alt=\"2\" width=\"558\" height=\"364\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/2.jpg 558w, https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/2-300x196.jpg 300w\" sizes=\"auto, (max-width: 558px) 100vw, 558px\" \/><\/p>\n<p>Otra caracter\u00edstica de VSTS que permite tener un gran control de los despliegues de las actualizaciones entre los distintos entornos es la Gesti\u00f3n de despliegues, o <strong>Release Management.<\/strong><\/p>\n<p>Esta funcionalidad permite, a partir de la definici\u00f3n de los entornos, aplicar a cada uno de ellos unos pasos como, por ejemplo, despliegues en aplicaciones web de Azure, ejecuci\u00f3n de Test predefinidos, lanzar pruebas de rendimiento, gestionar los Slot de las aplicaciones web de Azure, etc. La Gesti\u00f3n de despliegues se encuentra en la secci\u00f3n Releases dentro del men\u00fa Build &amp; Release:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-939\" src=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/3.jpg\" alt=\"3\" width=\"567\" height=\"174\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/3.jpg 567w, https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/3-300x92.jpg 300w\" sizes=\"auto, (max-width: 567px) 100vw, 567px\" \/><\/p>\n<p>Inicialmente se muestra un resumen de los despliegues en curso o finalizados, y tambi\u00e9n se puede acceder a la edici\u00f3n de la definici\u00f3n:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-941\" src=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/6.jpg\" alt=\"6\" width=\"576\" height=\"248\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/6.jpg 576w, https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/6-300x129.jpg 300w\" sizes=\"auto, (max-width: 576px) 100vw, 576px\" \/><\/p>\n<p>Las acciones que se pueden agregar son las que existen en las definiciones de compilaci\u00f3n vistas anteriormente. Esos despliegues por entorno se ejecutar\u00e1n en funci\u00f3n de unos disparadores, o Triggers, en funci\u00f3n de subidas de conjuntos de cambios, planificados en el tiempo o en base al estado de finalizaci\u00f3n de otra definici\u00f3n de despliegue:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-942\" src=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/7.jpg\" alt=\"7\" width=\"564\" height=\"375\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/7.jpg 564w, https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/7-300x199.jpg 300w\" sizes=\"auto, (max-width: 564px) 100vw, 564px\" \/><\/p>\n<p>Adicionalmente, por cada entorno, se pueden definir una serie de pol\u00edticas de retenci\u00f3n sobre los entornos:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-943\" src=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/8.jpg\" alt=\"8\" width=\"462\" height=\"264\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/8.jpg 462w, https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/8-300x171.jpg 300w\" sizes=\"auto, (max-width: 462px) 100vw, 462px\" \/><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Slack\"><\/span><strong>Slack<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>&nbsp;<\/p>\n<p><strong>Slack<\/strong> es una herramienta muy sencilla, pero a la vez potente, para <strong>crear un canal de comunicaci\u00f3n<\/strong> <strong>entre los integrantes de un proyecto,<\/strong> permitiendo compartir comentarios, im\u00e1genes, ficheros, etc.<\/p>\n<p><strong><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large\" src=\"https:\/\/forger.typo3.org\/images\/slack.svg\" alt=\"\" width=\"500\" height=\"200\" \/><\/strong><\/p>\n<p><strong>Otra de las fortalezas de Slack es su facilidad para integrarse con otros sistemas<\/strong>, incluyendo VSTS. Con un par de sencillos pasos se puede configurar Slack para que muestre los resultados de compilaciones, u otros eventos de VSTS, conect\u00e1ndose mediante Webhooks. Tanto el tipo de evento a registrar como la personalizaci\u00f3n de la imagen y nombre que se quiere ver en el canal es posible.<br \/>\nPara agregar una integraci\u00f3n a cualquier canal de Slack habr\u00e1 que acceder a la direcci\u00f3n https:\/\/mycompany.slack.com\/apps y configurarlo desde ese mismo punto:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-946\" src=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/10.jpg\" alt=\"10\" width=\"548\" height=\"336\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/10.jpg 548w, https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/10-300x184.jpg 300w\" sizes=\"auto, (max-width: 548px) 100vw, 548px\" \/><\/p>\n<p>Como resultado obtendremos mensajes del siguiente tipo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-947\" src=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/11.jpg\" alt=\"11\" width=\"441\" height=\"258\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/11.jpg 441w, https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/11-300x176.jpg 300w\" sizes=\"auto, (max-width: 441px) 100vw, 441px\" \/><\/p>\n<p>Donde la integraci\u00f3n con VSTS es m\u00e1xima al obtener tambi\u00e9n enlaces a las definiciones de compilaci\u00f3n lanzadas, y a sus resultados. Un aspecto a tener en cuenta es que a la hora del d\u00eda a d\u00eda, el exceso de informaci\u00f3n puede ocasionar el efecto contrario al que buscamos y es que en lugar de utilizar la herramienta, esta se abandone por exceso de informaci\u00f3n o bien porque las notificaciones de VSTS se mezclen con las conversaciones de los integrantes. Una de las opciones, es crear un canal de Slack solamente para estas notificaciones y otro canal para las conversaciones del equipo.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"SonarQube\"><\/span><strong>SonarQube <\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>SonarQube<\/strong> permite <strong>mantener una alta calidad del c\u00f3digo desarrollado<\/strong>, integr\u00e1ndose f\u00e1cilmente con VSTS analiza el c\u00f3digo en busca de vulnerabilidades, errores, Code Smells, etc.<\/p>\n<p>Entre las <strong>caracter\u00edsticas del producto<\/strong> se encuentra el ayudar a escribir un c\u00f3digo m\u00e1s limpio, detectar errores, o posibles puntos de error, que no se consiguen encontrar en la fase de compilaci\u00f3n, es capaz de analizar m\u00e1s de 20 lenguajes distintos de programaci\u00f3n (C#, JS, Java, C++, Python, \u2026), muy f\u00e1cil de integrar durante la Integraci\u00f3n Continua mediante el uso de Webhooks o su API REST, y provee de un \u00fanico punto de acceso a los resultados en un panel donde poder navegar a trav\u00e9s de distintos gr\u00e1ficos por la salud del c\u00f3digo.<\/p>\n<p>La integraci\u00f3n de SonarQube con VSTS es tan sencillo como agregar pasos a las definiciones de compilaci\u00f3n:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-950\" src=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/20.jpg\" alt=\"20\" width=\"503\" height=\"503\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/20.jpg 503w, https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/20-150x150.jpg 150w, https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/20-300x300.jpg 300w\" sizes=\"auto, (max-width: 503px) 100vw, 503px\" \/><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Conclusion\"><\/span><strong>Conclusi\u00f3n<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Hoy en d\u00eda donde cada vez m\u00e1s la competencia es m\u00e1s alta, y los equipos de desarrollo pueden tender a estar separados geogr\u00e1ficamente, se necesitan de mecanismos para mejorar la velocidad de desarrollo, construyendo de manera m\u00e1s libre de errores y hacer la comunicaci\u00f3n interna del equipo m\u00e1s fluida y directa.<br \/>\n<strong>VSTS<\/strong> ayuda a la o<strong>rganizaci\u00f3n de los proyectos<\/strong>, asegura o<strong>btener c\u00f3digo limpio<\/strong> de errores en fase de compilaci\u00f3n y gestiona tambi\u00e9n <strong>despliegues entre entornos.<\/strong><\/p>\n<p>Con <strong>Slack<\/strong> se consigue una <strong>comunicaci\u00f3n r\u00e1pida<\/strong> entre los integrantes del equipo y con <strong>SonarQube<\/strong> es posible detectar puntos que en tiempo de ejecuci\u00f3n producir\u00e1n errores o bajadas de rendimiento.<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content --><div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 ez-toc-wrap-center counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Tabla de contenidos<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 eztoc-toggle-hide-by-default' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/orquestando-proyectos-vsts-slack-sonarqube\/#Visual_Studio_Team_Services\" >Visual Studio Team Services<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/orquestando-proyectos-vsts-slack-sonarqube\/#Slack\" >Slack<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/orquestando-proyectos-vsts-slack-sonarqube\/#SonarQube\" >SonarQube<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/orquestando-proyectos-vsts-slack-sonarqube\/#Conclusion\" >Conclusi\u00f3n<\/a><\/li><\/ul><\/nav><\/div>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Cuando se est\u00e1 desarrollando una aplicaci\u00f3n, y durante todo el ciclo de vida de la misma, se plantean una serie de puntos muy importantes como son: conseguir un producto libre de errores, mediante un desarrollo r\u00e1pido y con una &hellip; <a href=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/orquestando-proyectos-vsts-slack-sonarqube\/\">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":161,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27],"tags":[38,39,40],"class_list":["post-930","post","type-post","status-publish","format-standard","hentry","category-cloud","tag-alm","tag-slack","tag-vsts"],"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>Orquestando proyectos: VSTS, Slack, SonarQube - Por una nube sostenible<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/orquestando-proyectos-vsts-slack-sonarqube\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Orquestando proyectos: VSTS, Slack, SonarQube\" \/>\n<meta property=\"og:description\" content=\"&nbsp; Cuando se est\u00e1 desarrollando una aplicaci\u00f3n, y durante todo el ciclo de vida de la misma, se plantean una serie de puntos muy importantes como son: conseguir un producto libre de errores, mediante un desarrollo r\u00e1pido y con una &hellip; Continue reading &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/orquestando-proyectos-vsts-slack-sonarqube\/\" \/>\n<meta property=\"og:site_name\" content=\"Por una nube sostenible\" \/>\n<meta property=\"article:published_time\" content=\"2017-01-30T09:32:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-01-30T13:52:41+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/header_compare@2x-2-1024x535-1024x535.png\" \/>\n<meta name=\"author\" content=\"Carlos L\u00f3pez\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Carlos L\u00f3pez\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/orquestando-proyectos-vsts-slack-sonarqube\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/orquestando-proyectos-vsts-slack-sonarqube\\\/\"},\"author\":{\"name\":\"Carlos L\u00f3pez\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/#\\\/schema\\\/person\\\/3556bfd27991d610d49204e6c61fcda9\"},\"headline\":\"Orquestando proyectos: VSTS, Slack, SonarQube\",\"datePublished\":\"2017-01-30T09:32:06+00:00\",\"dateModified\":\"2017-01-30T13:52:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/orquestando-proyectos-vsts-slack-sonarqube\\\/\"},\"wordCount\":1357,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/orquestando-proyectos-vsts-slack-sonarqube\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/wp-content\\\/uploads\\\/sites\\\/19\\\/2017\\\/01\\\/header_compare@2x-2-1024x535-1024x535.png\",\"keywords\":[\"alm\",\"slack\",\"vsts\"],\"articleSection\":[\"Cloud\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/orquestando-proyectos-vsts-slack-sonarqube\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/orquestando-proyectos-vsts-slack-sonarqube\\\/\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/orquestando-proyectos-vsts-slack-sonarqube\\\/\",\"name\":\"Orquestando proyectos: VSTS, Slack, SonarQube - Por una nube sostenible\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/orquestando-proyectos-vsts-slack-sonarqube\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/orquestando-proyectos-vsts-slack-sonarqube\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/wp-content\\\/uploads\\\/sites\\\/19\\\/2017\\\/01\\\/header_compare@2x-2-1024x535-1024x535.png\",\"datePublished\":\"2017-01-30T09:32:06+00:00\",\"dateModified\":\"2017-01-30T13:52:41+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/#\\\/schema\\\/person\\\/3556bfd27991d610d49204e6c61fcda9\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/orquestando-proyectos-vsts-slack-sonarqube\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/orquestando-proyectos-vsts-slack-sonarqube\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/orquestando-proyectos-vsts-slack-sonarqube\\\/#primaryimage\",\"url\":\"http:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/wp-content\\\/uploads\\\/sites\\\/19\\\/2017\\\/01\\\/header_compare@2x-2-1024x535-1024x535.png\",\"contentUrl\":\"http:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/wp-content\\\/uploads\\\/sites\\\/19\\\/2017\\\/01\\\/header_compare@2x-2-1024x535-1024x535.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/orquestando-proyectos-vsts-slack-sonarqube\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Orquestando proyectos: VSTS, Slack, SonarQube\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/#website\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/\",\"name\":\"Por una nube sostenible\",\"description\":\"C\u00f3mo no romper los l\u00edmites, c\u00f3mo crear una buena arquitectura y c\u00f3mo hacer un buen mantenimiento\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/#\\\/schema\\\/person\\\/3556bfd27991d610d49204e6c61fcda9\",\"name\":\"Carlos L\u00f3pez\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c5371ce885c5396fa6b4a2af46072081b9dc522cbba0d7eab667f442c322df27?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c5371ce885c5396fa6b4a2af46072081b9dc522cbba0d7eab667f442c322df27?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c5371ce885c5396fa6b4a2af46072081b9dc522cbba0d7eab667f442c322df27?s=96&d=mm&r=g\",\"caption\":\"Carlos L\u00f3pez\"},\"description\":\"Soy Ingeniero en Inform\u00e1tica por la Universidad Polit\u00e9cnica de Valencia. MCSD en SharePoint Applications, Web Applications y App Builder, adem\u00e1s de MCSA en Web Applications. Llevo desarrollando con tecnolog\u00edas Microsoft m\u00e1s de 6 a\u00f1os, especialmente sobre entornos web y sobre la plataforma SharePoint, y soy colaborador del Framework Enmarcha en sus distintas modalidades. Actualmente soy Team Leader en ENCAMINA.\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/author\\\/clopez\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Orquestando proyectos: VSTS, Slack, SonarQube - Por una nube sostenible","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":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/orquestando-proyectos-vsts-slack-sonarqube\/","og_locale":"es_ES","og_type":"article","og_title":"Orquestando proyectos: VSTS, Slack, SonarQube","og_description":"&nbsp; Cuando se est\u00e1 desarrollando una aplicaci\u00f3n, y durante todo el ciclo de vida de la misma, se plantean una serie de puntos muy importantes como son: conseguir un producto libre de errores, mediante un desarrollo r\u00e1pido y con una &hellip; Continue reading &rarr;","og_url":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/orquestando-proyectos-vsts-slack-sonarqube\/","og_site_name":"Por una nube sostenible","article_published_time":"2017-01-30T09:32:06+00:00","article_modified_time":"2017-01-30T13:52:41+00:00","og_image":[{"url":"http:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/header_compare@2x-2-1024x535-1024x535.png","type":"","width":"","height":""}],"author":"Carlos L\u00f3pez","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Carlos L\u00f3pez","Tiempo de lectura":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/orquestando-proyectos-vsts-slack-sonarqube\/#article","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/orquestando-proyectos-vsts-slack-sonarqube\/"},"author":{"name":"Carlos L\u00f3pez","@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/#\/schema\/person\/3556bfd27991d610d49204e6c61fcda9"},"headline":"Orquestando proyectos: VSTS, Slack, SonarQube","datePublished":"2017-01-30T09:32:06+00:00","dateModified":"2017-01-30T13:52:41+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/orquestando-proyectos-vsts-slack-sonarqube\/"},"wordCount":1357,"commentCount":0,"image":{"@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/orquestando-proyectos-vsts-slack-sonarqube\/#primaryimage"},"thumbnailUrl":"http:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/header_compare@2x-2-1024x535-1024x535.png","keywords":["alm","slack","vsts"],"articleSection":["Cloud"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/orquestando-proyectos-vsts-slack-sonarqube\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/orquestando-proyectos-vsts-slack-sonarqube\/","url":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/orquestando-proyectos-vsts-slack-sonarqube\/","name":"Orquestando proyectos: VSTS, Slack, SonarQube - Por una nube sostenible","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/orquestando-proyectos-vsts-slack-sonarqube\/#primaryimage"},"image":{"@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/orquestando-proyectos-vsts-slack-sonarqube\/#primaryimage"},"thumbnailUrl":"http:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/header_compare@2x-2-1024x535-1024x535.png","datePublished":"2017-01-30T09:32:06+00:00","dateModified":"2017-01-30T13:52:41+00:00","author":{"@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/#\/schema\/person\/3556bfd27991d610d49204e6c61fcda9"},"breadcrumb":{"@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/orquestando-proyectos-vsts-slack-sonarqube\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/orquestando-proyectos-vsts-slack-sonarqube\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/orquestando-proyectos-vsts-slack-sonarqube\/#primaryimage","url":"http:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/header_compare@2x-2-1024x535-1024x535.png","contentUrl":"http:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2017\/01\/header_compare@2x-2-1024x535-1024x535.png"},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/orquestando-proyectos-vsts-slack-sonarqube\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/"},{"@type":"ListItem","position":2,"name":"Orquestando proyectos: VSTS, Slack, SonarQube"}]},{"@type":"WebSite","@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/#website","url":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/","name":"Por una nube sostenible","description":"C\u00f3mo no romper los l\u00edmites, c\u00f3mo crear una buena arquitectura y c\u00f3mo hacer un buen mantenimiento","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/#\/schema\/person\/3556bfd27991d610d49204e6c61fcda9","name":"Carlos L\u00f3pez","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/c5371ce885c5396fa6b4a2af46072081b9dc522cbba0d7eab667f442c322df27?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c5371ce885c5396fa6b4a2af46072081b9dc522cbba0d7eab667f442c322df27?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c5371ce885c5396fa6b4a2af46072081b9dc522cbba0d7eab667f442c322df27?s=96&d=mm&r=g","caption":"Carlos L\u00f3pez"},"description":"Soy Ingeniero en Inform\u00e1tica por la Universidad Polit\u00e9cnica de Valencia. MCSD en SharePoint Applications, Web Applications y App Builder, adem\u00e1s de MCSA en Web Applications. Llevo desarrollando con tecnolog\u00edas Microsoft m\u00e1s de 6 a\u00f1os, especialmente sobre entornos web y sobre la plataforma SharePoint, y soy colaborador del Framework Enmarcha en sus distintas modalidades. Actualmente soy Team Leader en ENCAMINA.","url":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/author\/clopez\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-json\/wp\/v2\/posts\/930","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-json\/wp\/v2\/users\/161"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-json\/wp\/v2\/comments?post=930"}],"version-history":[{"count":0,"href":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-json\/wp\/v2\/posts\/930\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-json\/wp\/v2\/media?parent=930"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-json\/wp\/v2\/categories?post=930"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-json\/wp\/v2\/tags?post=930"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}