Mlops Task 2
Problem Statement:
1. Create a container image that’s has Jenkins installed using Dockerfile.
2. When we launch this image, it should automatically start the Jenkins service in the container.
3. Create a job chain of job1, job2, job3 and job4 using the build pipeline plugin in Jenkins.
4. Job1: Pull the GitHub repo automatically when some developers push the repo to GitHub.
5. Job2: By looking at the code or program file, Jenkins should automatically start the respective language interpreter.
6. Job3: Install image container to deploy code ( eg. If code is of PHP, then Jenkins should start the container that has PHP already installed ).
7. Job4: Test your app if it is working or not.
7. Job5: If the app is not working, then send an email to the developer with error messages.
Solution: Requirements: Jenkins in base OS (Redhat,CentOS) with plugins like Github, Build Pipeline, Downstream-ext.
Github Link: https://github.com/Apeksh742/jenkins_pipeline
So i created a Dockerfile to install jenkins using base centos image. You can get from my repo
Use this command to create image of Dockerfile
docker build -t jenkins:new .
Step 2: Now you can run container using that image
docker run -dit --name jenkins -p 8085:8080 jenkins:new
It will start jenkins automatically on base OS IP with port no 8085. For login inside jenkins give username admin and password is inside container
docker exec -it jenkins bashcat /root/.jenkins/secrets/initialAdminPassword
Then by using password log in inside jenkins and install Github and Build Pipeline Plugin
Step 3: Job1: Provide github repo link and type same commands in execute shell. I have used Poll SCM trigger in my job1. It will basically copy all your files from repo to your container.
JOB2: It checks the type of file which are present in repo like html or php. I have used html file.
JOB3: It is in Base OS jenkins which i have triggered using remote script option. Based on type of file it launches container capable of deploying them like in my case httpd container for html files.
JOB4: It will test your app if it is working or not and if not then it will trigger JOB5
JOB5: It will send an e-mail to developer if JOB4 fails.
The mail would look like this
Note: Please use your credentials in failure_mail.py
For sending mail you would have to turn on Less Secure Options
Github Link: https://github.com/Apeksh742/jenkins_pipeline