New batches starting this week Β· Limited seats

Azure DevOps Interview Questions and Answers 2026 (60 Questions)

60 commonly asked Azure DevOps interview questions, from fresher fundamentals to multi-stage YAML, extends templates, environments and checks, Managed DevOps Pools, workload identity federation, AKS and Terraform delivery, AI features and 12 real-world scenarios.

Azure DevOps interview questions and answers 2026 - Cloud Soft Solutions
Last updated Β· 44 min read Β· 9,679 words

These Azure DevOps interview questions start with the basics every fresher needs and go up to the pipeline design, security and incident questions asked of experienced engineers. Interviewers in 2026 care less about which button you click and more about whether you can write a correct multi-stage YAML pipeline, deploy without stored secrets, and explain what you would check when a release goes wrong. Every answer here reflects current Microsoft Learn documentation, including the newer pieces: Managed DevOps Pools, workload identity federation, GitHub Advanced Security for Azure DevOps and the Azure DevOps MCP Server.

How to use this guide

  • Freshers and trainees (0–1 year): learn Questions 1–13 well, then build one YAML pipeline yourself. Panels check whether you know the five services, CI vs CD, and the stage/job/step hierarchy.
  • Junior to mid-level DevOps engineers (1–4 years): Questions 14–35 cover the material that comes up most often: variables, templates, environments, agents, service connections, branch policies and Key Vault.
  • Senior and lead roles: Questions 36–48 cover architecture (.NET, Java, AKS, Bicep, Terraform, regulated approvals, template governance, and how Azure DevOps fits with GitHub). The 12 scenarios (49–60) are the part most panels use to tell candidates apart.
  • Answer with the direct answer, then the reason, then a trade-off. Only name tools you have used: panels follow up.

Contents

For freshers: Azure DevOps fundamentals

1. What is Azure DevOps, and what are its five core services?

Answer: Azure DevOps is Microsoft's set of services for planning, building, testing and shipping software. The five core services are:

  • Azure Boards: work tracking with backlogs, Kanban boards, sprints and queries.
  • Azure Repos: private Git repositories (plus the older centralised TFVC) with pull requests and branch policies.
  • Azure Pipelines: CI/CD for any language and any cloud. It also works with code hosted on GitHub.
  • Azure Test Plans: manual, exploratory and planned testing, with traceability back to work items.
  • Azure Artifacts: package feeds for NuGet, npm, Maven, Python and Universal Packages.

You can turn each service on or off per project, so a team can, for example, keep code in GitHub and use only Boards and Pipelines.

