{"id":9546,"date":"2017-11-07T04:26:17","date_gmt":"2017-11-07T04:26:17","guid":{"rendered":"http:\/\/abstracta.us\/blog\/?p=9546"},"modified":"2025-05-05T21:20:41","modified_gmt":"2025-05-05T21:20:41","slug":"genexus-continuous-integration-jenkins","status":"publish","type":"post","link":"https:\/\/abstracta.us\/blog\/testing-tools\/genexus-continuous-integration-jenkins\/","title":{"rendered":"GeneXus Continuous Integration with Jenkins"},"content":{"rendered":"<p><!-- Go to www.addthis.com\/dashboard to customize your tools --><\/p>\n<h1><span style=\"font-weight: 400;\">Our step by step guide for using Jenkins in a GeneXus project<\/span><\/h1>\n<p><a href=\"http:\/\/abstracta.us\/wp-content\/uploads\/2017\/11\/Screen-Shot-2017-11-06-at-7.52.51-PM-min.png\"><img decoding=\"async\" class=\"size-full wp-image-9547 aligncenter\" src=\"http:\/\/abstracta.us\/wp-content\/uploads\/2017\/11\/Screen-Shot-2017-11-06-at-7.52.51-PM-min.png\" alt=\"Screen Shot 2017-11-06 at 7.52.51 PM-min\" width=\"547\" height=\"287\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">In this post, we will guide you on how to achieve basic<\/span><b> Continuous Integration using Jenkins in a <\/b><a href=\"https:\/\/www.genexus.com?utm_source=abstractablog\" target=\"_blank\" rel=\"noopener\"><b>GeneXus<\/b><\/a><b> project.<\/b><span style=\"font-weight: 400;\"> This is a fundamental step for improving your productivity and development process (even if you are working in a Waterfall approach). By giving early feedback to developers regarding code status, every single one of them will know after committing their code if it doesn\u2019t break the \u201cconsolidated\u201d environment and also that it builds successfully outside their own environment.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Only after implementing Continuous Integration, you may be inspired to add some new automation pieces into this process to boost quality and productivity by achieving Continuous Delivery.<\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Introduction\"><\/span>Introduction<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Let\u2019s assume that your Jenkins will also be used as your \u201cBuild Server\u201d, which means that the same machine that will host your Jenkins will be responsible for:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Getting the latest version of your KB. <\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Building the KB (generation + compilation). <\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Notifying build status if it fails.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Deploying the binaries in the local application server.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">In order to integrate code, we need an <\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Software_configuration_management\">SCM<\/a><span style=\"font-weight: 400;\">. The GeneXus SCM is GXServer, so you can\u2019t achieve Continuous Integration if you don\u2019t have GXServer.<\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Prerequisites\"><\/span>Prerequisites<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">GXServer: URL and credentials (username and password)<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">A \u201cGeneXus IDE\u201d environment (Windows + SQL Server + .NET Framework) with a valid license key (for the building stage).<\/span><\/li>\n<li style=\"font-weight: 400;\"><a href=\"https:\/\/jenkins.io\/download\/thank-you-downloading-windows-installer\/\"><span style=\"font-weight: 400;\">Jenkins for Windows<\/span><\/a><span style=\"font-weight: 400;\"> installed. <\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">The software base to build your KB (e.g. JDK if your apps need Java compiler)<\/span><\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Getting_Started\"><\/span>Getting Started<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">In order to accomplish this, we will be using an example in GXServer Sandbox.<\/span><\/p>\n<p><a href=\"http:\/\/sandbox.genexusserver.com\/v15\/main.aspx\"><span style=\"font-weight: 400;\">http:\/\/sandbox.genexusserver.com\/v15\/main.aspx<\/span><\/a><\/p>\n<p><span style=\"font-weight: 400;\">We have a KB called UnitTest2 for this example.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>Step 1 <\/b><span style=\"font-weight: 400;\">(~30 mins)<\/span><\/p>\n<p><b>&gt; Check out your KB from GXServer and build it manually. <\/b><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">From GeneXus IDE, click File \/ New \/ KB from GXServer.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Put the Server KB URL and credentials, (you will also need this data to be set in a configuration file in step 2.4).<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Type the path where you want to save the local copy of the KB (to build).<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">After creating your KB, build all from GeneXus. This step will force you to define the Database name, Server name and credentials to create database tables, which is recommended before setting things up in Jenkins (or any CI tool). As a result of this step, you should have a built KB in your local directory (in this guide we will be using the local KB folder set on C:\\Models\\KBExample)<\/span><\/p>\n<p><span style=\"font-weight: 400;\">These steps end when GeneXus IDE shows you the <\/span><span style=\"font-weight: 400;\">\u201cBuild All Success\u201c <\/span><span style=\"font-weight: 400;\">message.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>Step 2 <\/b><span style=\"font-weight: 400;\">(~ 1 hour)<\/span><b><br \/>\n<\/b><\/p>\n<p><b>Build your KB using MSBuild tasks.<\/b><b><br \/>\n<\/b><\/p>\n<p><span style=\"font-weight: 400;\"><strong>2.1<\/strong> Check if your environment variable GX_PROGRAM_DIR is correctly set up.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">You can see if this is already set by typing in your windows console (cmd.exe)<\/span><\/p>\n<p><span style=\"font-weight: 400;\">&gt; echo %GX_PROGRAM_DIR% <\/span><\/p>\n<p><span style=\"font-weight: 400;\">The output should look something like: <\/span><span style=\"font-weight: 400;\">C:\\Program Files\\GeneXus\\GeneXus15<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If not, you need to set it up to your GeneXus installation folder.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><strong>2.2<\/strong> &#8211; Download GeneXus MSBuild tasks.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">. <\/span><a href=\"https:\/\/s3-us-west-2.amazonaws.com\/abstracta\/GeneXus+CD\/msbuild+tasks\/Artech.Samples.GXServerExtraTasks.targets\"><span style=\"font-weight: 400;\">Artech.Samples.GXServerExtraTasks.targets<\/span><\/a><\/p>\n<p><span style=\"font-weight: 400;\">. <\/span><a href=\"https:\/\/s3-us-west-2.amazonaws.com\/abstracta\/GeneXus+CD\/msbuild+tasks\/Artech.Samples.GXserverExtraTasks.dll\"><span style=\"font-weight: 400;\">Artech.Samples.GXserverExtraTasks.dll<\/span><\/a><\/p>\n<p><span style=\"font-weight: 400;\">Copy both files into your %GX_PROGRAM_DIR%<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><strong>2.3<\/strong> &#8211; Set MSbuild Path <\/span><\/p>\n<p><span style=\"font-weight: 400;\">MSbuild is the default mechanism to launch the build process in Microsoft Windows, so, for this step you need to put <\/span><span style=\"font-weight: 400;\">MSBuild.exe<\/span><span style=\"font-weight: 400;\"> path in your command line, <\/span><span style=\"font-weight: 400;\">e.g. <\/span><span style=\"font-weight: 400;\">C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If your setup is right, you can just type \u201cmsbuild\u201d (plus Enter) in Windows console and see if MSBuild command is recognized.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><strong>2.4<\/strong> &#8211; Download your build files (MSBuild scripts).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Create a new folder (e.g. c:\\msbuildtasks) and put your build scripts there (one for updating the KB from the server and another for building the KB). You can download examples from here: <\/span><\/p>\n<p><span style=\"font-weight: 400;\">. <\/span><a href=\"https:\/\/s3-us-west-2.amazonaws.com\/abstracta\/GeneXus+CD\/msbuild+tasks\/buildKB.msbuild\"><span style=\"font-weight: 400;\">buildKB.msbuild<\/span><\/a><span style=\"font-weight: 400;\"> (to build the KB)<\/span><\/p>\n<p><span style=\"font-weight: 400;\">. <\/span><a href=\"https:\/\/s3-us-west-2.amazonaws.com\/abstracta\/GeneXus+CD\/msbuild+tasks\/TeamDev.msbuild\"><span style=\"font-weight: 400;\">TeamDev.msbuild<\/span><\/a><span style=\"font-weight: 400;\"> (to update from GXServer)<\/span><\/p>\n<p><b>Edit both files with any text editor<\/b><span style=\"font-weight: 400;\"> and adjust the GeneXus installation folder path, your KB path, and GXServer URL and credentials.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Open your command line and type: <\/span><\/p>\n<p><span style=\"font-weight: 400;\">&gt; <\/span><span style=\"font-weight: 400;\">msbuild \u201cc:\\msbuildtasks\\buildKB.msbuild\u201d <\/span><\/p>\n<p><span style=\"font-weight: 400;\">You should see how your KB is building. Please note that this is the same as doing \u201cBuild All\u201d using GeneXus IDE, but from a Windows MSBuild process. \u201cTeamDev.msbuild\u201d script will be used in the next step&#8230;<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>Step 3 <\/b><span style=\"font-weight: 400;\">(~ 30 minutes)<\/span><\/p>\n<p><b>Get KB latest version from GXserver using MSBuild tasks.<\/b><\/p>\n<p><span style=\"font-weight: 400;\"><strong>3.1<\/strong> Start by downloading GXServer client (in order to connect to GXServer using MSBuild tasks). This is needed by MSBuild script to handle communication with the server. To do so, create a local directory in your machine (e.g. c:\\gxserverclient).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Download these 2 files and copy them into it:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">. <\/span><a href=\"https:\/\/s3-us-west-2.amazonaws.com\/abstracta\/GeneXus+CD\/gxserver+client\/TeamDev.exe\"><span style=\"font-weight: 400;\">TeamDev.exe<\/span><\/a><\/p>\n<p><span style=\"font-weight: 400;\">. <\/span><a href=\"https:\/\/s3-us-west-2.amazonaws.com\/abstracta\/GeneXus+CD\/gxserver+client\/TeamDev.exe.config\"><span style=\"font-weight: 400;\">TeamDev.exe.config<\/span><\/a><\/p>\n<p><span style=\"font-weight: 400;\">If you already edited your TeamDev.msbuild file in previous step (2.4) pointing to your folders, then you will be able to open your command line and type: <\/span><\/p>\n<p><span style=\"font-weight: 400;\">&gt; <\/span><span style=\"font-weight: 400;\">msbuild \u201cc:\\msbuildtasks\\TeamDev.msbuild\u201d <\/span><\/p>\n<p><span style=\"font-weight: 400;\">You should now be seeing how the KB is being updated from GXServer (if it has new changes from the last update).<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>Step 4 <\/b><span style=\"font-weight: 400;\">(~ 1 hour)<\/span><\/p>\n<p><b>Integrate it in Jenkins<\/b><\/p>\n<p><span style=\"font-weight: 400;\"><strong>4.1<\/strong> First, you need to install 2 plugins in Jenkins, one for triggering MSBuild tasks (step 2 and 3), and another to see them in a \u201cpipeline\u201d style:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In Jenkins, click Manage Jenkins \/ Manage Plugins. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Look for these 2 plugins and install them:<\/span><\/p>\n<ul>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Msbuild Plugin<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Pipeline<\/span><\/li>\n<\/ul>\n<\/ul>\n<p><span style=\"font-weight: 400;\"><strong>4.2<\/strong> Then, you will need to create 2 Jobs: <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Job #1:\u00a0UPDATE KB:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Click on \u201cNew Item\u201d select \u201cFreestyle project\u201d and set the job\u2019s name (something like <\/span><b>\u201cUpdate from GXServer\u201d)<\/b><span style=\"font-weight: 400;\">. Click Ok. Then navigate to \u201cBuild\u201d section and \u201cAdd build step\u201d by choosing the \u201cBuild a Visual Studio project or solution using MSBuild\u201d.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Over the text field \u201cMSbuild Build File\u201d just put your script (c:\\msbuildtasks\\TeamDev.msbuild).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Job #2:\u00a0BUILD KB:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The other job is for building, so again:<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">Click on \u201cNew Item\u201d select \u201cFreestyle project\u201d and put an item name like <\/span><b>\u201cBuild KB\u201d<\/b><span style=\"font-weight: 400;\">. Click Ok. Then navigate to the \u201cBuild\u201d section and \u201cAdd build step\u201d by choosing the \u201cBuild a Visual Studio project or solution using MSBuild\u201d.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Over the text field \u201cMSbuild Build File\u201d just put your script (c:\\msbuildtasks\\buildKB.msbuild)<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Finally, on the \u201cPost-build Actions\u201d section, add a \u201cBuild other projects\u201d action to automatically trigger the build after the update from GXServer (Continuous Integration). <\/span><\/p>\n<p><span style=\"font-weight: 400;\">This can be achieved by typing the name of your first task (job name \u201cUpdate from GXServer\u201d).<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><strong>4.3<\/strong> Create the pipeline<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Now, you can create the pipeline. On your Jenkins dashboard, click the (+) icon, and add a \u201cBuild Pipeline View\u201d and select a name for your pipeline (e.g. \u201cdemo KB\u201d).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In the \u201cSelect Initial Job\u201d field, choose the first one to run: \u201cUpdate from GXSever\u201d job.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Your pipeline should look like:<\/span><\/p>\n<p><a href=\"http:\/\/abstracta.us\/wp-content\/uploads\/2017\/11\/Screen-Shot-2017-11-06-at-8.07.58-PM-min.png\"><img decoding=\"async\" class=\"size-full wp-image-9548 aligncenter\" src=\"http:\/\/abstracta.us\/wp-content\/uploads\/2017\/11\/Screen-Shot-2017-11-06-at-8.07.58-PM-min.png\" alt=\"Screen Shot 2017-11-06 at 8.07.58 PM-min\" width=\"625\" height=\"415\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">You can now simply run the pipeline in Jenkins and see the output. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">If you have problems with this step, check Windows\u2019 user privileges running your Jenkins service and ensure that it has proper access to folders and executables involved so far.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">And there you have it!<\/span><\/p>\n<p><strong>If you want to set-up a different CI tool (like Bamboo, Circle CI, TeamCity, etc. ) OR, if you want to set up a more sophisticated approach (using building slaves, deploying to the cloud, etc.), just <a href=\"http:\/\/www.abstracta.us\/contact-us\">leave us a\u00a0message<\/a>!<\/strong><\/p>\n<hr \/>\n<h2><span class=\"ez-toc-section\" id=\"Recommended_for_You\"><\/span><strong>Recommended for You<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><a href=\"http:\/\/abstracta.us\/blog\/agile-testing\/not-convinced-yet-shift-left-testing\/\">Not Convinced Yet About &#8220;Shift-Left Testing&#8221;?<\/a><br \/>\n<a href=\"https:\/\/abstracta.us\/blog\/mobile-testing\/use-monkop-continuous-mobile-testing\/\">How to Use Monkop for Continuous Mobile Testing<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Our step by step guide for using Jenkins in a GeneXus project In this post, we will guide you on how to achieve basic Continuous Integration using Jenkins in a GeneXus project. This is a fundamental step for improving your productivity and development process (even&#8230;<\/p>\n","protected":false},"author":21,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[61],"tags":[546,238,223],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v14.0.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>GeneXus Continuous Integration with Jenkins | Abstracta<\/title>\n<meta name=\"description\" content=\"In this post we&#039;ll guide you on how to achieve basic Continuous Integration using Jenkins in a GeneXus project, greatly increasing development productivity.\" \/>\n<meta name=\"robots\" content=\"index, follow\" \/>\n<meta name=\"googlebot\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta name=\"bingbot\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/abstracta.us\/blog\/testing-tools\/genexus-continuous-integration-jenkins\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GeneXus Continuous Integration with Jenkins | Abstracta\" \/>\n<meta property=\"og:description\" content=\"In this post we&#039;ll guide you on how to achieve basic Continuous Integration using Jenkins in a GeneXus project, greatly increasing development productivity.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/abstracta.us\/blog\/testing-tools\/genexus-continuous-integration-jenkins\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog about AI-powered quality engineering for teams building complex software | Abstracta\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/AbstractaQA\/\" \/>\n<meta property=\"article:published_time\" content=\"2017-11-07T04:26:17+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-05-05T21:20:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/abstracta.us\/wp-content\/uploads\/2017\/11\/Continuous-Integration-in-GeneXus-min.png\" \/>\n\t<meta property=\"og:image:width\" content=\"560\" \/>\n\t<meta property=\"og:image:height\" content=\"315\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@AbstractaUS\" \/>\n<meta name=\"twitter:site\" content=\"@AbstractaUS\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/abstracta.us\/blog\/#website\",\"url\":\"https:\/\/abstracta.us\/blog\/\",\"name\":\"Blog about AI-powered quality engineering for teams building complex software | Abstracta\",\"description\":\"AI-powered quality engineering\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/abstracta.us\/blog\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/abstracta.us\/blog\/testing-tools\/genexus-continuous-integration-jenkins\/#primaryimage\",\"inLanguage\":\"en-US\",\"url\":\"http:\/\/abstracta.us\/wp-content\/uploads\/2017\/11\/Screen-Shot-2017-11-06-at-7.52.51-PM-min.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/abstracta.us\/blog\/testing-tools\/genexus-continuous-integration-jenkins\/#webpage\",\"url\":\"https:\/\/abstracta.us\/blog\/testing-tools\/genexus-continuous-integration-jenkins\/\",\"name\":\"GeneXus Continuous Integration with Jenkins | Abstracta\",\"isPartOf\":{\"@id\":\"https:\/\/abstracta.us\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/abstracta.us\/blog\/testing-tools\/genexus-continuous-integration-jenkins\/#primaryimage\"},\"datePublished\":\"2017-11-07T04:26:17+00:00\",\"dateModified\":\"2025-05-05T21:20:41+00:00\",\"author\":{\"@id\":\"https:\/\/abstracta.us\/blog\/#\/schema\/person\/38f277d59a6ebf2c9c97ba2509394c48\"},\"description\":\"In this post we'll guide you on how to achieve basic Continuous Integration using Jenkins in a GeneXus project, greatly increasing development productivity.\",\"breadcrumb\":{\"@id\":\"https:\/\/abstracta.us\/blog\/testing-tools\/genexus-continuous-integration-jenkins\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/abstracta.us\/blog\/testing-tools\/genexus-continuous-integration-jenkins\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/abstracta.us\/blog\/testing-tools\/genexus-continuous-integration-jenkins\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/abstracta.us\/blog\/\",\"url\":\"https:\/\/abstracta.us\/blog\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/abstracta.us\/blog\/testing-tools\/\",\"url\":\"https:\/\/abstracta.us\/blog\/testing-tools\/\",\"name\":\"Testing Tools\"}},{\"@type\":\"ListItem\",\"position\":3,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/abstracta.us\/blog\/testing-tools\/genexus-continuous-integration-jenkins\/\",\"url\":\"https:\/\/abstracta.us\/blog\/testing-tools\/genexus-continuous-integration-jenkins\/\",\"name\":\"GeneXus Continuous Integration with Jenkins\"}}]},{\"@type\":[\"Person\"],\"@id\":\"https:\/\/abstracta.us\/blog\/#\/schema\/person\/38f277d59a6ebf2c9c97ba2509394c48\",\"name\":\"Fabian Baptista\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/abstracta.us\/blog\/#personlogo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5bb504dcd8958f1fcf0872fb294a74f9?s=96&d=blank&r=g\",\"caption\":\"Fabian Baptista\"},\"description\":\"Co-founder, Abstracta\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"https:\/\/abstracta.us\/blog\/wp-json\/wp\/v2\/posts\/9546"}],"collection":[{"href":"https:\/\/abstracta.us\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/abstracta.us\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/abstracta.us\/blog\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/abstracta.us\/blog\/wp-json\/wp\/v2\/comments?post=9546"}],"version-history":[{"count":18,"href":"https:\/\/abstracta.us\/blog\/wp-json\/wp\/v2\/posts\/9546\/revisions"}],"predecessor-version":[{"id":16030,"href":"https:\/\/abstracta.us\/blog\/wp-json\/wp\/v2\/posts\/9546\/revisions\/16030"}],"wp:attachment":[{"href":"https:\/\/abstracta.us\/blog\/wp-json\/wp\/v2\/media?parent=9546"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/abstracta.us\/blog\/wp-json\/wp\/v2\/categories?post=9546"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/abstracta.us\/blog\/wp-json\/wp\/v2\/tags?post=9546"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}