How to deploy .NET applications to Azure with Jenkins?
All from ground up to CI/CD with Jenkins and Azure DevOps Services
Microsoft Azure is Microsoft’s cloud computing service. Developers and companies use it for building new applications, testing, deploying, and managing them. Through SaaS and PaaS services, we can manage the data centres. Azure supports various programming languages C#, Node.js, F#, Python, PHP, and PowerShell. Jenkins initially released in 2014 and the latest version 18.104.22.168 released in July 2019 has ongoing improvement.
What is Jenkins?
Jenkins a very popular open-source automation server gained its place in developer’s preference list. This open source automation tool is for continuous delivery of software with integration. It is important part of the DevOps and its stages, written in Java. Integration using various technologies is possible with large number of software to be tested and then deployed.
How to Deploy on Azure?
The resource group manages the Azure assets by the owner or other set criteria. Accordingly add and delete resources. A virtual machine (VM) is deployed to run Jenkins as an automation server. The Azure resources connected to each other through a virtual network isolate the logic. The server isolated in subnet makes it easy to mange and segregate network traffic without disturbing the performance.
The security group on virtual network restricts the network traffic, from internet to subnet. Virtual hard disk is for application storage on Azure. It enhances performance and offers disaster recovery.
Azure Blob storage is to store the builds created and shared with other applications. Azure Active directory- AD supports in authentication process and helps defining the policy for granting permissions.
Azure Key Vault stores the secrets of architecture such as cryptographic keys. Azure monitoring service is for keeping watch on virtual machine hosting Jenkins.
Every change made in here the source code is build continuously. The code pulled from every commit in the shared repository is checked number of times during a day. Every commit made in the repository is build.
Usually the complete source code for application is created before deploying for testing. This method of coding has hindrances of results and quality testing after the complete software is developed. The number of bugs and time required for corrections can delay the coding and release process. The rectification process and after that the rechecking for errors is troublesome.
With the continuous integration the coding and its testing is broken into small patches. The feedback and timely flaws identification on the coding, removes the impediments. The speed of software development remains constant and automates whole process. Azure Jenkins is the most reliable CI tool.
Benefits and Features of Azure Jenkins:
- Free open source tool with added community support.
- Easy installation
- Configuration is easy with built-in help and error checks.
- Web-interface provides ease of use
- Available for various operating systems
- Hosted Internally
- Host your Jenkins deployment in Azure
- Code package deployment is quick and easy
- Developers manage their individual codes throughout the development cycle.
- User friendly UI/UX design
- Workflow Plugin
- Great tool for automation workflows
- Create, Automate, and Schedule jobs.
- Distribution of work across multiple devices is effortless.
- Enable and disable jobs with configuration settings
- Availability of over 1000+ plugins
- Code and share a new non-existing plugin for use of community
- Tool built with Java provides portability to other major platforms.
- Easy deployment process
- Deployment using open API
- Continuous Deployment and Continuous Delivery
- Continuous Testing and Monitoring
- Execute random shell scripts and batch commands of Windows.
- Helps in CI solutions ( New code changes in app)
- Version Control
- Streamline Development Process
- Good viability of deployment pipeline status
- Installing builds is automated hence saves from human errors
- Single point of access for all information of your builds
- Customize the builds if required by other teams
- Access control with the features of authentication/authorization
- Reduces build and processing time
- Boosts Quality and Enhances Accuracy
- Easy for debugging and customized jobs
- Real-time deployment and synchronization
- Notifications of Build Status with time stamps states Build Started, Completed, or Failed.
- Clear documentation
- Easy to manage entire development pipeline
- Integrations made easy
- Integrates well with other DevOps tool (Maven, Gitlab, SonarQube, Selenium)
- Allows configuring periodic i.e. nightly builds or in sections as subversions.
- Multiple language scripting is possible.
- History of multiple users is stored and visible
- Standard Health Check of system is available
- Little maintenance
Shortcomings of Azure Jenkins:
- Very un-inherent UI can confuse the first timers to use and get comfortable with the tool.
- Managing multiple jobs on the dashboard is difficult.
- UI for project list is hard to navigate and the design needs updates.
- With huge number of builds, the loading of UI is time consuming.
- The community support is great but unique errors that none have come across needs to be solved on your own.
- There is no dedicated support, just open discussions.
- Lesser documentation is available for reference.
- Better search options needed in UI.
- At times for basic level tasks plugins are required.
- Log of per user download and upgrade of plugins unavailable.
- While using multiple plugins depicting and deciphering errors is difficult.
- Bloating of Jenkins node with over use of plugins can destabilize it over a period.
- It does not support the microservices too well.
- Error messages need to be precise, explanatory, yet friendly.
- Giving access to selective users, for certain build options is not possible.
- Trend analysis requires better support.
- Parallel builds require separate display.
- If you are running multiple instances of Jenkins then maintenance can be problematic.
- Results metric needs improvement for reports.
- Need solutions for replicating jobs across multiple products.
- Job templates unavailability is a scope of improvement.
- Data Export is required but missing.
- More graphic features and graphic representation for current pipelines required.
- Better and flexible project structure management needed.
- Stronger support on troubleshooting the build failure can help.
- The pipeline through, which user can modify instructions is hard to use via the browser.
- Jenkins does not allow developer to see the commits done earlier by any other team member.
- Learning to use Jenkins can be difficult with less amount of information available.
- Trained experts can use it better; training expenses are additional costs.
Simplicity of using Azure Jenkins:
Developers commits the code or changes to the source code. Jenkins checks it in the Git repository at regular intervals. The changes after the commit occurs are pulled to prepare a new build. Only the successful build is deployed on the test server. Unsuccessful build can roll back for debugging. Issues detected can be addressed immediately. Notification, popups, and feedback relating to the build and testing are available. This process of Jenkins is repetitive in nature.
The tool’s popularity chart includes over 150,000 active installations. Azure Jenkins supports Windows, Linux, Android, Mac, UNIX, iPhone/iPad and Web-based applications. It offers support for Software Configuration Management application (SCM) platforms such as Clearcase, AccuRev etc. Hence, is suitable for small, medium, and large business enterprises as well as freelancers.
Jenkins Azure plugins:
- Azure AD permits the Jenkins server to support SSO for users.
- Azure VM Agents uses an Azure Resource Manager template to create agents on virtual machines.
- Azure Credentials allows you to store the service certificates.
- Windows Azure Storage uploads build objects and artefacts or downloads build dependencies from it.
- Azure Container Agents runs a container as an agent.
- Kubernetes Continuous Deploy is for resource configuration in Kubernetes cluster.
- Azure Container Service deploys configurations with Kubernetes, Docker Swarm etc.
- Azure Functions deploys your project to the Function.
- Azure App Service deploys the application service.
Other Useful Plugins for Jenkins:
There are plugins for Platforms, User interface, Administration, Source Code Management, Build Management.
Plugins and number of installs give clear idea of their popularity.
- MS Test Runner – 4909
- Google Play Android Publisher – 2177
- PowerShell – 18353
- SOASTA Cloud Test – 231
- Simple Theme – 22549
- Personalization for Blue Ocean – 49776
- Build Monitor View – 18223
- Pipleline Rest API – 206866
- Kubernetes – 10935
- Lockable resources – 149994
- Matrix Authorization Strategy – 238419
- WMI Windows Agents – 167831
Source Code Management
- GitHub Branch Source – 190307
- Mercurial – 70522
- Pipeline: SCM Step – 233756
- Subversion – 208237
- Active Choices – 13694
- Android Emulator – 4599
- Configuration Slicing – 10294
- e-mail Extension Template – 20114
Estimated Azure Jenkins developers are over 15 million across the world. The 65-70% of developers trust the continuous integration. This shows its popularity and reliability. It is suitable for all size of companies, willing to automate software processes in order to deliver faster.
With Azure Jenkins, organizations can accelerate and automate the software development process. Faster development life cycle processes, the stages from coding to release. Most attractively, it saves the time and efforts of developers and funds of companies. It provides strength for improving capacity of timely delivery, software quality and helps maintain project deadlines.