/CI-CD-Pipeline

A pipeline that builds, tests, checks code coverage and deploys the application to cloud using blue-green deployment

Primary LanguageJavaScript

Pipeline-Template

Readme Loc Git Link
env file Click Here
M3 Tasks Click Here
Provisioning on cloud service Click Here
iTrust deployment job Click Here
Deployment strategy Click Here
Challenges faced Click Here
Screencast Click Here

Specify file structure what file contains what info

MAC M1 requirements

brew
basicvm
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # To install brew
$ brew install ottomatica/ottomatica/basicvm          # To install basicvm

Windows/MAC Intel requirements

Choco
Virtual box
Nodejs
Bakerx
Npm

.env file

# Add the following env variables for any OS
vm_name = Name_Of_VM                # Ex: vm-server
git_token = Git_Token               # Ex: 123adsfh32jjhg
db_pass = 12345                     # set the password of mysql 
droplet_name=drops                  # name for the SSH KEY to be placed inside the digital ocean
DROPLET_TOKEN=dp_ac8be7da.......es  # droplet token genereated from digital ocean 
# to generate the droplet token login into digital ocean account and select API from the left menu and then select Generate new token and copy it to above
# Add the following for Windows and MAC Intel
ip_address = 192.168.52.100         # Any ip can be assigned
memory = 4096                       # RAM to be assigned for vm --Recommended to use atleast 4GB
# Please make sure no comment lines are in .env file

M3 Tasks

Provisioning on cloud service

  • The droplet.js file is used to provision the instance for a target infrastructure using Digital Ocean as cloud provider.
  • We are creating droplets with the help of ssh key generated.
  • We are using 3 droplets namely droplet-blue, droplet-green to deploy the applictaion and monitor droplet to act as proxy server to monitor the health of the application.
  • After creation of droplet in the Digital Ocean webiste, the infrastructure data such as droplet name, droplet id, ip address is stored in an inventory file.
pipeline prod up

iTrust deployment job spec

  • The build.yml has the job - itrust-build which is responisble to create a war file for deploying the iTrust application to the cloud instances of blue and green.
  • We also install npm module and node js in monitor droplet and copy the required scripts into monitor droplet.
  • Once, the war file is generated after succesful build and been located, the dependencies such as tomcat JRE, JDK, Maven, Apache, npm, mysql are installed and the respective commands are defined in the build.yml file. And the war is copied to the cloud instances blue and green droplets.
pipeline build deploy inventory itrust-deploy build.yml

Deployment Strategy

  • We implemented the blue green deployment strategy along with healthcheck function to keep track of health of the target.
  • For this purpose our droplets droplet-blue and droplet-green contains the application which is the .war file genereate by execution of the itrust-build, which will be copied to destination droplets and also installs tomcat and restartss the tomcat server on target machines.
  • The monitor droplets runs the traffic and also checks the health of the target using the serve.js
  • we monitor the health check and start the proxy to listen on 3590 port, this will be done by monitor droplet another cloud instance.
  • we start checking the health of the target which is by default assigned to Green, and at some point of time we execute siege script to stress test the target droplet due to which the the droplet hangs for a while, which results in failover and switches to blue droplet.
  • We monitor this inside the third droplet "monitor" the code can be found at serve.js

Challenges and issues faced

  • we did research a lot to create the droplet using the SSH key generated and then used axios.post to create the droplet using the fingerprint returned by the digital ocean.
  • It was a challenging task to download tomcat inside the droplets and aslo to copy the war file generated from vm into the droplets
  • We faced issues due to automating the blue green server ips as serve.js and seige.sh will be executed inside the monitor droplet, which took some time to automate the code so that they can fetch those values.
  • We faced issues with dos2unix for(CRLF error), we fixed this issue by finding.sh files and usage of dos2unix package downloaded.

Screencast

Click Here for Screencast of MAC M1

Use this if the above is not working - https://youtu.be/OJvqAtbRG1A

Click Here for Screencast of Windows
Link to Screencast for Windows (If above hyperlink is not working) - https://youtu.be/dHr_4H2M6yM