Continuous integration (CI) attempts to increase the quality of the code by testing, reviewing, and running test cases automatically. This is carried out at regular intervals each day, all with the purpose of detecting integration bugs. This facilitates a more collaborative approach when enhancing code quality and provides failure and success reports of the code in real time as well.
Continuous Delivery (CD) entails automating the steps for software deployments so that a code can be released securely and at any time. The resulted artifacts will be integrated to images and containers to deploy on the operational platforms.
To implement CI / CD, a set of infrastructure components was created that make the build and deploy process completely automated. Tools such as Source Control, Package Server, Integration Server, Build Server are used at this stage. Also separate tools are used for Frontend and Backend. For example, the Package Server used in Back-end is NuGet Server and in Front-end it is NPM.
Build Server stores a set of code ready for Build on the Package repository. If multiple modules have dependencies to each other, Build Server will manage the order of packages build based on their dependencies. Accordingly, Build chain is defined for creating interconnected packages. Build chain and other Build settings are defined by writing Build Script using the Cake Script language. Using Build Script does not make the development team dependent on Build infrastructure, and Build infrastructure can be changed at any time and Build Scripts can be run on the new infrastructure. An important point about construction is the use of Static Code Analysis. This mechanism ensures that the generated code is correct.
When checking in codes to Source Control, the codes are first Builded and then the Unit Tests are executed, and if a problem occurs, the Check-in is canceled. This way, the code inside the Source Control is valid at all times.