Welcome to this blog on DevOps Interview questions. DevOps is fast becoming part and parcel of a software developer role. It is highly recommended that all software engineers should know about DevOps tools and processes. It goes without saying that “Faster Delivery” is becoming synonymous with DevOps. Companies want to save money and DevOps is here to help!
If you’ve landed on this blog, chances are you already know what DevOps means. If not, here is a quick definition –
DevOps is a collaboration between Development and IT Operations to make software production and deployment in an automated and repeatable way. DevOps culture focuses on creating efficiency for all stakeholders involved in software development, deployment, and maintenance.
Related: Basics of DevOps
This blog contains commonly asked questions in a DevOps interview. From cloud platform perspective, these interview questions stresses mostly on Amazon Web Services (AWS) and Microsoft Azure.
What are the core components of DevOps?
The key components of DevOps are Continuous Integration, Continuous Testing, Continuous Development, Continuous Feedback, Continuous Monitoring, Continuous Deployment and Continuous Monitoring.
What are the phases followed in DevOps Methodology?
Plan: In this phase, requirements are gathered from stakeholders and customers and used to build a product roadmap to guide future development. Popular tools like Jira or Azure DevOps can be used to keep track of Epics, Features and User Stories that will help with the code development.
Code: The application is coded according to the business requirements.
Build: Once a developer has finished a task, they commit their code to a shared code repository. Generally, developer submits a pull request to merge their new code with the shared codebase.
Test: Once the build succeeds, it is automatically deployed to a staging environment for functional testing by the quality engineers or business users. Many organizations have their own test process, custom to what works best for them.
Integrate: In this phase, code from different programmers could be combined into one branch. At this time, each code change has passed a series of manual and automated tests.
Deploy: The code is deployed in a production environment for usage by customers.
Operate: Based on the configuration of the hosting service, the environment automatically scales with load to handle peaks and troughs in the number of active users. IaC comes in handy at this point.
Monitor: The performance of the application is monitored. All of this information is then fed back to the Product Manager and the development team to close the loop on the process.
What is a container and what containers Azure DevOps support?
Containers provide a way to package software code, its configurations, packages and its dependencies into a single unit or object.
We can have multiple containers that can run on the same machine and share the operating system with other containers so that we can run anywhere fast and reliable and consistent deployments.
Azure DevOps has the following container support:
- Asp.Net with containers.
- Azure Kubernetes services.
- Azure Service Fabric application with Docker support.
What is a Docker Container and how do you create it?
- A Docker container is an open-source software development platform that stores the code and all of its dependencies and runs the application quickly and reliably from one computing environment to the other.
- Docker containers are not specified to any particular infrastructure; they can run on any infrastructure, on any computer, and in any cloud.
- A Docker container image is a standalone, lightweight, and executable package of software that has everything to run the application such as code, system tools, runtime, system libraries, and settings.
Docker Containers can be created with the Docker image using the following command:
docker run -t -i <image name> <command name>
This will create and start the container.
If you want to check the list of all running containers with status on the host, use the following command:
docker ps -a
What is meant by Infrastructure as Code (IaC)?
IaC is a common DevOps practice in which the code and the software development techniques help in managing the overall infrastructure, everything from continuous integration to the version control system. The API model in the cloud further helps developers work with the entirety of the infrastructure programmatically. Example tools are Chef, Ansible, Puppet, Terraform.
What does configuration management mean in DevOps?
Configuration and resource management is an automated method for maintaining infrastructure and software in a known, consistent state. Also, it assists in providing consistency and enhancing the product development process by implementing means of design streamlining, control, extensive documentation, and change implementation during different phases of the project. This further leads to enhanced agility and performance for an organization.
How is DevOps different from agile methodology?
DevOps is a culture that allows the development and the operation teams to work together. This results in continuous development, testing, integration, deployment, and monitoring of the software throughout the lifecycle. We wrote an entire blog on it. Check it out below:
What is Continuous Integration (CI) in DevOps?
Continuous integration is a DevOps software development practice where developers regularly merge their code changes into a central repository, after which automated builds and tests are run. Continuous integration most often refers to the build or integration stage of the software release process and entails both a DevOps automation component (e.g. a CI or build service) and a cultural component (e.g. learning to integrate frequently).
The key goals of continuous integration are to find and address bugs quicker, improve software quality, and reduce the time it takes to validate and release new software updates.
Additionally, it helps to strengthen the software quality and minimize the time taken for validating and releasing new software updates.
What is Continuous Delivery (CD) in DevOps?
Continuous delivery (CD) is an approach for software delivery in which development teams produce and test code in short but continuous cycles, usually with high degrees of automation, to improve software quality. This process enables development teams to build, test and deploy software quickly by encouraging more incremental updates, rather than spending a large portion of time on a complete overhaul of a given product.
Additionally, the testing and the preparation of these codes are done for their release to production.
It is important to note that CD expands upon the CI concept by deploying all the code changes to testing and/or production environment. This is done after the build stage.
What are the benefits of using version control?
Version control system (VCS), also known as source control, is the practice of tracking and managing changes to software code. Version control systems are software tools that help software teams manage changes to source code over time. As development environments have accelerated, version control systems help software teams work faster and smarter.
A VCS that is distributed, such as Git, lets all the team members retrieve a complete history of the project. This allows developers or other stakeholders to use the local Git repositories of any of the teammates even if the main server goes down at any point in time.
What is your understanding of pipelines?
A DevOps pipeline is a set of practices that the development (Dev) and operations (Ops) teams implement to build, test, and deploy software faster and easier. Pipelines have all the features that are required for supporting Continuous Integration (CI) and Continuous Deployment (CD). Just like CI/CD, the primary purposes of a pipeline is to keep the software development process organized and focused.
What is CodePipeline in AWS DevOps?
AWS CodePipeline is a fully managed, continuous delivery service that connects to existing tools and systems. It allows organizations to model the different stages of their software release process using the console interface, the AWS CLI, AWS CloudFormation, or the AWS SDKs. Core operations such as building, testing, and deploying after every single build become very easy with the set release model protocols that are defined by a user. CodePipeline ensures that you can reliably deliver new software updates and features rapidly.
What is Azure Pipelines?
Azure Pipelines automatically builds and tests code projects to make them available to others. It works with just about any language or project type. Azure Pipelines combines continuous integration (CI) and continuous delivery (CD) to test and build your code and ship it to any target.
To use Azure Pipelines, you need:
- An organization in Azure DevOps.
- To have your source code stored in a version control system.
What are the high level steps involved leading up to a DevOps release?
Assuming the development team works in Agile in a 2-3 week sprint:
- Before individual developers and the team start building and deploying code, decide where to store the source code.
- Developer (or Agile Team) works on accomplishing functionality as agreed upon in a sprint. Test driven development (TDD) or Behavioral driven development (BDD) is encouraged during development phase.
- The developer (or Agile Team) pushes the code in the test environment using pipelines. This could be one or more environments.
- Quality engineers works on testing the feature with a focus on end-to-end automation. There can be collaboration with business users for testing.
- Developers take the feedback from quality engineers and business feedback in a constant collaboration manner.
- Finally, the code is pushed to production environment and validated again. Usage of automation in the pipelines is encouraged and best practice to avoid manual work.
What does it mean by a branching strategy in DevOps?
Branching strategy is your team’s agreement on how and when to create and merge branches in version control. A branching strategy helps define how the delivery team functions and how each feature, improvement, or bug fix is handled. In other words, branching helps with code isolation. It creates a copy of the source code to make two or more versions that could be separately developed.
Branching strategy reduces the complexity of the delivery pipeline by allowing developers to focus on developments and deployments only on the relevant branches, without affecting the entire application.
What is Trunk Based Development (TBD)?
The Trunk Based Development strategy involves developers integrating their changes directly into a shared trunk (master) at least once a day. This shared trunk is always in a releasable state. Developers can pull from this trunk, create a local repository, and then push the code to the shared trunk.
Any code pushed from current branch to trunk automatically kicks off the CI-server and tests are run on the code.This eliminates the need for triaging big merges failures.
This regular integration enables developers to view each other’s changes quickly and immediately react if there are any conflicts.
Can you describe how do you push a file from your local system to the GitHub repository using Git?
First, connect the local repository to your remote repository:
git remote add origin <<web address>>
git remote add origin https://github.com/ReviewNPrep/test.git
Second, push your file to the remote repository:
git push origin master
What is AWS CodeBuild?
AWS CodeBuild is a fully managed continuous integration service that compiles source code, runs tests, and produces software packages that are ready to deploy. With CodeBuild, developers don’t need to provision, manage, and scale their own build servers. You submit your build jobs to CodeBuild, and it runs them in temporary compute containers that are created fresh on every build and then discarded when finished.
What is Azure CodeBuild?
Azure provides 3 unique but separate services that are similar to AWS CodeBuild.
Azure Repos is a set of version control tools that you can use to manage your code. Azure Repos provides two types of version control:
Azure Artifacts enables developers to share and consume packages from different feeds and public registries. Packages can be shared within the same team, the same organization, and even publicly. Azure Artifacts supports multiple package types such as NuGet, npm, Python, Maven, and Universal Packages. You can add fully integrated package management to your continuous integration/continuous delivery (CI/CD) pipelines with a single click.
Azure Test Plans or the Test hub in Azure DevOps Server – Azure Test Plans provides rich and powerful tools everyone in the team can use to drive quality and collaboration throughout the development process. The easy-to-use, browser-based test management solution provides all the capabilities required for planned manual testing, user acceptance testing, exploratory testing, and gathering feedback from stakeholders.
How would you ensure that whatever changes a developer does, must get review and approve before the merging in the master repo?
Developers should create their own feature branch and a direct commit to master should be blocked. Once a developer is done with its change they can raise the pull request for merging the changes in to the master branch. Good practice is to do a code review from another team member; team member will review the code and approve it for merging in master branch.
What is self-hosted agent in Azure pipeline?
To build your code or deploy your software using Azure Pipelines, you need at least one agent. As you add more code and people, you’ll eventually need more.
When your pipeline runs, the system begins one or more jobs. An agent is computing infrastructure with installed agent software that runs one job at a time.
You choose to opt for self-hosted agents in Azure Pipelines when you want more control to install dependent software needed for your builds and deployments. Also, machine-level caches and configuration persist from run to run, which can boost speed.
What is the difference between Automation and Orchestration in DevOps?
Automation by itself can be considered as a single entity – setting up a single task to run on its own. Some examples are – launching a Virtual Machine, stopping a service.
Orchestration on the other hand is automating many tasks together. The goal of orchestration is to streamline and optimize frequent, repeatable processes. Some common examples are – managing many servers and applications, batch processing of transactions.
What is your understanding of DevSecOps?
DevSecOps stands for application development, security, and operations. The DevSecOps team is developed on the basis that every practice in an organization needs security measures. DevSecOps automates the integration of security at every phase of the software development lifecycle, from initial design through integration, testing, deployment, and software delivery. The team works together to understand business processes, look for weaknesses, and provide continuous monitoring and testing across multiple platforms. This framework addresses security issues as they emerge, when they’re easier, faster, and less expensive to fix.
DevSecOps integrates application and infrastructure security seamlessly into Agile and DevOps processes and tools. DevSecOps makes application and infrastructure security a shared responsibility of development, security, and IT operations teams, rather than the sole responsibility of a security silo.
What is the difference between Azure DevOps Services and Azure DevOps Server?
The cloud offering, Azure DevOps Services, provides a scalable, reliable, and globally available hosted service. It’s backed by a 99.9% SLA, monitored by our 24/7 operations team, and available in local data centers around the world.
The on-premises offering, Azure DevOps Server, is built on a SQL Server back end. Customers usually choose the on-premises version when they need their data to stay within their network. Or, when they want access to SQL Server reporting services that integrate with Azure DevOps Server data and tools.
Although both offerings provide the same essential services, compared with Azure DevOps Server, Azure DevOps Services offers the following added benefits:
- Simplified server management.
- Immediate access to the latest and greatest features
- Improved connectivity with remote sites.
- A transition from capital expenditures (servers and the like) to operational expenditures (subscriptions).
Is it possible to move the existing items from azure DevOps server to azure DevOps service?
Yes, one of the below approach could be used:
Manual copy – The source code and work items manually from the on-prem DevOps server to the cloud based azure DevOps service.
Azure Migration Tool – This is one of the best approaches. We can use data migration tool to do the migration. Details here.
Use Azure Marketplace Tools – Example here.
What is AWS CodeDeploy?
AWS CodeDeploy is a fully managed deployment service that automates software deployments to a variety of computing services such as Amazon EC2, AWS Fargate, AWS Lambda, and on-premises servers. Developers can use AWS CodeDeploy to automate software deployments, eliminating the need for error-prone manual operations. The service scales to match deployment needs.
What is AWS CodeStar?
AWS CodeStar is a cloud‑based development service that provides the tools you need to quickly develop, build, and deploy applications on AWS. With AWS CodeStar, you can set up your entire continuous delivery toolchain in minutes, allowing you to start releasing code faster.
CodeStar can be used for building web applications, web services and more. The applications run on Amazon EC2, AWS Elastic Beanstalk or AWS Lambda.
What is an organization in the Azure DevOps?
An organization is used to connect groups of related projects, helping to scale up an enterprise. You can use a personal Microsoft account, GitHub account, or a work or school account. Examples of this could be various departments within the company like sales, finance. We can also choose one organization for an entire company, or multiple organizations based on business units.
Can you give some examples of deployment strategies?
In-Place Deployments – In this strategy, the deployment is done line with the application on each instance in the deployment group is stopped, the latest application revision is installed, and the new version of the application is started and validated. You can use a load balancer so that each instance is deregistered during its deployment and then restored to service after the deployment is complete.
Blue/Green (Red/Black) Deployments – In this strategy the old and the new instances of the application run in parallel at the same time in production, and a load balancer switches traffic from the older version to the newer version instantly. Blue/green deployments help you minimize downtime during application updates mitigating risks surrounding downtime and rollback functionality. Blue/green deployments enable you to launch a new version of your application (green environment) alongside the old version (blue environment), and monitor and test the new version before you reroute traffic to it, rolling back on issue detection.
Canary Deployments – Traffic is shifted in two increments. A canary application deployment is a blue/green strategy that is more risk-averse, in which a phased approach is used. This can be two step or linear in which new application code is deployed and exposed for trial, and upon acceptance rolled out either to the rest of the environment or in a linear fashion.
Linear deployments – In this strategy traffic is shifted in equal increments with an equal number of minutes between each increment. You can choose from predefined linear options that specify the percentage of traffic shifted in each increment and the number of minutes between each increment.
All-at-once deployments – In this strategy all traffic is shifted from the original environment to the replacement environment all at once.
With so many cloud services offered by public cloud providers, it is easy to get lost in what and how of DevOps services. It is important to get the basics right before you understand the core services offered by these cloud computing companies.
Whether it is AWS DevOps interview or Azure, these DevOps questions will surely help you increase your confidence level when you meet with your potential employer. Even if you are not preparing for an interview, it is expected for all software engineers to understand these concepts.
Have questions? Participate in DevOps discussions on our Forums. Click here.