Development Cycle in the Platform (CI/CD)
We propose an agile development life cycle on a DevOps model with early, continuous, iterative and incremental value delivery (focus on delivery of Value to Client), with inspection and adaptation for the achievement of continuous improvement and quality in the process, expanding with some areas and cross blocks that have been identified as of interest for the development of solutions.
DevOps surpasses and transcends Agile by being much more complete and inclusive, being oriented to end-to-end service and to promoting a continuous flow as joint management of projects and services.
Blocks and Phases
A Global Console is proposed as a unified access point, for all roles and as a nexus for the entire framework during the entire life cycle of a solution.
Three cross-sectional blocks are proposed throughout the DevOps life cycle due to their importance and common use in the rest:
Collaborate: A set of collaborative tools that facilitate agile communication and transparency throughout the whole life cycle of solution development, and also facilitates a documentation point in all areas of the framework.
Security: Set of activities, tools, frameworks, practices and everything that is defined as necessary and essential to ensure security throughout the framework and life cycle of a solution. Converts the DevOps life cycle into DevSecOps.
Governance: Complete census or catalog of all the pieces that are part of a solution (Products/Projects, Clients, Users, Processes, Functionalities, Data, Visual Components, Services, Algorithms, Infrastructure and Systems, Tools, Frameworks, Modules and Dependencies, etc.).
Tools
Translated into tools, we have:
Global Console: Control Panel of the Platform from which you can make the development, monitoring, monitoring, ...
Collaborate:Â Jenkins (documentation), Slack (communication).
Governance:Â Control Panel, JIRA.
Code:Â Eclipse (Java), Visual Studio Code (HTML, JS), Control Panel Plataforma (Rules, Flows, APIS,...).
Build:Â Maven (Java), SonarQube, Jenkins, Docker, npm.
Test:Â JUnit (Java), Katalon (Web Layer test automation), JMeter (Test Stress and Performance).
Release:Â Jenkins, Nexus, Docker Registry.
Monitor:Â Caas Platform (Rancher and OpenShift), Prometheus, Spring Boot Admin, Platform Control Panel.
Operate:Â Caas Platform (Rancher and OpenShift).
Deploy: Ansible, Docker, Kubernetes.
CI/CD Process
The previously-described tools get together in a flow that makes up the CI/CD (Continuous Integration and Continuous Deployment) process of the platform.
The conceptual flow is summarized in:
The platform's code is in Gitlab: Git is a distributed version control system, designed for the development of large projects with a large amount of code and managed by many people. A great number of Open Source projects are migrating or have migrated to Git, because the creation of branches and their integration is more efficient and simpler than in centralized systems.
Each developer works on their own Branch. At the end of the development and test, she makes a Merge Request to the Development or Bug Resolution branch of the corresponding version.
Every night (and also on request), a Jenkins Pipeline is launched. It:
Downloads the sources of the specific branch of Gitlab,
Compiles the sources and passes the unit tests with Maven,
Passes the quality tests with Sonar,
Uploads the artifacts generated in a Nexus and
Generates the Docker images and stores them in the Docker Registry.
After finishing this pipeline, another pipeline is launched. This one runs the platform and launches the integration tests.
To perform the deployment, it accesses the corresponding CaaS console (Rancher or OpenShift) and updates the platform version.