Hands on DevSecOps Coaching that is provided on AWS and Azure Cloud platforms. Contact Coach AK at devops.coaching@gmail.com for more info. You can also reach out to Coach AK at +1(469) 733-5248
Azure App Service is a fully managed platform as a service (PaaS) offering for developers for hosting applications, REST APIs, and mobile back ends. App services supports .NET, Java, PHP, Python and NodeJS.
App service is fully managed service with built-in infrastructure maintenance, security patching, and scaling.
3.Click on + Add or click on Create app service Click on Web App. Choose your Azure subscription, usually Pay as you Go or Free trial subscription Create a new resource group(for first time if you are creating an appservice, otherwise you can use existing group)
Enter App service name(it should be unique) Publish as Code Run time stack as Java 17
Java Web Server stack --> Tomcat 10.0 Operating System as Linux Region as Central US or where ever you are based at
Enter LinuxPlan name
Choose SKU and size as given below:
Choose DEV/Test and use 1 GB or 1.75 GB memory
Click on Apply
Now click on Apply & Create. This will take bit time to create the app service. Once WebApp is created, go resources, click on WebApp name and click on the URL.
You should see the app service home page some thing like below:
Since our WebApp is up and running, now we can start creating Azure Pipelines to migrate any app to Azure cloud.
The above command will install Java module on Puppet Master.
Step 2
After that change the manifest in site.pp file in Puppet Master by executing the below command: sudo vi /etc/puppetlabs/code/environments/production/manifests/site.pp
node 'target_node_private_dns_name' { class { 'java': distribution => 'jre', } }
Step 3
Now go to Puppet Agent node and apply the changes by executing the below command:
sudo /opt/puppetlabs/bin/puppet agent --test
Step 4
Check the Java version in the Agent by typing the below command: java -version
Please find steps below for configuring Declarative Jenkins pipeline using Jenkinsfile.
Pre-requisites:
1. Java Project setup in Bitbucket/GitHub/GitLab
2. Jenkins and Tomcat (web container) set up.
3. Maven installed in Jenkins
4. Sonarqube setup and integrated with Jenkins
5. Nexus configured and integrated with Jenkins
6. Slack channel configured an integrated with Jenkins
7. Install Pipeline Stage View Plugin
Create Jenkinsfile (pipeline code) to your MyWebApp
Step 1
Go to GitHub and choose the Repo where you setup MyWebApp in Lab exercise # 2
Step 2
Click on create new file.
Step 3 - Enter Jenkinsfile as a file name Step 4 Copy and paste the below code and make sure what ever is highlighted in red color needs to be changed per your settings.
That's it. Pipeline as a code - Jenkinsfile is setup in GitHub.
pipeline { agent any
tools { maven 'Maven3' } stages { stage ('Build') { steps { sh 'mvn clean install -f MyWebApp/pom.xml' } } stage ('Code Quality') { steps { withSonarQubeEnv('SonarQube') { sh 'mvn -f MyWebApp/pom.xml sonar:sonar' } } } stage ('JaCoCo') { steps { jacoco() } } stage ('Nexus Upload') { steps { nexusArtifactUploader( nexusVersion: 'nexus3', protocol: 'http', nexusUrl: 'nexus_url:8081', groupId: 'myGroupId', version: '1.0-SNAPSHOT', repository: 'maven-snapshots', credentialsId: 'fc0f1694-3036-41fe-b3e3-4c5d96fcfd26', artifacts: [ [artifactId: 'MyWebApp', classifier: '', file: 'MyWebApp/target/MyWebApp.war', type: 'war'] ]) } } stage ('DEV Deploy') { steps { echo "deploying to DEV Env " deploy adapters: [tomcat9(credentialsId: '268c42f6-f2f5-488f-b2aa-f2374d229b2e', path: '', url: 'http://your_public_dns:8080')], contextPath: null, war: '**/*.war' } } stage ('Slack Notification') { steps { echo "deployed to DEV Env successfully" slackSend(channel:'your slack channel_name', message: "Job is successful, here is the info - Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})") } } stage ('DEV Approve') { steps { echo "Taking approval from DEV Manager for QA Deployment" timeout(time: 7, unit: 'DAYS') { input message: 'Do you want to deploy?', submitter: 'admin' } } } stage ('QA Deploy') { steps { echo "deploying to QA Env " deploy adapters: [tomcat9(credentialsId: '268c42f6-f2f5-488f-b2aa-f2374d229b2e', path: '', url: 'http://your_dns_name:8080')], contextPath: null, war: '**/*.war' } } stage ('QA Approve') { steps { echo "Taking approval from QA manager" timeout(time: 7, unit: 'DAYS') { input message: 'Do you want to proceed to PROD?', submitter: 'admin,manager_userid' } } } stage ('Slack Notification for QA Deploy') { steps { echo "deployed to QA Env successfully" slackSend(channel:'your slack channel_name', message: "Job is successful, here is the info - Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})") } } }
post {
always {
// Clean up workspace
cleanWs()
}
success {
// Notify success (you can add email or Slack notifications here)
echo "Build and deployment successful."
}
failure {
// Notify failure
echo "Build or deployment failed."
}
}
}
Step 5
That's it. Pipeline as a code - Jenkinsfile is setup in GitHub.
Click on commit to save into GitHub.
Create Pipeline and Run pipeline from Jenkinsfile
1. Login to Jenkins
2. Click on New item, give some name and choose Pipeline and say OK
3. Under build triggers, choose Poll SCM,
Enter H/02 * * * *
4. Under Pipeline section. click on choose pipeline script from SCM
5. Under SCM, choose Git
6. Enter HTTPS URL of repo and choose credentials - enter user name/password of GitHub.
Script path as Jenkinsfile
7. Click on Apply and Save
8. Click on Build now.
You should see pipeline running and application is deployed to Tomcat.
Declarative Jenkins Pipeline YouTube Video is below:
Please find below steps for creating pipelines using Jenkins.
What is Pipeline in Jenkins?
- Pipelines are better than freestyle jobs, you can write a lot of complex tasks using pipelines when compared to Freestyle jobs.
- You can see how long each stage takes time to execute so you have more control compared to freestyle.
- Pipeline is groovy based script that have set of plug-ins integrated for automating the builds, deployment and test execution.
- Pipeline defines your entire build process, which typically includes stages for building an application, testing it and then delivering it.
- You can use snippet generator to generate pipeline code for the stages you don't know how to write groovy code.
- Pipelines are two types - Scripted pipeline and Declarative pipeline
Pre-requisites:
Install plug-ins 1. Install Pipeline Stage View Plugin, Deploy to container, Slack, Nexus Artifact Uploader and SonarQube plug-ins (if already installed, you can skip it) Steps to Create Scripted Pipeline in Jenkins
1. Login to Jenkins
2. Create a New item
3. Give name as MyfirstPipelineJob and choose pipeline
4. Click ok. Pipeline is created now
5. Under build triggers, click on poll SCM, schedule as
H/02 * * * *
6.
Go to Pipeline definition section, click on Pipeline syntax link. under
sample step drop down, choose checkout: Checkout from version control.
enter bitbucket Repository URL, and choose the bitbucket user/password
from the drop town. scroll down, click on Generate Pipeline script. Copy
the code.
7. Now copy the below pipeline code highlighted section into Pipeline section in the pipeline. Please copy stage by stage
8. Change Maven3, SonarQube, Nexus url variables and also Slack channel name as highlighted above in red as per your settings.
9.
For Nexus Upload stage, You need to change the Nexus URL and
credentials ID for Nexus (which you can grab from Credentials tab after
login)
10. For Dev Deploy stage, you can copy credentials ID used for connecting to Tomcat.
Pipeline Code:
node {
def mvnHome = tool 'Maven3'
stage ("checkout") { // copy code here which you generated from step #6
}
stage ('build') {
sh "${mvnHome}/bin/mvn clean install -f MyWebApp/pom.xml"
}
stage ('DEV Approve') {
echo "Taking approval from DEV Manager"
timeout(time: 7, unit: 'DAYS') {
input message: 'Do you want to deploy?', submitter: 'admin'
}
}
stage ('Slack notification') {
slackSend(channel:'channel-name', message: "Job is successful, here is
the info - Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'
(${env.BUILD_URL})")
}