Cutting-edge tailored Docker-based solution
 

Consultingwerk Blog

Cutting-edge tailored Docker-based solution

by Kristina Rümmler | May 29, 2023

Progress Software recently approached us for assistance with a customer request to set up an interesting development environment.

Here's what the case entailed: 

“We have many OpenEdge developers, we don’t use OpenEdge Developer Studio, the target operating system for development is Linux. We preferably do not want to install and manage OpenEdge installations on all our developers machines. Development commonly requires local database instances which need to be managed, and we prefer to not having to do that on every  developer PC individually.” 

While a compilation on Windows in TTY mode can be used, it is not 100% waterproof. Windows file names are typically case-insensitive and there could be calls to external DLLs or .NET classes in the code base. These will cause the code to fail in a Linux runtime environment. 

We have had much experience with installing OpenEdge inside a Docker container. This includes containerizing PASOE instances, databases and ABL runtimes for compilation. We use Progress-provided images when they exist, since as a Progress partner we prefer to use these images for support and convenience reasons. Where no Progress-provided image exists, we build our own.  

We created a Docker image which hosts the customers databases, this was before Progress released the Docker Database Image. 

On a build server, a Docker image was created with the relevant OpenEdge and Java versions installed. Then the required  databases was created, the schema and data imported and we created a start script, which starts the database and then tails the database log file for as long as the container lives. After exposing the database port and exposing the port range for -minport and -maxport dynamic port assignments the container worked out of the box. With each commit to the customer’s SCM, a build is triggered and a new Database Image is generated.   

The next task was the Compiler Container. This image too was based on a Linux image with an OpenEdge and Java installation. Since Ant and PCT are bundled with OpenEdge we have those tools available inside the container. An Ant script and a start script for the container was quickly written. 

The start script, starts the Ant compilation with output to the console. It compiles all sources and when the compilation is finished, the container dies. This Compiler Container connects to the Database Container for the required database connections. 

There was one more issue to tackle, the sources which must be compiled reside on the Windows machine. The source directory used in the Ant compilation script, was replaced by a Docker volume. 

With a volume, directories and files on the Docker host can be accessed. We used this to map the source directory in the container to the root of the source directory on the (Windows) Developer PC. 

In this way, the customer is able to develop on Windows, compile on Linux (inside Docker) and the .r code is available on the Windows host without installing OpenEdge. That is where our involvement in this POC ended. The customer voiced plans to build more Docker images for QA purposes. Our suggestion would be to run the application’s unit tests inside of a Docker container – this can be run from the developers’ desktops or after a build has completed. 

 

Join the revolution and streamline your development process today! Contact us to learn more about our cutting-edge tailored Docker-based solution and take your development to the next level.