Interview tip: Freshers often stop at the list. Add one line on how the services connect: a work item is linked from a commit (AB#123 in GitHub, or a work item link in Azure Repos), a PR triggers a pipeline, and the pipeline publishes a package to Artifacts. That shows you understand the flow, not just the product names.

2. What is the difference between Azure DevOps Services and Azure DevOps Server?

Answer: Azure DevOps Services is the SaaS offering at dev.azure.com. Microsoft runs and updates it, and it is the only version with Microsoft-hosted agents. Azure DevOps Server (formerly Team Foundation Server) is the self-managed, on-premises product: you install it, patch it and run your own agents. Features usually reach Services first. Teams with strict data-location or air-gapped requirements still choose Server. When a Microsoft Learn page applies to only one of them, it shows a "Services" or "Server" version marker at the top.

3. How are organisations, projects and teams structured?

Answer: An organisation is the top-level container. It is linked to a Microsoft Entra ID tenant, and billing, parallel jobs and organisation-wide policies are set there. An organisation contains projects. A project is the boundary for repos, pipelines, boards, permissions and service connections. Inside a project, teams each get their own backlog, board and area path. Enterprises usually prefer a few large projects with many teams over hundreds of tiny projects, which are harder to govern.

4. What are CI, continuous delivery and continuous deployment, and how do they differ?

Answer: Continuous integration (CI) means every change merged to the shared branch is built and tested automatically, so integration problems show up within minutes. Continuous delivery means every change that passes the pipeline is always in a state where it can go to production, but a person or policy decides when it does. Continuous deployment goes one step further: every change that passes all automated checks goes to production with no manual step. In Azure Pipelines, the difference between delivery and deployment is usually just whether the production environment has an approval check.

Real-world example: Many bank and insurance teams practise continuous delivery to production with an approval gate, while running continuous deployment to dev and test environments.

5. What is a YAML pipeline, and what is the current status of classic pipelines?

Answer: A YAML pipeline is defined in a file (usually azure-pipelines.yml) stored in the repository. Because the file lives in the repo, it is versioned, reviewed in pull requests and branched along with the code. Classic pipelines are built in the web designer: classic build pipelines plus classic release pipelines, which use stages, pre- and post-deployment approvals and deployment groups.

Two facts to state carefully. First, since Sprint 226, new organisations have creation of classic build and release pipelines disabled by default, which partly addresses the security risk of YAML and classic pipelines sharing resources such as service connections. An administrator can switch it back on with the toggles in Organisation or Project settings, under Pipelines, Settings. Second, classic release pipelines are still documented and supported for existing users. They are not being removed, but all new work should go into multi-stage YAML.

Interview tip: The old "build pipeline vs release pipeline" question is really this one. In YAML, the build stage and the deployment stages live in one file.

6. Explain stages, jobs, steps and tasks.

Answer: A pipeline contains stages (logical phases such as Build, Test, DeployProd). A stage contains jobs. Each job runs on one agent (or agentless, as a server job). A job contains steps, which run in order on that agent. A step is either a script (script, bash, pwsh, powershell) or a task, which is a packaged, versioned action such as DotNetCoreCLI@2 or AzureWebApp@1. By default stages run one after another, while jobs inside a stage can run in parallel if enough agents are free. Files are not shared between jobs, because each job may get a different machine. You pass outputs forward with pipeline artifacts or output variables.

7. What pipeline triggers does Azure Pipelines support?

Answer:

  • CI trigger (trigger:): runs on pushes to the listed branches, with optional path filters.
  • PR trigger (pr:): runs for pull requests on GitHub or Bitbucket. For Azure Repos, PR validation is set up through a build validation branch policy, not the pr: keyword.
  • Scheduled trigger (schedules: with cron syntax): nightly builds and scans. Set always: true if it should run even when nothing has changed.
  • Pipeline resource trigger: runs when another pipeline completes, which is useful for splitting CI and CD into separate pipelines.
  • Manual / none (trigger: none): typical for release pipelines that should only run on demand.

8. What is an agent and an agent pool?

Answer: An agent is software running on a machine that connects to Azure Pipelines, picks up one job at a time and runs its steps. Agents are grouped into pools. Microsoft-hosted agents (the "Azure Pipelines" pool) give you a fresh VM for each job, and Microsoft manages the images. Self-hosted agents run on machines you manage, which you need for private network access, special tools or larger hardware. Between the two sit Virtual Machine Scale Set agents and Managed DevOps Pools (Question 28). Pipelines choose a pool with pool: vmImage: for hosted agents or pool: name: for your own.

9. What does Azure Repos offer, and how do pull requests work?

Answer: Azure Repos provides unlimited private Git repositories per project, plus Team Foundation Version Control (TFVC) for legacy centralised workflows. Git is the default and what interviewers expect you to use. A pull request proposes merging a source branch into a target branch. Reviewers comment on lines, vote (approve, approve with suggestions, wait for author, reject), and branch policies decide whether the merge is allowed. Completion options include merge commit, squash, rebase and fast-forward, or semi-linear merge. Admins can restrict which options are allowed.

Interview tip: Mention that a PR should be small, linked to a work item and validated by a build. For Git internals, see these Git interview questions.

10. Which branching strategy would you recommend and why?

Answer: For most teams practising CI/CD, trunk-based development: short-lived feature branches (hours to a couple of days) merged into main through PRs, with feature flags for unfinished work and release branches cut only when you must support several versions at once. GitFlow, with long-lived develop, release and hotfix branches, suits products with scheduled versioned releases, but it slows integration and creates merge pain. GitHub Flow is close to trunk-based. Whatever you choose, protect main with branch policies and make every release traceable to a commit SHA.

11. Explain Azure Boards work items, process templates and the epic/feature/story hierarchy.

Answer: Work items track work. Their types depend on the process the project uses:

  • Basic: Epic, Issue, Task. The simplest option.
  • Agile: Epic, Feature, User Story, Task, Bug.
  • Scrum: Epic, Feature, Product Backlog Item, Task, Bug, Impediment.
  • CMMI: Epic, Feature, Requirement, Task, plus Change Request, Review and Risk for formal processes.

An epic is a large business initiative that spans several sprints. A feature is a deliverable piece of functionality within it. A user story (or PBI) is small enough to finish in one sprint, which is a fixed-length iteration, typically one to four weeks. Organisations customise fields and states by creating an inherited process rather than editing the system processes.

12. What is Azure Test Plans, and how does exploratory testing fit in?

Answer: Azure Test Plans manages planned manual testing (test plans, suites and test cases with steps and expected results), runs those tests and records the results, and links failures to bugs and requirements for traceability. Exploratory testing, done through the Test & Feedback browser extension, lets a tester investigate the app freely while the tool captures screenshots, notes and steps, and creates bugs with that context. Planned testing needs a Basic + Test Plans access level (or an equivalent subscription), so check licensing before rolling it out.

13. What is Azure Artifacts, and what are upstream sources and feed views?

Answer: Azure Artifacts hosts package feeds (scoped to the organisation or a project) for NuGet, npm, Maven, Python, Cargo and Universal Packages. Upstream sources let one feed proxy public registries such as nuget.org or npmjs. The first time a package is pulled through the feed, a copy is saved, which keeps builds working if the public registry is unavailable and gives you one place to control what comes in. Views (@local, @prerelease, @release) let you promote a tested package version to consumers without republishing it.

Azure Pipelines and YAML

14. Write the outline of a multi-stage YAML pipeline for build and deploy.

Answer: One file, one build stage that publishes an artifact, then deployment stages that use deployment jobs bound to environments:

trigger:
  branches:
    include: [ main ]

pool:
  vmImage: ubuntu-latest

stages:
- stage: Build
  jobs:
  - job: Build
    steps:
    - script: dotnet publish -c Release -o out
    - publish: out
      artifact: app

- stage: DeployDev
  dependsOn: Build
  jobs:
  - deployment: Deploy
    environment: orders-dev
    strategy:
      runOnce:
        deploy:
          steps:
          - script: ls $(Pipeline.Workspace)/app

In a deployment job, the deploy hook downloads the current run's artifacts automatically into $(Pipeline.Workspace). A deployment job does not check out the repo unless you add checkout: self.

15. Explain the three variable syntaxes: $(var), ${{ variables.var }} and $[variables.var].

Answer:

  • Macro syntax $(var) is replaced at runtime, just before a task runs. Use it in task inputs and scripts. If the variable is not defined, the text stays as $(var), which is a common source of confusing errors.
  • Template expression ${{ variables.var }} is evaluated at compile time, when the YAML is expanded, before the run starts. Use it in templates, ${{ if }} conditions and parameters. Values set at runtime (such as output variables) are not available yet.
  • Runtime expression $[variables.var] is evaluated at runtime and is used for variable definitions and conditions. This is where you read output variables, for example $[dependencies.Build.outputs['setver.version']].

Interview tip: The usual follow-up is "why doesn't my ${{ if }} see the variable I set in a script?" The answer is that template expressions are resolved before any script has run.

16. What are variable groups and secure files in the Library?

Answer: A variable group is a named set of variables shared across pipelines, for example per-environment settings. You reference it with variables: - group: orders-prod. You can link a variable group to an Azure Key Vault so that its values are Key Vault secrets fetched at runtime. Secure files store certificates, provisioning profiles or keystores that are downloaded to the agent with the DownloadSecureFile@1 task and deleted after the job. Both are protected resources: they have their own security roles and can carry approvals and checks, and a pipeline must be authorised before it can use them.

17. How do templates with parameters work?

Answer: Templates are reusable YAML files for steps, jobs, stages or variables that a pipeline includes with template:. Typed parameters (string, number, boolean, object, stepList, jobList, stageList and others) make them safe to reuse. A typical pattern is a job template stored in a central repo:

# templates/dotnet-build.yml
parameters:
- name: project
  type: string
- name: runTests
  type: boolean
  default: true

steps:
- script: dotnet build ${{ parameters.project }} -c Release
- ${{ if eq(parameters.runTests, true) }}:
  - script: dotnet test ${{ parameters.project }}

Consumers reference it across repos with a repository resource: - template: templates/dotnet-build.yml@platform. Parameters are resolved at compile time, so you can use them to change the structure of the pipeline, not just values.

18. What is an extends template, and how does the "Required template" check enforce it?

Answer: An extends template defines the outer structure of the pipeline, and the consuming pipeline can only fill in the slots it exposes. That is how a platform team ensures, for example, that every pipeline runs a credential scan first and cannot change the pool. Combined with a Required template check on a protected resource (for example the production service connection), any pipeline that does not extend the approved template fails the check and cannot use that resource.

# azure-pipelines.yml in an app repo
resources:
  repositories:
  - repository: templates
    type: git
    name: Platform/pipeline-templates
    ref: refs/tags/v3

extends:
  template: secure-dotnet.yml@templates
  parameters:
    buildSteps:
    - script: dotnet build -c Release

Pinning ref to a tag (as Microsoft's own guidance suggests) is what protects consumers from breaking changes, as covered in Scenario 52.

19. What are environments, and which approvals and checks can you put on them?

Answer: An environment is a named deployment target (such as orders-prod) that records deployment history and can contain Kubernetes namespaces or VM resources. Checks are configured on the environment (and on other protected resources), not in YAML, so the pipeline author cannot remove them. Available checks include:

  • Approvals: named users or groups, a timeout, and an option to stop requesters from approving their own runs.
  • Branch control: only runs from refs/heads/main or release branches may deploy.
  • Business hours, Exclusive lock (one deployment at a time), Required template.
  • Invoke Azure Function / Invoke REST API (for example, check that a change request in the ITSM tool is approved), Query Azure Monitor alerts and Evaluate artifact (policy on container images).

Checks are evaluated when a stage that uses the resource is about to start, and the stage waits until all of them pass.

20. Explain deployment jobs and the runOnce, rolling and canary strategies.

Answer: A deployment job targets an environment and records history against it. Its strategy defines lifecycle hooks: preDeploy, deploy, routeTraffic, postRouteTraffic, and on: failure / on: success.

  • runOnce: every hook runs once. This is the most common strategy for App Service and AKS.
  • rolling: currently supported only for VM resources. It updates a batch of VMs at a time, with maxParallel controlling the batch size. This replaces most uses of classic deployment groups.
  • canary: increments: [10, 20] deploys to a small slice first, then a larger one, then promotes. It works with the KubernetesManifest@1 task, using $(strategy.action) and $(strategy.increment).
- deployment: DeployApi
  environment: orders-prod.orders
  strategy:
    canary:
      increments: [10, 20]
      deploy:
        steps:
        - task: KubernetesManifest@1
          inputs:
            action: $(strategy.action)
            strategy: $(strategy.name)
            percentage: $(strategy.increment)
            namespace: orders
            manifests: manifests/deploy.yml
      on:
        failure:
          steps:
          - script: echo rollback and alert

Blue-green on App Service is usually done with deployment slots instead (Question 36).

21. Pipeline artifacts vs Azure Artifacts: when do you use each, and how do you version them?

Answer: Pipeline artifacts (publish / download steps) pass build outputs between stages and runs of a pipeline: zips, manifests, Terraform plans. Azure Artifacts feeds hold packages that other teams consume, such as a shared NuGet library. Container images go to a registry such as Azure Container Registry.

For versioning: build once and promote the same artifact through every environment, never rebuilding for production. Give each build a unique, traceable version, for example SemVer from a tool such as GitVersion, or name: 1.4.$(Rev:r) in the pipeline. Tag images with the version or commit SHA, never only latest. Record the version in the deployment so you can answer "what is running in prod?" in one query.

22. How does pipeline caching work?

Answer: The Cache@2 task saves a folder at the end of a successful job and restores it in later runs whose key matches. Keys are made of strings and file hashes. When a lock file changes, the key changes and the cache is rebuilt. restoreKeys allow a partial match as a fallback.

variables:
  NUGET_PACKAGES: $(Pipeline.Workspace)/.nuget/packages

steps:
- task: Cache@2
  inputs:
    key: 'nuget | "$(Agent.OS)" | **/packages.lock.json'
    restoreKeys: |
      nuget | "$(Agent.OS)"
    path: $(NUGET_PACKAGES)
  displayName: Cache NuGet packages
- script: dotnet restore --locked-mode

Caching is for dependencies that are expensive to download (NuGet, npm, Maven .m2, pip), not for build outputs you pass to later stages. Use pipeline artifacts for those. Never cache anything containing secrets.

23. How do you publish test results and code coverage, and fail the build on test failures?

Answer: Test runners write results files (JUnit, NUnit, VSTest/TRX, xUnit or CTest), and PublishTestResults@2 uploads them to the run's Tests tab and Test Plans analytics. DotNetCoreCLI@2 with command: test publishes results by default. For coverage, generate Cobertura or JaCoCo output and publish it with PublishCodeCoverageResults@2.

- script: mvn -B verify
- task: PublishTestResults@2
  condition: succeededOrFailed()
  inputs:
    testResultsFormat: JUnit
    testResultsFiles: '**/TEST-*.xml'
    failTaskOnFailedTests: true

condition: succeededOrFailed() matters: without it, a failed test step skips the publish step and you lose the report exactly when you need it.

24. How do dependsOn, conditions and output variables work across jobs and stages?

Answer: dependsOn sets the order of stages and jobs and makes the graph explicit. Conditions such as succeeded(), failed(), always() or custom expressions decide whether something runs. To pass a value, set an output variable in a named step and read it downstream:

- stage: Build
  jobs:
  - job: Ver
    steps:
    - bash: |
        P="task.setvariable variable=ver;isOutput=true"
        echo "##vso[$P]1.4.2"
      name: sv

- stage: Deploy
  dependsOn: Build
  variables:
    appVer: $[stageDependencies.Build.Ver.outputs['sv.ver']]
  jobs:
  - job: Show
    steps:
    - script: echo $(appVer)

Within a stage you use dependencies.<job>.outputs[...]. Across stages you use stageDependencies.<stage>.<job>.outputs[...]. Deployment jobs add the lifecycle hook or resource name to the path.

25. What are pipeline resources: repositories, pipelines and containers?

Answer: The resources: block declares external inputs. repositories let you use templates or check out code from other Azure Repos, GitHub or Bitbucket repos (checkout: platform). pipelines consume artifacts from another pipeline, and can trigger on it, which cleanly separates a CI pipeline from a CD pipeline. containers define images used for container jobs (container: builder) or service containers such as a throwaway PostgreSQL for integration tests. Repository resources can carry their own checks, such as branch control.

Agents, service connections and security

26. What should you know about Microsoft-hosted agents?

Answer: Every job gets a fresh VM that is thrown away afterwards, so nothing carries over between jobs. Images are selected by label. Current labels include ubuntu-latest, ubuntu-24.04, windows-latest, windows-2025 and macOS-latest, and the labels behind -latest move over time, so pin a version for stability. Limits that matter in interviews: around 10 GB of free disk space, no larger machine sizes, no ExpressRoute or VPN into your network (traffic is over the public internet), and job time limits that depend on whether you use the free grant or paid parallel jobs. The number of parallel jobs you have bought limits how many hosted jobs run at once, which is the most common reason runs queue.

27. When do you need self-hosted agents, and how do capabilities and demands work?

Answer: Use self-hosted agents when jobs must reach private resources (a private AKS API server, an on-premises database, Key Vault behind a private endpoint), need licensed or heavy tooling, need more CPU, memory or disk, or benefit from warm caches. You install the agent, register it to a pool with an Entra or PAT-based configuration, and run it as a service. Each agent advertises capabilities (system ones such as OS, plus custom ones). Pipelines state demands, such as demands: - java -equals 17, and only matching agents pick up the job. The trade-off is that you now own patching, hardening, cleanup between jobs and capacity. A long-lived self-hosted agent that builds untrusted fork PRs is a real security risk.

28. Scale set agents vs Managed DevOps Pools: what is the difference?

Answer: Virtual Machine Scale Set agents are self-hosted agents on a VM scale set in your subscription that Azure DevOps scales up and down. You own the scale set and the image. Managed DevOps Pools is a fully managed Azure service, which Microsoft describes as an evolution of scale set agent pools. The VMs run in a Microsoft-managed subscription, while you configure the pool as an Azure resource (Microsoft.DevOpsInfrastructure). It supports custom images or images matching the hosted ones, VNet injection for private access, scaling up and down, agent state kept for up to seven days for cache hits, jobs of up to two days, an attached data disk, and Key Vault certificate retrieval through a managed identity. Pipelines reference it by pool name, like any self-hosted pool. Microsoft publishes a comparison and migration guide from scale set agents.

Interview tip: If asked "how do I get private network access without patching VMs myself?", Managed DevOps Pools with VNet injection is the current answer.

29. What is a service connection, and how do you secure one?

Answer: A service connection stores how a pipeline authenticates to an external system: Azure Resource Manager, a container registry, Kubernetes, GitHub, a generic endpoint and more. Tasks reference it by name (azureSubscription: sc-orders-prod), so credentials never appear in YAML. To secure it: scope it to the smallest Azure scope (a resource group, not the subscription), give its identity the least RBAC role it needs, do not select "Grant access permission to all pipelines" (authorise each pipeline instead), add approvals, branch control and required-template checks, and restrict who has the User and Administrator roles on it. Microsoft notes that Azure Resource Manager connections unused for 100 days may be disabled automatically.

30. How does workload identity federation (OIDC) work for Azure service connections?

Answer: With workload identity federation, Microsoft Entra ID trusts a token that Azure DevOps issues for a specific service connection, so no client secret or certificate is stored or rotated. You configure a federated credential on an app registration or a user-assigned managed identity. It matches the token's issuer and a subject identifier of the form sc://<org>/<project>/<connection-name>. At runtime the task exchanges the short-lived token for an Entra access token. Microsoft recommends this option for new Azure Resource Manager connections ("App registration (automatic)" or "Managed identity"). Existing secret-based connections that Azure DevOps created can be converted in place with a Convert action and reverted within seven days.

A 2026 detail worth knowing: for public-cloud workload identity federation connections, Azure DevOps is moving from its own issuer (vstoken.dev.azure.com, which retires on 1 July 2027) to the Microsoft Entra issuer, and new connections already use the Entra issuer by default.

31. How do you use Azure Key Vault secrets in a pipeline?

Answer: There are two ways. (1) Link a variable group to a Key Vault, so selected secrets become variables. (2) Use the AzureKeyVault@2 task, which fetches secrets during the job as secret variables:

- task: AzureKeyVault@2
  inputs:
    azureSubscription: sc-orders-prod
    KeyVaultName: kv-orders-prod
    SecretsFilter: 'SqlConn,ApiKey'
    RunAsPreJob: false
- script: ./migrate.sh
  env:
    SQL_CONN: $(SqlConn)

Key points: the service connection's identity needs read permission on secrets (for example the Key Vault Secrets User role under Azure RBAC). Fetch only the secrets you need instead of '*'. Secret variables are not passed to scripts as environment variables automatically, so you map them explicitly with env:, as shown. If the vault uses a private endpoint, Microsoft-hosted agents cannot reach it (see Scenario 60). Often the better design is for the application to read Key Vault at runtime with its own managed identity, so the pipeline never handles the secret at all.

32. Which branch policies would you set on main?

Answer: A minimum number of reviewers (and reset votes on new pushes), "requestors cannot approve their own changes" where your audit rules require it, linked work items, all comments resolved, build validation (the PR pipeline must pass, with an expiry so a stale result is re-run), status checks from external tools (for example a security scan), automatically included reviewers for sensitive paths (such as /infra/* requiring the platform team), and limits on merge types. Separately, restrict who can bypass policies or force-push. Bypass permissions are often granted far too widely.

Interview tip: Branch policies protect code. Environment checks protect deployments. A secure setup needs both, because a pipeline can still be run manually from a branch that never went through a PR (Scenario 51).

33. How do you harden Azure Pipelines against misuse?

Answer: A practical checklist:

  • Keep classic pipeline creation disabled. Use extends templates plus required-template checks on production resources.
  • Enable "Limit job authorization scope to current project" and "Protect access to repositories in YAML pipelines", so a pipeline's job token cannot reach every repo in the organisation.
  • Do not expose secrets to fork PR builds. Run untrusted PRs on Microsoft-hosted agents, not on agents inside your network.
  • Prefer workload identity federation over secrets. Scope service connections narrowly and authorise them per pipeline.
  • In templates, restrict logging commands (target: commands: restricted) and allowed settableVariables for steps that handle untrusted input.
  • Pin task and template versions. Disable Marketplace tasks you have not reviewed.
  • Stream the audit log to your SIEM.

For broader tooling questions, see these DevSecOps interview questions.

34. What is GitHub Advanced Security for Azure DevOps, and how is it sold now?

Answer: It brings GitHub's security scanning natively into Azure Repos: secret scanning with push protection (blocks a push that contains a credential), dependency scanning (vulnerable direct and transitive packages, using the GitHub Advisory Database) and code scanning with CodeQL. Results appear in the repo's Advanced Security tab and as PR annotations. Since mid-2025, new customers can buy it as two standalone products, GitHub Secret Protection for Azure DevOps and GitHub Code Security for Azure DevOps (dependency and code scanning), while existing customers can keep the bundled Advanced Security experience. Dependency and code scanning run through pipeline tasks such as AdvancedSecurity-Dependency-Scanning@1 or through default setup. Enabling the product alone does not run any scans.

35. What identity does a pipeline run as, and why does that matter?

Answer: Steps that call Azure DevOps itself (checkout, REST API calls with $(System.AccessToken), publishing to a feed) use a build service identity: either the project-scoped one or the project collection build service, depending on the job authorization scope setting. Its permissions decide which repos it can read, which feeds it can push to and whether it can tag commits. Calls to Azure use the service connection's identity instead. An "access denied" when pushing to a feed is fixed by granting the right build service identity a role, not by adding a personal access token.

If you would rather learn this through guided labs than documentation, Cloudsoft's Azure DevOps training in Hyderabad walks through multi-stage YAML, environments, workload identity federation and AKS deployments step by step, in the Ameerpet classroom or live online.

CI/CD architecture for .NET, Java, AKS and IaC

36. Design CI/CD for a .NET API to Azure App Service with zero-downtime releases.

Answer: Build and test once, publish a zip artifact, deploy to a staging slot, smoke-test it, then swap into production. A slot swap warms up the instances before switching traffic, and swapping back is your rollback. This is App Service's version of blue-green deployment.

- task: AzureWebApp@1
  inputs:
    azureSubscription: sc-orders-prod
    appType: webAppLinux
    appName: app-orders-prod
    package: $(Pipeline.Workspace)/app/*.zip
    deployToSlotOrASE: true
    resourceGroupName: rg-orders-prod
    slotName: staging
- script: ./smoke-test.sh $(stagingSlotUrl)
- task: AzureAppServiceManage@0
  inputs:
    azureSubscription: sc-orders-prod
    Action: Swap Slots
    WebAppName: app-orders-prod
    ResourceGroupName: rg-orders-prod
    SourceSlot: staging

Production consideration: Mark slot-specific settings (connection strings that must not move during a swap) as deployment slot settings. Database migrations must be backward-compatible, because both versions run at the same time during the swap.

37. How would you build and deliver a Java (Maven) service?

Answer: Use the Maven@4 task or mvn -B verify with a pinned JDK (through the JDK installer task, or an agent image that has it). Cache ~/.m2 with Cache@2, keyed on **/pom.xml, and set MAVEN_OPTS to point the local repository at the cached path. Publish JUnit results and JaCoCo coverage, and get dependencies through an Azure Artifacts feed with Maven Central as an upstream source. Deploy the jar to App Service (Java SE) or build a container image. Externalise configuration so the same artifact is promoted unchanged.

38. Describe a pipeline that builds a container and deploys it to AKS.

Answer: CI builds and pushes the image to ACR with Docker@2, tagged with the build ID or commit SHA, and publishes the manifests as an artifact. CD uses a deployment job against an environment that contains an AKS namespace resource, so the deployment is recorded and checked, and deploys with KubernetesManifest@1 (or Helm).

- task: Docker@2
  inputs:
    containerRegistry: sc-acr
    repository: orders-api
    command: buildAndPush
    Dockerfile: src/Dockerfile
    tags: $(Build.BuildId)

Production consideration: Let AKS pull from ACR through its managed identity (the AcrPull role) instead of image pull secrets where you can. For a private AKS cluster, the agent must have network access to the API server, which means a self-hosted agent or Managed DevOps Pool in a peered VNet. Many teams instead let CI update a Git repo and use Argo CD or Flux to apply it (GitOps). Compare the two in these GitOps interview questions, and for cluster depth see these Kubernetes interview questions.

39. How do you deploy Bicep from a pipeline safely?

Answer: Lint and build the Bicep in CI. Run what-if against the target and publish the output for reviewers. Then deploy in a later stage gated by an environment approval:

- task: AzureCLI@2
  inputs:
    azureSubscription: sc-orders-prod
    scriptType: bash
    scriptLocation: inlineScript
    inlineScript: |
      az deployment group what-if \
        -g rg-orders-prod -f infra/main.bicep \
        -p infra/prod.bicepparam

The deploy stage runs az deployment group create with the same files. Keep parameters per environment in .bicepparam files, use incremental mode, and use deployment stacks if you need deny-assignments and cleanup of managed resources. The service connection needs only the roles that the template's resources require.

40. How do you run Terraform from Azure Pipelines?

Answer: Store remote state in an Azure Storage backend (blob lease locking, versioning, restricted access). Run fmt, validate and plan -out=tfplan in one stage, publish the plan file as a pipeline artifact, and run apply tfplan in a separate deployment stage after approval, so production applies exactly what was reviewed. With a workload identity federation service connection, AzureCLI@2 with addSpnToEnvironment: true exposes servicePrincipalId, tenantId and idToken. Pass them to the azurerm provider as ARM_CLIENT_ID, ARM_TENANT_ID, ARM_OIDC_TOKEN and ARM_USE_OIDC=true (plus ARM_SUBSCRIPTION_ID), so no secret is stored. Marketplace Terraform tasks exist too. Check that the one you choose supports workload identity federation. Go deeper with these Terraform interview questions.

41. Design multi-stage approvals for a regulated release (for example, a bank).

Answer: Consider a bank whose auditors need proof that every production change was reviewed, tested and approved by someone other than the author:

PR (2 reviewers, build validation, scans)
        |
   Build once -> artifact v1.8.3 (SHA)
        |
   Dev  (auto)  -> Test (auto + tests)
        |
   UAT  (QA approval, business hours)
        |
   Prod (CAB check via REST API,
         approver != requester,
         branch control: main only,
         exclusive lock, required template)

Each stage uses a different environment and a different service connection scoped to that environment's subscription or resource group. The production checks live on the environment and the prod service connection, owned by a separate group from the developers. Evidence for auditors comes from the run history, approvals log, linked work items and deployment records, all available through the API.

42. How do you govern a shared template library used by hundreds of pipelines?

Answer: Treat it as a product. It lives in a dedicated repo with its own branch policies and CODEOWNER-style required reviewers. It uses SemVer tags (v3.2.0), and consumers pin ref: refs/tags/v3-style references, or exact tags for critical apps. A CHANGELOG and deprecation notices tell teams what is changing. The library's CI validates changes by running a set of sample consumer pipelines against the changed templates. Breaking changes go into a new major version, and old versions are supported for a published period. Typed parameters with values: lists catch misuse at compile time.

43. Azure DevOps vs GitHub: what is Microsoft's direction, and how would you advise a team?

Answer: State only what Microsoft has said publicly. Azure DevOps is not being retired, and it continues to get significant features (Managed DevOps Pools, GitHub Advanced Security for Azure DevOps, the remote MCP Server, Copilot code review for Azure Repos). At the same time, Microsoft has openly encouraged Azure DevOps customers to move repositories to GitHub to get the most from GitHub Copilot, while keeping Azure Boards and Azure Pipelines, and it has improved the Boards and Pipelines integrations with GitHub for that path. The AZ-400 certification itself expects experience with both.

Practical advice: a team already invested in Boards, Test Plans and complex release governance can keep them and still host code on GitHub. A new team starting fresh will often choose GitHub with GitHub Actions. Avoid running two CI systems for the same app without a clear owner. Compare with these GitHub Actions interview questions.

44. How do you measure delivery performance and pipeline health?

Answer: Track the four DORA measures: deployment frequency, lead time for changes, change failure rate and time to restore service. You can derive them from deployment records on environments, PR and commit timestamps, and incident work items. For pipeline health, track queue time (agent capacity), duration per stage, flaky test rate, pass rate on main and cache hit rates. Pipeline Analytics and the Test Analytics reports cover part of this. Use the numbers to find bottlenecks, not to rank engineers.

45. What is AZ-400, and how does it relate to Azure DevOps interviews?

Answer: AZ-400, Designing and Implementing Microsoft DevOps Solutions, is the exam for Microsoft Certified: DevOps Engineer Expert. To hold the expert certification you also need one of the listed associate prerequisites; the certification page currently lists Azure Administrator Associate or Azure Developer Associate. Microsoft has been retiring and replacing some associate exams, so check the official page for the current prerequisite list. The exam covers processes and communications, source control strategy, build and release pipelines, a security and compliance plan, and an instrumentation strategy, and it expects experience with both GitHub and Azure DevOps. AZ-400 interview questions are mostly the material in this guide. The certification helps get you shortlisted, but panels still test hands-on YAML and troubleshooting.

AI in Azure DevOps

46. Where does GitHub Copilot show up in Azure DevOps today?

Answer: Two integrations matter. (1) Azure Boards integration with GitHub Copilot (generally available since December 2025): you can send a work item to the Copilot coding agent, which works in a GitHub repository connected to the project and opens a draft pull request. You can choose the target branch, and the board card shows Copilot's progress. It requires code in GitHub with the Boards–GitHub connection set up. (2) GitHub Copilot code review for Azure Repos (in public preview as of August 2026): you can request an AI review on a pull request, or trigger one automatically through a branch policy, and Copilot leaves inline comments and suggestions. According to the announcement, it is billed through a linked Azure subscription. Preview features change, so check the current docs before relying on them.

Interview tip: Treat AI review as an extra reviewer that catches obvious issues. It does not replace the human reviewer that branch policies require.

47. What is the Azure DevOps MCP Server?

Answer: MCP, the Model Context Protocol, is an open protocol for connecting AI applications to tools and data (see what MCP is). The Azure DevOps MCP Server lets an AI assistant work with your Azure DevOps data: work items, pull requests, repos, pipelines, wikis and test plans. The remote, Microsoft-hosted server became generally available in August 2026 at https://mcp.dev.azure.com/{organization}. It uses Microsoft Entra authentication, so the organisation must be backed by Entra ID, and it works with supported clients such as VS Code with GitHub Copilot. The local server remains available for clients that cannot yet do the Entra OAuth flow. The assistant acts with the signed-in user's permissions, so least privilege still applies. For the protocol side, see these MCP interview questions.

48. What are the limits and guardrails for using AI in a delivery pipeline?

Answer: AI is useful for drafting YAML, explaining a failed log, summarising a PR or proposing a fix for a vulnerable dependency, but the output can be wrong. It may use outdated task versions or invent inputs that do not exist. Guardrails: AI-authored pipeline or IaC changes go through the same PR, build validation and required template as human ones. Do not paste secrets or customer data into prompts. Give agents connected through MCP read-only or narrowly scoped access. Keep deployment approvals human for production. Record which changes were AI-assisted if your audit rules ask for it. More on this in AI coding assistants in the enterprise and CI/CD for AI applications.

Real-world scenarios

49. Your pipeline sits at "waiting for an available agent" for 40 minutes. What do you do?

Answer: Queueing almost always means one of four things: no free parallel job, no online agent whose capabilities match the job's demands, the pipeline lacks permission to the pool, or the run is actually waiting on a check rather than an agent.

What I would check:

  1. The run summary. Is it blocked on "needs permission" or a pending approval or exclusive lock, rather than on an agent?
  2. Organisation settings, Parallel jobs: are all hosted or self-hosted slots in use by other runs?
  3. The pool's agents tab: are agents online, enabled and idle? For scale set agents or Managed DevOps Pools, check the scaling settings and whether provisioning is failing (image, quota, subnet IP exhaustion).
  4. Demands vs capabilities: did someone add a demands line, or change vmImage to a retired label?
  5. The Azure DevOps status page for hosted-agent incidents.

Production consideration: Watch queue time as a metric, set standby agents for peak hours, and give release pipelines their own pool so a burst of PR builds cannot block a production hotfix.

50. Deployments fail with "AADSTS7000222: the provided client secret keys are expired". How do you fix it and prevent it happening again?

Answer: The service connection's app registration secret has expired. The fast fix is to rotate the secret. The proper fix is to convert the connection to workload identity federation, which removes the secret entirely. Azure DevOps even offers a convert option for connections with an expired secret.

What I would check:

  1. Whether Azure DevOps created the connection automatically and only one project uses it. If so, use Convert (revert is possible within seven days).
  2. For manually created or cross-project connections, add a federated credential on the app registration or managed identity, and update the connection manually.
  3. Whether any Marketplace tasks the pipeline uses support workload identity federation.
  4. Every other secret-based connection in the organisation. Find them with the REST API or the conversion script, and convert them in bulk.
  5. Whether the connection was also disabled for being unused for 100 days, which shows a different error.

Production consideration: Until everything is converted, alert on app-registration secret expiry well in advance, so this never surprises you during a release.

51. A developer deployed to production without any approval. How did that happen, and how do you close the gap?

Answer: Typical causes: the approval was written as a YAML step or a manual-validation task the developer could edit, rather than as a check on the environment. Or the pipeline deployed using the production service connection from a job that did not target the protected environment. Or a classic release was used. Or the developer approved their own run. Or someone with bypass rights pushed straight to main.

What I would check:

  1. The run's audit trail: which stage, environment and service connection were used, and who approved.
  2. Whether the production service connection itself has approvals, branch control and a required template, not just the environment.
  3. Pipeline authorisation on the prod connection. "Grant access to all pipelines" should be off.
  4. Whether the approver was allowed to approve their own run.
  5. Whether classic pipelines are still enabled in the project.

Production consideration: Put controls on the resources (environment plus service connection), owned by a group the developers are not part of, and review the audit log for check changes.

52. A change to a shared template broke 50 pipelines overnight. What do you do now, and what do you change?

Answer: First stop the damage: revert the template commit (or move the tag back to the previous commit if consumers follow a moving tag), and re-run the failed pipelines. The real cause is usually that consumers referenced the template's default branch.

What I would check:

  1. How the consumers reference the template: no ref (the default branch), a branch, or a tag.
  2. What exactly broke: a renamed parameter, a changed default, a new required parameter, or a task version bump.
  3. Why template CI did not catch it. Were there no sample consumer pipelines?
  4. Which of the 50 pipelines were release-critical, so they can be fixed first.

Production consideration: Use SemVer tags, require consumers to pin them, keep changes backward-compatible within a major version, run canary consumers in template CI, and publish a changelog. Roll a new major version out to a few teams first.

53. A flaky integration test blocks the PR gate several times a day, and developers keep re-running it. How do you handle it?

Answer: Re-running until it passes hides real failures. Measure the flakiness, quarantine the test with an owner and a deadline, and fix the cause (timing, shared state, test order, an external dependency).

What I would check:

  1. Test Analytics: failure rate and pattern by test, branch and agent.
  2. Whether flaky test detection is turned on in the project's test management settings, so known flaky failures are flagged.
  3. Whether the test uses a shared database or calls a real third-party API, which should become service containers or stubs.
  4. Agent differences: does it fail only on one pool or image?

Production consideration: Move the quarantined test to a nightly job so it keeps running without blocking PRs. Use retryCountOnTaskFailure only as a short stopgap, never as the fix. Track the number of quarantined tests so it does not keep growing.

54. A secret appeared in plain text in a pipeline log. What do you do?

Answer: Treat it as compromised: rotate the secret immediately, then clean up and find the cause. Azure Pipelines masks values it knows are secret, but it cannot mask a value that was never marked secret, a transformed value (base64 encoded, split, or part of a JSON blob), or something a tool printed in debug mode.

What I would check:

  1. Where it came from: a plain (non-secret) variable, set -x or verbose logging, a script that echoed it, or a value set at runtime without issecret=true.
  2. Who could read the logs and the artifacts, and whether the log was forwarded to other systems.
  3. Deleting the affected runs or logs according to your retention and incident policy, after capturing evidence.
  4. Whether secret scanning with push protection is on, in case the same value was also committed.

Production consideration: Mark runtime secrets with ##vso[task.setvariable variable=token;issecret=true], map secrets into scripts through env:, avoid printing commands in scripts that handle secrets, and remove the secret altogether where workload identity federation or managed identity can replace it.

55. A build passes on the old self-hosted agent but fails on Microsoft-hosted agents with "No space left on device". What now?

Answer: Hosted agents have only about 10 GB free, and the old agent was hiding the problem with a large disk and leftover tools.

What I would check:

  1. What is using the space: a full-history clone (set fetchDepth), large Docker base images, unneeded SDKs, or huge test outputs.
  2. Whether the job can be split, or whether build outputs can be cleaned up between steps.
  3. Undeclared tool dependencies the old agent had preinstalled. Compare against the image's software list.

Production consideration: If the workload genuinely needs more disk or CPU, Managed DevOps Pools with a larger SKU or an attached data disk avoids patching VMs yourself.

56. The AKS deployment stage was green, but the new version is returning 5xx errors. How do you respond?

Answer: Restore service first: roll back to the previous image (kubectl rollout undo, a Helm rollback, or redeploying the last good artifact through the pipeline). Then work out why the pipeline did not catch it.

What I would check:

  1. Did the deploy step wait for the rollout? Readiness and liveness probes, and rollout status.
  2. Config differences: a missing secret or ConfigMap, a changed environment variable, an incompatible database migration.
  3. Whether a post-deploy check existed. Add a postRouteTraffic health check, or a canary with Azure Monitor alert checks.

Production consideration: Use canary or progressive delivery for critical services, define automatic rollback criteria, and make rollback a tested pipeline path rather than a manual command run under pressure.

57. Terraform apply in the pipeline fails with "Error acquiring the state lock". What do you do?

Answer: Another run, or a cancelled one, still holds the blob lease on the state file. Do not force-unlock until you are sure no apply is running.

What I would check:

  1. Whether another pipeline run or an engineer's laptop is applying to the same state. Add an exclusive lock check on the environment to stop concurrent runs.
  2. Whether a cancelled job left the lease behind. Read the lock ID in the error, then run terraform force-unlock once you have confirmed it is stale.
  3. Whether the state is split sensibly. One huge state file shared by many teams causes contention.

Production consideration: Only the pipeline identity should have write access to production state, and versioning on the storage container lets you recover from a bad write.

58. PR validation takes 35 minutes and developers are complaining. How do you speed it up?

Answer: Profile before optimising. The run timeline shows where the time goes.

What I would check:

  1. Queue time vs run time. If queueing dominates, you need agent capacity, not YAML changes.
  2. Dependency restore: add Cache@2 for NuGet, npm or Maven, and use an Artifacts feed close to the agents.
  3. Work that does not belong in PR validation: full end-to-end suites, image scans of unchanged services, or packaging that only release needs.
  4. Monorepo layout: use path filters in the build validation policy so each service's pipeline runs only when its folder changes.
  5. Parallelism: split tests across jobs, run independent jobs side by side, and use shallow fetch.

Production consideration: Agree a target for PR feedback time with the team, and move slow suites to a post-merge or nightly pipeline that still blocks the release.

59. You must migrate 40 classic release pipelines to YAML. How do you plan it?

Answer: This is a migration project, not a copy-paste job. Inventory the pipelines, group them by pattern, build a small set of extends templates that cover those patterns, then migrate one group at a time with a parallel run.

What I would check:

  1. What each classic release relies on: pre- and post-deployment approvals, gates, deployment groups, variable groups, artifact sources from Jenkins or other systems.
  2. The mapping: stages become YAML stages, approvals and gates become environment checks, deployment groups become environments with VM resources (rolling strategy), and artifact sources become pipeline resources.
  3. Which pipelines are business-critical, so the low-risk ones go first as pilots.
  4. Whether the "Export to YAML" option in the classic build editor helps. It covers builds only, and the output still needs cleanup.

Production consideration: Keep the classic pipeline disabled but available for one release cycle as a fallback, then remove it and turn off classic creation for the project.

60. After security put Key Vault behind a private endpoint, the AzureKeyVault task fails with "Public network access is disabled". What do you do?

Answer: Microsoft-hosted agents reach Azure over the public internet and cannot join your VNet, so they can no longer reach the vault. Re-enabling public access would undo the security control, so that is not the answer.

What I would check:

  1. Whether the jobs that need the vault can run on agents with private network access: a Managed DevOps Pool with VNet injection, or self-hosted agents in a peered VNet.
  2. DNS: the agent subnet must resolve the vault name to the private IP (a private DNS zone linked to the VNet).
  3. RBAC: the service connection identity still needs read access to secrets once the network path works.
  4. Whether the pipeline needs the secret at all, or whether the app can read it at runtime with its managed identity.

Production consideration: Plan the agent network design together with the platform's private endpoint rollout, because the same issue affects private ACR, storage accounts holding Terraform state and private AKS clusters.

Key takeaways

  • Freshers should know the five services, CI vs CD, and the stage/job/step/task hierarchy without notes, and be able to explain how a work item, PR, pipeline and artifact connect.
  • New organisations default to YAML-only. Learn multi-stage YAML, the three variable syntaxes and templates with typed parameters.
  • Put production controls on resources (environments, service connections) as approvals and checks, combined with extends templates and the Required template check.
  • Workload identity federation is Microsoft's recommended way to authenticate Azure service connections. Expired-secret outages are a solved problem once connections are converted.
  • Know the agent options: Microsoft-hosted, self-hosted, scale set agents and Managed DevOps Pools, and which one gives private network access.
  • Build once, version clearly, promote the same artifact, and keep a tested rollback path.
  • AI features (Copilot with Boards, Copilot code review for Azure Repos, the Azure DevOps MCP Server) are useful but stay behind the same review and approval gates as everything else.

Interview preparation checklist

  • Create a free Azure DevOps organisation and project. Set up Boards with the Agile process and link commits to work items.
  • Write a multi-stage YAML pipeline (build, test, dev, prod) for a small .NET or Java API, with published test results and coverage.
  • Add Cache@2 and measure the before and after durations.
  • Create environments with an approval, branch control and exclusive lock. Try to deploy from a feature branch and watch the check block it.
  • Create an Azure Resource Manager service connection with workload identity federation, scoped to one resource group.
  • Read a secret from Key Vault with AzureKeyVault@2 and map it through env:. Confirm it is masked in the log.
  • Move your steps into a template repo, pin it with a tag, and use extends.
  • Deploy a container to AKS (or App Service with slots) and practise a rollback.
  • Run a Bicep what-if or a Terraform plan-then-apply flow behind an approval.
  • Prepare two incident stories using the scenario format above: symptom, what you checked, fix, prevention.
  • If you are going for AZ-400, read the current skills outline on Microsoft Learn and take the free practice assessment.

FAQ

What skills are required for an Azure DevOps engineer role?

Git and branching, YAML pipelines, at least one application stack (.NET, Java, Node or Python), Azure fundamentals (identity, networking, App Service, AKS), infrastructure as code with Bicep or Terraform, scripting in Bash or PowerShell, and pipeline security practices such as service connections, Key Vault and branch policies.

Are these Azure DevOps interview questions suitable for freshers?

Yes. The "For freshers" section covers what entry-level panels usually ask, and the later sections show how the same topics are tested at experienced level. Freshers should master Questions 1 to 13 and be able to show one working pipeline.

How should I prepare for an Azure DevOps interview in 2026?

Build one end-to-end project: a YAML pipeline that builds, tests and deploys an app to Azure with environments, approvals and workload identity federation. Then practise explaining the scenario questions aloud, including what you would check and how you would prevent a repeat.

Is Azure DevOps still worth learning when GitHub is growing?

Yes. Microsoft continues to invest in Azure DevOps and many enterprises run Boards and Pipelines at scale, often alongside GitHub repositories. The concepts transfer directly to GitHub Actions, so learning both is a sensible plan.

Do I need the AZ-400 certification to get an Azure DevOps job?

It is not mandatory. AZ-400 can help your resume get shortlisted, but interviews focus on hands-on YAML, security and troubleshooting. Check the official Microsoft Learn page for the current exam outline and prerequisites.

Should I learn classic pipelines or YAML pipelines?

Learn YAML pipelines first, because new organisations have classic pipeline creation disabled by default. Know enough about classic release pipelines to maintain or migrate the ones many enterprises still run.

What programming or scripting knowledge does Azure DevOps need?

You should read and debug the application build for your stack, write Bash or PowerShell for pipeline scripts, and be comfortable with YAML and JSON. Python helps for automation and REST API work.

What projects should I show in an Azure DevOps interview?

A multi-stage pipeline deploying a containerised API to AKS or App Service, an infrastructure pipeline with plan or what-if behind an approval, and a reusable template repository. Explain the design decisions, not just the YAML.

Ready to practise this hands-on with a trainer reviewing your pipelines? Cloudsoft's Azure DevOps course covers Boards, Repos, multi-stage YAML, environments, Key Vault, AKS and Terraform with real labs, plus mock interviews based on scenarios like the ones above. It runs in Ameerpet, beside the Metro station, and live online; call +91 96660 19191 for a free demo. If you want a broader programme that combines cloud and DevOps with AI, ML and security, look at the APEX AI, ML, Cloud and Cyber Security program.

New Β· AI Career Guide

Meet Aanya β€” ask anything about courses, fees & placement

Instant answers from verified Cloudsoft info β€” courses, fees, formats, placement support and free demos. Available 24/7, right here on the site.

How Aanya works β†’
Share𝕏infβœ‰
EnrollWhatsAppCall us