{"id":73622,"date":"2018-06-20T10:37:38","date_gmt":"2018-06-20T17:37:38","guid":{"rendered":""},"modified":"2025-06-30T03:07:04","modified_gmt":"2025-06-30T10:07:04","slug":"tutorial-cicd-apache-subversion-jenkins-azure-tomcat","status":"publish","type":"post","link":"https:\/\/opensource.microsoft.com\/blog\/2018\/06\/20\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\/","title":{"rendered":"Tutorial: CI\/CD using Apache Subversion, Jenkins in Azure and Tomcat"},"content":{"rendered":"\n<p>In this blogpost, we will show you how to provision a Jenkins VM and setup a CI\/CD pipeline to connect a code repository in <a href=\"https:\/\/subversion.apache.org\/\">Apache Subversion (SVN)<\/a> and deploy the application into a Tomcat service.<\/p>\n\n\n\n<p>We start from the <a href=\"https:\/\/aka.ms\/jenkins-on-azure\">solution template in Azure Marketplace<\/a>, since that\u2019s the fastest and easiest path to get Jenkins up and running in Azure. You can follow the steps using your existing Jenkins server, regardless of whether it\u2019s run on premise or in the cloud. Azure offers Azure Web App with Tomcat on Linux. It is in public preview with build-in support for Tomcat and OpenJDK. It is fully managed by Microsoft and easy to scale. We will demo how to deploy the generated war package into Azure Web App for Java. And of course if you have your own Tomcat server, we will cover this as well.<\/p>\n\n\n\n<p>This is the flow implemented in this post:<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/Flow-e1529427788410.webp\" alt=\"implementation flow\" class=\"wp-image-73648 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/Flow-e1529427788410.webp 986w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/Flow-e1529427788410-300x55.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/Flow-e1529427788410-768x142.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/Flow-e1529427788410-330x61.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/Flow-e1529427788410-800x148.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/Flow-e1529427788410-400x74.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/Flow-e1529427788410.jpg\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/Flow-e1529427788410.jpg 986w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/Flow-e1529427788410-300x55.jpg 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/Flow-e1529427788410-768x142.jpg 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/Flow-e1529427788410-330x61.jpg 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/Flow-e1529427788410-800x148.jpg 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/Flow-e1529427788410-400x74.jpg 400w\"><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Developers commit code change into Subversion<\/li>\n\n\n\n<li>Jenkins builds and packages application into war package<\/li>\n\n\n\n<li>Jenkins deploys the war package into Tomcat service<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"deploy-jenkins-server\"><a id=\"user-content-deploy-jenkins-server\" class=\"anchor\" href=\"https:\/\/github.com\/xiangyan99\/JenkinsCiCD2Azure\/blob\/master\/SVN-Jenkins-Tomcat.md#deploy-jenkins-server\" aria-hidden=\"true\"><\/a>Deploy Jenkins server<\/h2>\n\n\n\n<p>In the Azure portal, select <strong>Create a resource<\/strong> and search for <strong>Jenkins<\/strong>. Select the Jenkins offering with a publisher of <strong>Microsoft<\/strong> and select <strong>Create<\/strong>.<\/p>\n\n\n\n<p>Enter the following information on the basics form and click <strong>OK<\/strong> when done.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Name<\/strong> &#8211; name for the Jenkins deployment.<\/li>\n\n\n\n<li><strong>User name<\/strong> &#8211; this user name is used as the admin user for the Jenkins virtual machine.<\/li>\n\n\n\n<li><strong>Authentication type<\/strong> &#8211; SSH public key is recommended. If selected, copy in an SSH public key to be used when logging into the Jenkins virtual machine.<\/li>\n\n\n\n<li><strong>Subscription<\/strong> &#8211; select an Azure subscription.<\/li>\n\n\n\n<li><strong>Resource group<\/strong> &#8211; create a new or select an existing resource group.<\/li>\n\n\n\n<li><strong>Location<\/strong> &#8211; select a location for the Jenkins server.<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-image-1.webp\" alt=\"Screenshot 1 - Jenkins server config\" class=\"wp-image-73649 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-image-1.webp 887w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-image-1-300x273.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-image-1-768x699.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-image-1-275x250.webp 275w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-image-1-330x300.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-image-1-800x728.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-image-1-400x364.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-image-1.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-image-1.png 887w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-image-1-300x273.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-image-1-768x699.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-image-1-275x250.png 275w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-image-1-330x300.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-image-1-800x728.png 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-image-1-400x364.png 400w\"><\/figure>\n\n\n\n<p>On the additional settings form, complete the following items:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Size<\/strong> &#8211; Select the appropriate sizing option for your Jenkins virtual machine.<\/li>\n\n\n\n<li><strong>VM disk type<\/strong> &#8211; Specify either HDD (hard-disk drive) or SSD (solid-state drive) for the Jenkins server.<\/li>\n\n\n\n<li><strong>Virtual network<\/strong> &#8211; (Optional) Select Virtual network to modify the default settings.<\/li>\n\n\n\n<li><strong>Subnets<\/strong> &#8211; Select Subnets, verify the information, and select <strong>OK<\/strong>.<\/li>\n\n\n\n<li><strong>Public IP address<\/strong> &#8211; Selecting the Public IP address allows you to give it a custom name, configure SKU, and assignment method.<\/li>\n\n\n\n<li><strong>Domain name label<\/strong> &#8211; Specify a value to create a fully qualified URL to the Jenkins virtual machine.<\/li>\n\n\n\n<li><strong>Jenkins release type<\/strong> &#8211; Select the desired release type from the options: LTS, Weekly build, or Azure Verified.<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-02.webp\" alt=\"Screenshot 2 - Jenkins server config\" class=\"wp-image-73658 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-02.webp 633w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-02-248x300.webp 248w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-02-207x250.webp 207w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-02-290x350.webp 290w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-02-400x483.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-02.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-02.png 633w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-02-248x300.png 248w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-02-207x250.png 207w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-02-290x350.png 290w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-02-400x483.png 400w\"><\/figure>\n\n\n\n<p>For Integration Settings, select <strong>No<\/strong> to use Jenkins host to build the jobs.<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-03.webp\" alt=\"Screenshot 3 - Jenkins server config\" class=\"wp-image-73659 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-03.webp 631w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-03-247x300.webp 247w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-03-206x250.webp 206w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-03-289x350.webp 289w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-03-400x485.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-03.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-03.png 631w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-03-247x300.png 247w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-03-206x250.png 206w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-03-289x350.png 289w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-03-400x485.png 400w\"><\/figure>\n\n\n\n<p>Once done with the integration settings, click <strong>OK<\/strong>, and then <strong>OK<\/strong> again on the validation summary. Click <strong>Create<\/strong> on the Terms of use summary. The Jenkins server takes a few minutes to deploy.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"configure-jenkins\"><a id=\"user-content-configure-jenkins\" class=\"anchor\" href=\"https:\/\/github.com\/xiangyan99\/JenkinsCiCD2Azure\/blob\/master\/SVN-Jenkins-Tomcat.md#configure-jenkins\" aria-hidden=\"true\"><\/a>Configure Jenkins<\/h2>\n\n\n\n<p>In the Azure portal, browse to the Jenkins Resource Group, select the Jenkins virtual machine, and take note of the DNS name.<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-04.webp\" alt=\"Screenshot 4 - Jenkins server config\" class=\"wp-image-73660 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-04.webp 786w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-04-300x289.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-04-768x741.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-04-259x250.webp 259w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-04-330x318.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-04-400x386.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-04.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-04.png 786w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-04-300x289.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-04-768x741.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-04-259x250.png 259w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-04-330x318.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-04-400x386.png 400w\"><\/figure>\n\n\n\n<p>Browser to the DNS name of the Jenkins VM and copy the returned SSH string.<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-05.webp\" alt=\"Screenshot 5 - Jenkins On Azure\" class=\"wp-image-73661 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-05.webp 1014w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-05-300x241.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-05-768x617.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-05-311x250.webp 311w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-05-330x265.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-05-800x643.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-05-400x321.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-05.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-05.png 1014w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-05-300x241.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-05-768x617.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-05-311x250.png 311w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-05-330x265.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-05-800x643.png 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-05-400x321.png 400w\"><\/figure>\n\n\n\n<p>Open up a terminal session on your development system, and paste in the SSH string from the last step. Update &#8216;username&#8217; to the username specified when deploying the Jenkins server.<\/p>\n\n\n\n<p>Once connected, run the following command to retrieve the initial admin password.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; auto-links: false; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\nsudo cat \/var\/lib\/jenkins\/secrets\/initialAdminPassword\n<\/pre><\/div>\n\n\n<p>Leave the SSH session and tunnel running, and navigate to <a href=\"http:\/\/localhost:8080\/\" rel=\"nofollow\">http:\/\/localhost:8080<\/a> in a browser. Paste the initial admin password into the field as seen in the following image. Select <strong>Continue<\/strong> when done.<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-06.webp\" alt=\"Screenshot 6 - Unlock Jenkins\" class=\"wp-image-73662 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-06.webp 991w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-06-300x245.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-06-768x626.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-06-307x250.webp 307w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-06-330x269.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-06-800x652.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-06-400x326.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-06.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-06.png 991w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-06-300x245.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-06-768x626.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-06-307x250.png 307w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-06-330x269.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-06-800x652.png 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-06-400x326.png 400w\"><\/figure>\n\n\n\n<p>Select <strong>Install suggested plugins<\/strong> to install all recommended Jenkins plugins.<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-07.webp\" alt=\"Screenshot 6 - Customize Jenkins\" class=\"wp-image-73663 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-07.webp 994w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-07-300x244.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-07-768x624.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-07-308x250.webp 308w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-07-330x268.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-07-800x650.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-07-400x325.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-07.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-07.png 994w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-07-300x244.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-07-768x624.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-07-308x250.png 308w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-07-330x268.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-07-800x650.png 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-07-400x325.png 400w\"><\/figure>\n\n\n\n<p>Create a new admin user account. This account is used for logging into and working with your Jenkins instance.<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-08.webp\" alt=\"Screenshot 7 - Create first admin user\" class=\"wp-image-73664 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-08.webp 719w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-08-300x227.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-08-330x250.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-08-400x303.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-08.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-08.png 719w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-08-300x227.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-08-330x250.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-portal-08-400x303.png 400w\"><\/figure>\n\n\n\n<p>Select <strong>Save and Finish<\/strong> when done, and then <strong>Start using Jenkins<\/strong> to complete the configuration.<br>Select <strong>Manage Jenkins<\/strong> then <strong>Manage Plugins<\/strong>. In <strong>Available<\/strong> tab, search <strong>Maven Integration<\/strong> and <strong>Deploy to container<\/strong> and install them.<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-install-maven-plugin-09.webp\" alt=\"Screenshot 8 - Maven Integration\" class=\"wp-image-73650 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-install-maven-plugin-09.webp 781w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-install-maven-plugin-09-300x282.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-install-maven-plugin-09-768x723.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-install-maven-plugin-09-266x250.webp 266w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-install-maven-plugin-09-330x311.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-install-maven-plugin-09-400x376.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-install-maven-plugin-09.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-install-maven-plugin-09.png 781w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-install-maven-plugin-09-300x282.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-install-maven-plugin-09-768x723.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-install-maven-plugin-09-266x250.png 266w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-install-maven-plugin-09-330x311.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-install-maven-plugin-09-400x376.png 400w\"><\/figure>\n\n\n\n<p>Jenkins is now configured and ready to build and deploy code. For this example, a simple Java application is used to demonstrate a Jenkins build. It can be found at <a href=\"https:\/\/github.com\/xiangyan99\/java-sample\">https:\/\/github.com\/xiangyan99\/java-sample<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"create-build-job\"><a id=\"user-content-create-build-job\" class=\"anchor\" href=\"https:\/\/github.com\/xiangyan99\/JenkinsCiCD2Azure\/blob\/master\/SVN-Jenkins-Tomcat.md#create-build-job\" aria-hidden=\"true\"><\/a>Create build job<\/h2>\n\n\n\n<p>Now create a Jenkins build job. Select <strong>New Item<\/strong>, give the build project a name such as svn-tomcat-demo, select <strong>Maven project<\/strong>, and click <strong>OK<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-new-job-10.webp\" alt=\"Screenshot 9 - Create build job\" class=\"wp-image-73657 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-new-job-10.webp 946w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-new-job-10-300x251.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-new-job-10-768x643.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-new-job-10-299x250.webp 299w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-new-job-10-330x276.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-new-job-10-800x670.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-new-job-10-400x335.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-new-job-10.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-new-job-10.png 946w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-new-job-10-300x251.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-new-job-10-768x643.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-new-job-10-299x250.png 299w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-new-job-10-330x276.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-new-job-10-800x670.png 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-new-job-10-400x335.png 400w\"><\/figure>\n\n\n\n<p>Under <strong>source code management<\/strong>, select <strong>Subversion<\/strong> and enter your SVN repository URL and credential.<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-11.webp\" alt=\"Screenshot 10 - Create build job\" class=\"wp-image-73651 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-11.webp 945w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-11-300x262.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-11-768x670.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-11-287x250.webp 287w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-11-330x288.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-11-800x698.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-11-400x349.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-11.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-11.png 945w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-11-300x262.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-11-768x670.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-11-287x250.png 287w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-11-330x288.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-11-800x698.png 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-11-400x349.png 400w\"><\/figure>\n\n\n\n<p>Please download the sample code and check the code into your SVN server.<\/p>\n\n\n\n<p>Under <strong>Build<\/strong>, input <strong>package<\/strong> for <strong>Goals and options<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-12.webp\" alt=\"Screenshot 11 - Create build job\" class=\"wp-image-73652 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-12.webp 950w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-12-300x260.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-12-768x665.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-12-289x250.webp 289w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-12-330x286.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-12-800x693.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-12-400x347.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-12.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-12.png 950w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-12-300x260.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-12-768x665.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-12-289x250.png 289w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-12-330x286.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-12-800x693.png 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-12-400x347.png 400w\"><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Deploy to Azure Web App<\/li>\n<\/ul>\n\n\n\n<p>Microsoft has a Jenkins plugin to deploy to <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/app-service\/containers\/app-service-linux-intro\" rel=\"nofollow\">Azure Web App service<\/a>.<\/p>\n\n\n\n<p>Under <strong>Post-build Actions<\/strong>, select <strong>add post-build action<\/strong> and select <strong>Publish an Azure Web App<\/strong>. Add your <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/azure-resource-manager\/resource-group-create-service-principal-portal\" rel=\"nofollow\">Azure service principal<\/a> and from the drop-down list, you can choose your Web App Service.<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-13-1024x665.webp\" alt=\"Screenshot 12 - Create build job\" class=\"wp-image-73653 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-13.webp 1041w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-13-300x195.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-13-1024x665.webp 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-13-768x499.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-13-330x214.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-13-800x520.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-13-400x260.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-13.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-13.png 1041w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-13-300x195.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-13-1024x665.png 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-13-768x499.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-13-330x214.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-13-800x520.png 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-13-400x260.png 400w\"><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Deploy to Tomcat server on VM<\/li>\n<\/ul>\n\n\n\n<p>If you have your own Tomcat server, you can deploy your package to your server as well.<\/p>\n\n\n\n<p>Under <strong>Post-build Actions<\/strong>, select <strong>add post-build action<\/strong> and select <strong>Deploy war\/ear to a container<\/strong>. Input Tomcat URL and credential.<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-14.webp\" alt=\"Screenshot 13 - Create build job\" class=\"wp-image-73654 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-14.webp 943w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-14-300x237.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-14-768x606.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-14-317x250.webp 317w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-14-330x260.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-14-800x631.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-14-400x316.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-14.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-14.png 943w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-14-300x237.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-14-768x606.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-14-317x250.png 317w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-14-330x260.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-14-800x631.png 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-14-400x316.png 400w\"><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"run-the-build-job\"><a id=\"user-content-run-the-build-job\" class=\"anchor\" href=\"https:\/\/github.com\/xiangyan99\/JenkinsCiCD2Azure\/blob\/master\/SVN-Jenkins-Tomcat.md#run-the-build-job\" aria-hidden=\"true\"><\/a>Run the build job<\/h2>\n\n\n\n<p>To test the build job, manually start a build.<\/p>\n\n\n\n<p>Select Build Now to start a build job. It takes a few seconds for the job to start, when running, you should see status similar to the following images.<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-status-15.webp\" alt=\"Screenshot 14 - Build History\" class=\"wp-image-73656 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-status-15.webp 332w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-status-15-240x300.webp 240w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-status-15-200x250.webp 200w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-status-15-280x350.webp 280w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-status-15.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-status-15.png 332w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-status-15-240x300.png 240w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-status-15-200x250.png 200w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-status-15-280x350.png 280w\"><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"here-you-go\"><a id=\"user-content-here-you-go\" class=\"anchor\" href=\"https:\/\/github.com\/xiangyan99\/JenkinsCiCD2Azure\/blob\/master\/SVN-Jenkins-Tomcat.md#here-you-go\" aria-hidden=\"true\"><\/a>Here you go!<\/h2>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-16-e1529434720561.webp\" alt=\"Screenshot 15 - Build site\" class=\"wp-image-73655 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-16-e1529434720561.webp 445w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-16-e1529434720561-300x74.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-16-e1529434720561-330x82.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-16-e1529434720561-400x99.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-16-e1529434720561.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-16-e1529434720561.png 445w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-16-e1529434720561-300x74.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-16-e1529434720561-330x82.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/jenkins-job-16-e1529434720561-400x99.png 400w\"><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Questions or feedback? Let us know in the comments below.&nbsp;<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this blogpost, we will show you how to provision a Jenkins VM and setup a CI\/CD pipeline to connect a code repository in Apache Subversion (SVN) and deploy the application into a Tomcat service.<\/p>\n","protected":false},"author":5562,"featured_media":73671,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"msxcm_post_with_no_image":false,"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","footnotes":""},"post_tag":[89,2272,166],"content-type":[340],"topic":[2241,2244],"programming-languages":[],"coauthors":[2353],"class_list":["post-73622","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-apache","tag-microsoft","tag-azure","content-type-tutorials-and-demos","topic-cloud","topic-devops","review-flag-1593580428-734","review-flag-new-1593580248-669","review-flag-on-pr-1593580830-261","review-flag-publi-1593580761-124","review-flag-vm-1593580807-312"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tutorial: CI\/CD using Apache Subversion, Jenkins in Azure and Tomcat<\/title>\n<meta name=\"description\" content=\"Learn how to provision a Jenkins VM and setup a CI\/CD pipeline to connect a code repository in SVN and deploy the application into\u00a0a Tomcat service.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/opensource.microsoft.com\/blog\/2018\/06\/20\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tutorial: CI\/CD using Apache Subversion, Jenkins in Azure and Tomcat\" \/>\n<meta property=\"og:description\" content=\"Learn how to provision a Jenkins VM and setup a CI\/CD pipeline to connect a code repository in SVN and deploy the application into\u00a0a Tomcat service.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/opensource.microsoft.com\/blog\/2018\/06\/20\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Open Source Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-06-20T17:37:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-30T10:07:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/Flow_twitter.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"986\" \/>\n\t<meta property=\"og:image:height\" content=\"500\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Xiang Yan\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@OpenAtMicrosoft\" \/>\n<meta name=\"twitter:site\" content=\"@OpenAtMicrosoft\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Xiang Yan\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 min read\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2018\\\/06\\\/20\\\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2018\\\/06\\\/20\\\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\\\/\"},\"author\":[{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/author\\\/xiang-yan\\\/\",\"@type\":\"Person\",\"@name\":\"Xiang Yan\"}],\"headline\":\"Tutorial: CI\\\/CD using Apache Subversion, Jenkins in Azure and Tomcat\",\"datePublished\":\"2018-06-20T17:37:38+00:00\",\"dateModified\":\"2025-06-30T10:07:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2018\\\/06\\\/20\\\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\\\/\"},\"wordCount\":889,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2018\\\/06\\\/20\\\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/06\\\/Flow_twitter.jpg\",\"keywords\":[\"Apache\",\"Microsoft\",\"Microsoft Azure\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2018\\\/06\\\/20\\\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2018\\\/06\\\/20\\\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\\\/\",\"url\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2018\\\/06\\\/20\\\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\\\/\",\"name\":\"Tutorial: CI\\\/CD using Apache Subversion, Jenkins in Azure and Tomcat\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2018\\\/06\\\/20\\\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2018\\\/06\\\/20\\\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/06\\\/Flow_twitter.jpg\",\"datePublished\":\"2018-06-20T17:37:38+00:00\",\"dateModified\":\"2025-06-30T10:07:04+00:00\",\"description\":\"Learn how to provision a Jenkins VM and setup a CI\\\/CD pipeline to connect a code repository in SVN and deploy the application into\u00a0a Tomcat service.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2018\\\/06\\\/20\\\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2018\\\/06\\\/20\\\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2018\\\/06\\\/20\\\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\\\/#primaryimage\",\"url\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/06\\\/Flow_twitter.jpg\",\"contentUrl\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/06\\\/Flow_twitter.jpg\",\"width\":986,\"height\":500,\"caption\":\"a close up of a logo\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2018\\\/06\\\/20\\\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorial: CI\\\/CD using Apache Subversion, Jenkins in Azure and Tomcat\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/\",\"name\":\"Microsoft Open Source Blog\",\"description\":\"Open dialogue about openness at Microsoft \u2013 open source, standards, interoperability\",\"publisher\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/#organization\",\"name\":\"Microsoft Open Source Blog\",\"url\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/Microsoft-Logo.png\",\"contentUrl\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/Microsoft-Logo.png\",\"width\":259,\"height\":194,\"caption\":\"Microsoft Open Source Blog\"},\"image\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/OpenAtMicrosoft\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tutorial: CI\/CD using Apache Subversion, Jenkins in Azure and Tomcat","description":"Learn how to provision a Jenkins VM and setup a CI\/CD pipeline to connect a code repository in SVN and deploy the application into\u00a0a Tomcat service.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/opensource.microsoft.com\/blog\/2018\/06\/20\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\/","og_locale":"en_US","og_type":"article","og_title":"Tutorial: CI\/CD using Apache Subversion, Jenkins in Azure and Tomcat","og_description":"Learn how to provision a Jenkins VM and setup a CI\/CD pipeline to connect a code repository in SVN and deploy the application into\u00a0a Tomcat service.","og_url":"https:\/\/opensource.microsoft.com\/blog\/2018\/06\/20\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\/","og_site_name":"Microsoft Open Source Blog","article_published_time":"2018-06-20T17:37:38+00:00","article_modified_time":"2025-06-30T10:07:04+00:00","og_image":[{"width":986,"height":500,"url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/Flow_twitter.jpg","type":"image\/jpeg"}],"author":"Xiang Yan","twitter_card":"summary_large_image","twitter_creator":"@OpenAtMicrosoft","twitter_site":"@OpenAtMicrosoft","twitter_misc":{"Written by":"Xiang Yan","Est. reading time":"4 min read"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/06\/20\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\/#article","isPartOf":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/06\/20\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\/"},"author":[{"@id":"https:\/\/opensource.microsoft.com\/blog\/author\/xiang-yan\/","@type":"Person","@name":"Xiang Yan"}],"headline":"Tutorial: CI\/CD using Apache Subversion, Jenkins in Azure and Tomcat","datePublished":"2018-06-20T17:37:38+00:00","dateModified":"2025-06-30T10:07:04+00:00","mainEntityOfPage":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/06\/20\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\/"},"wordCount":889,"commentCount":1,"publisher":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#organization"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/06\/20\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\/#primaryimage"},"thumbnailUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/Flow_twitter.jpg","keywords":["Apache","Microsoft","Microsoft Azure"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/opensource.microsoft.com\/blog\/2018\/06\/20\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/06\/20\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\/","url":"https:\/\/opensource.microsoft.com\/blog\/2018\/06\/20\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\/","name":"Tutorial: CI\/CD using Apache Subversion, Jenkins in Azure and Tomcat","isPartOf":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/06\/20\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\/#primaryimage"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/06\/20\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\/#primaryimage"},"thumbnailUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/Flow_twitter.jpg","datePublished":"2018-06-20T17:37:38+00:00","dateModified":"2025-06-30T10:07:04+00:00","description":"Learn how to provision a Jenkins VM and setup a CI\/CD pipeline to connect a code repository in SVN and deploy the application into\u00a0a Tomcat service.","breadcrumb":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/06\/20\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/opensource.microsoft.com\/blog\/2018\/06\/20\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/06\/20\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\/#primaryimage","url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/Flow_twitter.jpg","contentUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/06\/Flow_twitter.jpg","width":986,"height":500,"caption":"a close up of a logo"},{"@type":"BreadcrumbList","@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/06\/20\/tutorial-cicd-apache-subversion-jenkins-azure-tomcat\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/opensource.microsoft.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Tutorial: CI\/CD using Apache Subversion, Jenkins in Azure and Tomcat"}]},{"@type":"WebSite","@id":"https:\/\/opensource.microsoft.com\/blog\/#website","url":"https:\/\/opensource.microsoft.com\/blog\/","name":"Microsoft Open Source Blog","description":"Open dialogue about openness at Microsoft \u2013 open source, standards, interoperability","publisher":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/opensource.microsoft.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/opensource.microsoft.com\/blog\/#organization","name":"Microsoft Open Source Blog","url":"https:\/\/opensource.microsoft.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png","contentUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png","width":259,"height":194,"caption":"Microsoft Open Source Blog"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/OpenAtMicrosoft"]}]}},"msxcm_animated_featured_image":null,"bloginabox_display_generated_audio":false,"distributor_meta":false,"distributor_terms":false,"distributor_media":false,"distributor_original_site_name":"Microsoft Open Source Blog","distributor_original_site_url":"https:\/\/opensource.microsoft.com\/blog","push-errors":false,"_links":{"self":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/73622","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/users\/5562"}],"replies":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/comments?post=73622"}],"version-history":[{"count":3,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/73622\/revisions"}],"predecessor-version":[{"id":97894,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/73622\/revisions\/97894"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/media\/73671"}],"wp:attachment":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/media?parent=73622"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/post_tag?post=73622"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/content-type?post=73622"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/topic?post=73622"},{"taxonomy":"programming-languages","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/programming-languages?post=73622"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/coauthors?post=73622"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}