In This LifeTime: Enterprise-Grade DevOps with OutSystems and VSTS
In the last few years, I’ve seen OutSystems help large enterprises develop their mobile and web solutions—from building public websites to the delivery of internal mobile apps.
OutSystems is a low-code platform for rapid application development (RAD) you can use to build enterprise apps. Therefore, with OutSystems, developers and IT teams can create, deploy, change, and manage custom mobile and web applications that run seamlessly on all devices.
Some Scenarios Are Totally RAD
Now, as a developer, I’ve had several healthy discussions about RAD tools, and I still prefer the option of choosing technology, languages, patterns, IDEs, and, most importantly, the DevOps cycle and its tools. However, there are multiple scenarios where RAD tools are the best choice, especially if they can deliver what they promise.
Almost every large enterprise still runs complex mission-critical applications on legacy technology, most of which have heterogeneous environments and involve multiple teams. So, with such complexity, how do these organizations inject innovation to remain competitive? This is where the speed and flexibility of OutSystems really shines, allowing organizations to complement or replace legacy applications. However, there is one challenge I have witnessed: large enterprises struggle to create a common DevOps cycle between apps that were built with OutSystems and apps that weren’t.
The DevOps Challenge
For example, there are those large projects where, in a single release, you must synchronize legacy business apps (running in your UNIX and Windows servers), REST APIs, cloud back-ends, etc., and OutSystems mobile and web applications. As a result, a great deal of time, resources and effort is necessary, luxuries most organizations can’t afford.
But, I’ve been working with the Visual Studio platform for many years and recent advances have created an interesting value proposition that can solve the synchronization challenge:
- Cross-platform IDE and code editors (did I mention that I love Visual Studio Code?).
- A full set of tools for the modern DevOps cycle: plan work, build, test, release and monitor.
- Complete support for open-source tools (for example, Jenkins or Kubernetes). If you like your tools you can integrate with Visual Studio and continue to use them.
- An extensible platform bringing the community together with an awesome marketplace.
- A cloud-based version of Visual Studio Team Services (VSTS) with updates every 3 weeks! Yes, just read about the Microsoft DevOps journey.
- An on-premises version of Team Foundation Server (TFS) with agents for Linux and Windows
And, that’s why I chose to assist with the creation of a Visual Studio extension to integrate with OutSystems.
OutSystems LifeTime Meets Visual Studio Platform with a New API-tude
I am not an OutSystems expert. Therefore, before starting on this extension, I researched their current version. The platform uses a model-driven approach to configure app layers: UI, data model, web services and APIs. But, developers can still incorporate their own custom code or libraries, and compose them as part of the model, as well as custom JavaScript (and CSS) for front-ends. Hence the term low-code.
One of the OutSystems modules is Lifetime, which manages versioning, deployments and environments. Recently, OutSystems exposed a Lifetime API (Swagger defined), that anyone can use.
So, I used this API to integrate OutSystems with VSTS/TFS and create an extension that enables enterprises to synchronize their DevOps cycles. Moreover, my extension focuses on a service endpoint in VSTS/TFS for configuring OutSystems, an OutSystems release task for tagging OutSystems apps, deploying OutSystems apps or both, and optimized release management for VSTS/TFS and OutSystems Lifetime with:
- Automatic versioning of apps
- Complete tracking for every release
- Release definition cloning for multiple environments
- Automatic release scheduling, request on demand or both
- An approval system for release execution
I used TypeScript in Visual Studio Code to build the extension, along with some ES6 improvements. Therefore, if you like Promises and Async/Await, this is a good example.
In addition, I’ve decided to make it open source and available on Github, so everyone can collaborate, send feedback or register bugs. So, here's how you can install, configure and use it.
Walking Through the VSTS Extension
For this walkthrough, I am using a VSTS subscription and OutSystems is running in my Azure subscription. Did you know that OutSystems is also available in the Azure marketplace?
Install the Extension
Installing any Visual studio extension is easy and fast. Just go to the Visual Studio marketplace and search for OutSystems integration, or try this direct link.
Then, install the extension in your VSTS subscription.

Create a Service Endpoint
To configure OutSystems in your VSTS subscription, you need a service endpoint. I created one by entering the following information for my OutSystems instance:
Name: A name for the service endpoint (for example, myOutSystems).
URL: Your OutSystems LifeTime Deployment API endpoint
StrictSSL: Restricts communication between VSTS and OutSystems to encrypted channels (SSL). Highly recommended!
ApiToken: Your OutSystems API Token. For additional information, check the OutSystems REST API Authentication documentation.

You will be able to verify your connection directly from this dialog by clicking Verify connection.
Build Release Definition Plans
After the configuration process is complete, you can start building your release definition plans, including OutSystems apps. You can use an available template that suits one of your apps, or start with an empty process.
Note: In my OutSystems instance I have three environments configured: Development, Test and Production.
I used OutSystems Service Studio, focusing on two applications: X01 Darts(web) and X0M Darts (Mobile).

Next, name your first environment and the release definition.

Then, go to your first environment and define tasks the engine will execute. Add an OutSystems Release Task. Click OK.

Finally, specify information about the release process you want OutSystems LifeTime to execute.

For example, here I’ve already specified the OutSystems connection, the application, change log source, and target environment.

A Task of the Clones
Now, you can add new OutSystems tasks to deploy additional OutSystems apps. Or, you can configure the deployment of non-OutSystems apps with all the release tasks necessary to meet your goals. Remember: cloning tasks will make your life much easier.
For example the goal here is to create the production environment and to deploy apps from the test environment to the production environment. It's easy to clone environments. Therefore, I cloned the test environment and renamed it to production.

Update Source and Target Environments
Next, go through all OutSystems release tasks and update the source and target environments:

At this point, there is an important concept to consider. When deploying apps from OutSystems test and production environments, we’re not interested in tagging the applications. Tagging is only necessary for new versions from development. Therefore, when releasing from test to production, we want to release the same version. So, to configure this, uncheck Tag and Deploy.

Create a New Release
Next, create a new release and see the execution tasks. For example, here you can see the execution of all the OutSystems release tasks, even the deployment log from OutSystems. As a result, you get logging in VSTS that enables you to check recent or past outcomes without jumping back to OutSystems LifeTime.

See Where Your Imagination Takes You
Now, imagine managing your releases of OutSystems applications together with other on-premises and cloud apps. If you need to deploy your existing classic ASP websites, WCF services, Java REST APIs, Python websites or NodeJS REST APIs, you can easily do that with VSTS. And, these apps can now be direct dependencies for any OutSystems mobile or web application. You will not have to manage different release pipelines or tools.
And, here’s a final tip. You can test builds and releases in VSTS. And, these can be added as tasks in the release definition. Imagine your tests running as part of your builds and releases, targeting OutSystems applications and non-OutSystems applications. Sweet!
Conclusion
I believe enterprises and small development teams alike can benefit from this extension. It creates a single common DevOps cycle between OutSystems Apps and non-OutSystems Apps.
Further, it increases developer productivity by accelerating the building and management of an enterprise-grade flow for multi-channel and heterogeneous development. All while reducing operational costs!
This is one of the biggest advantages of the current Visual Studio platform. You can easily integrate other tools. As a result, you improve the lives of developers and operations teams.
Looking forward, I expect OutSystems to expose more APIs to allow tracking from repositories, work planning (agile or scrum), and builds or monitoring. But don’t wait—check it out now! The current release already covers the most common scenarios. Moreover, it works in the cloud (hosted agents) and with on-premises agents (Linux or Windows).