Small CI-CD Integration and Automation Workflow that everybody could create plus Generator App Status Update
By: Toma Velev
Tags: Java, Flutter, Jenkins, Automation

Small CI-CD Integration and Automation Workflow that everybody could create plus Generator App Status Update Toma Velev Mar 3, 2020·3 min read

In this article I’m gonna describe my inner setup I’ve done. I’ve automated several tasks around — building, testing, deployment, executing repeated scheduled tasks. For this purpose I’ve used Java Programs, Tomcat and Jenkins local installation. Jenkins Jobs have a nice option to be triggered and executed by several options:

By a CRON expression — starting the Job on a timely manner — every day, every five minutes, once a week or whatever you put in the scheduling CRON expression.

Whenever I commit something to the Git repositories that have some code used in the automation setup — a job is executed after hooking into git post update script — calling a simple cURL command.

After a job is executed — other job could be triggered in a hierarchical, chained manner — with additional conditions to proceed only in certain build statuses.

Deployment tasks — The most basic Jenkins tasks that I have are — after I commit something — a build script is executed with some result — WAR file, Zip File, Jar, EXE or whatever and — a post procedure uploads the result to my server. Theoretically the result may be emailed, uploaded to some cloud storage or even an app store. Haven’t done that but it is possibility.

Clear tasks, backup jobs — I have a job that backups the databases in my site. Having a recent archive is a saver. I also have several task that clear some special tables — the build finished tables — so after I have new versions of the building tools — all the “build app from a data model” tasks are executed again.

CRON tasks — the backup task is a scheduled Job. Also the tasks that build apps from data models are executed every “some” minute — 5,15, or whatever I considered appropriate.

Update the CRON executables — The data model builders are just simple Jars. They depend on several Projects or modules so when I have changes on the dependencies, after the successful deployment several “update the Jar” tasks are triggered.

GeneratorApp – This is one of my core projects. It has the core feature — the creation of CRUD operations, data model oriented layers and user interfaces based on — my own or publicly defined data models. It has a deployment job, after the deployment Update the CRON executables and Clean Build tasks are chained and executed in a work flow.

Android GeneratorApp Builder — This is an app for creating android apps from data models. It Generates offline CRUD operations on the records with your definitions. I have an idea extending this builder to not only offline data models. Will see how it goes.

Flutter offline Web app GeneratorApp builder — Flutter is a cross platform framework that I’ve spend most of 2019 on. In year 2020 I am considering moving away from it. The advantage of fast building interfaces for all platforms — Desktop, Mobile, Web — with close to only one source code repository — is for early stage products. Whenever a project succeeds getting fame and some money — the time saving feature is cleared out and killed by the disadvantages — bigger app size, integration issues, and the fact that — there is no true escape from the native part. Whenever an app does something more that simple CRUD operations or a “Hello World” — a native package is required. All the big platforms have moved or are moving to native — Uber, even Facebook — that have their own Cross Platform Framework.

As a part of the evolution of my tool I have a next version of my Flutter online Web app builder. It is still in BETA. It creates crud operations with association of the data models around the core data model — “The User/Profile/Registration”. In my own use of it I see more and more features needed, so the end result to require less and less actual code change or update. And all the new features require custom code beyond simple CRUD operations. Will see how things will go in 2020, but I’m definitely considering all kinds of directions.