>> So we're here at Microsoft Build 2019 in Seattle.
I'm Anisha Pindoria, Senior Program Manager in Azure DevOps Team.
On stage with me, we've got Gopi.
Gopi, do you want to introduce yourself
and tell us what you work on.
>> I am Gopinath, I'm Group Program Manager in Azure DevOps Team.
I primarily on Azure Pipelines,
and inside Azure pipelines,
I take care of all the continuous delivery
and deployments to Azure.
>> Cool, wow. So this week,
there have been quite a lot of announcements
that Azure DevOps has announced during the Keynote,
especially in Azure Pipelines, correct?
So I would love to dig a little bit
deep into some of these announcements like the YAML CI/CD,
improvements that we've made,
as well as the Kubernetes deployments as well.
So let's just crack on,
let's just get started with YAML Pipelines.
So tell me a little bit more about
the improvements we've made there and why have we done this.
>> Okay. So we actually shipped YAML-based,
the CI solution nine months ago,
and one of the key feedback we have been getting is,
how do I do CD using YAML?
Because if I'm having YAML Solution,
I can just check in my entire build process,
deployment process into the source repo,
and it can just continuously go through
the same application process for me to do your PR,
anytime there is a changed process that needs to be done.
This is lot more compliant,
and we had significant request for supporting YAML-based, the CD.
Now, when we looked at what is the right way to do,
we just looked at YAML CI,
how do I just extend it
appropriately to single stage, to multistage.
That's the word that we have. That's what we have announced it.
>> Great.
>> Along with this,
one of the stuff we were looking is,
how do we just optimize this YAML Pipeline for Kubernetes?
So those are the two big features that
we have announced in the Keynote.
>> Right. So you mentioned Kubernetes,
those folks that don't know what Kubernetes is,
I would love to just get a quick overview,
maybe in a nutshell around what Kubernetes is.
>> I think one other stuff as part of the digital transformation,
everybody is trying to migrate
their existing solutions to Container-based solution.
Because Container use isolation that is
needed for people to execute it easily.
Also, it is an easy artifact that can be
transformed and then deployed to any environment.
Now, once the people started using Containers,
they started having lot more Containers.
Now, how do I manage these Containers?
Multiple Container image that gets generated,
that get run, how do I manage it?
Then Kubernetes was born to orchestrate
on the Container images and then run them appropriately.
>> Okay.
>> So what we are trying to do is,
Microsoft itself and Azure, there is AKS.
AKS is Azure Kubernetes Service.
So as part of the YAML Pipeline,
when we were building our multistage solution,
we were looking how do we optimize this solution
starting with any Kubernetes solution?
That's where we started.
>> Okay, that makes sense. So all of
this sounds fantastic and I'm just dying
to see a demo on how do you
get started with YAML CI/CD with Kubernetes.
So can you just show us how to get started?
>> Yeah. Awesome, okay.
>> Great.
>> So this is my GitHub repo,
and you can just see that
this is a Node.js application that is available.
There is the Docker file that is there.
I'm just opening the Docker file so that you can see it.
Very simple repo, I'm just pulling in and I'll open image,
and I'm doing NPM install,
I'm running NPM test.
You can also see that I'm actually exposing a port called 3000,
and I'll explain you more about why,
I'm just telling you this at later point.
But a simple Node.js
application that is available, what I will do is,
how do I take this application,
and I know this is a Container application,
and automatically build, deploy to Kubernetes?
One of the problem that I'm hearing from
customers is Kubernetes have lots of concepts.
Now, do people need to understand
those concepts when they're configuring pipeline?
We are trying to make it super easy
for customers who already know about pipelines are,
who already know about their application and containerize.
Without understanding any of the Kubernetes concepts
in less than two minutes with four steps,
just take it all the way to any Kubernetes cluster.
>> Wow.
>> That's what I would like to show.
>> Wow, cool. Let's do it.
>> So now I'll just switch to Azure Pipelines.
What I've shown you was GitHub,
and then that repository can be in GitHub,
or it can be in Azure repos,
or it can be in SVN, it does not matter.
You bring your Container-based application to Azure Pipelines,
we will provide this wizard which will
take you to deploy it to any Kubernetes cluster.
We have today optimized it for Azure.
>> That's nice.
>> So same repo that I have shown is showing up here.
I select that repo.
Now what we are doing is,
we are actually analyze that application.
Now based on that analysis, as I said,
it is a Node.js application,
we actually suggest you only the
Node.js templates that are relevant to you.
If it is a.Net, then you will get only the.Net-based templates.
We have this intelligent that is built into it,
where we will analyze the code repo and then
bring you what's more relevant to you.
In addition to that, on the top,
you can see that I'm suggesting you,
"Hey, do you just want to do Docker CI?
Or do you want to do Docker CI and CD as well?"
So this is the recommended template,
and those are the ones that will just bubble up.
If I don't have the Docker file in my repo,
then you can just use any of these.
If you have Docker file,
then we optimize and then say,
"Do just want to do CI and we want to
take it all the way to the Kubernetes Service?"
So in this particular case,
I would like to take it to the Kubernetes Service.
So I just select this template,
then we ask you which subscription that you want to use.
Based on the subscription, literally,
we asked you three more inputs
before we generate everything that is needed for you.
Which cluster do you want me to deploy it to?
I have a cluster that is already available and it asks me,
"Do you want to create a new namespace or an existing namespace?"
and "Tell me where should I push the image?"
The reason why we take the Container Registry is,
we take the image, we build the image,
we push it into this Container Registry,
it'll be available at later point anytime for you to refer.
We also established connection
between this registry and the AKS cluster.
So any time that image got updated,
it'll get pushed to the AKS registry.
I think that's it. Those are
the only three inputs that you need to do.
No more inputs needed.
>> This is it?
>> That's it.
>> Wow. That's pretty nice,
and it's so simple and easy, right?
>> You can actually see the service port.
Now, this is the port that I showed you in the Docker file.
We actually not only just identified what kind of
application that is Node.js because we find Docker file.
We actually inspected the Docker file,
and then some of the contents we are showing you.
Now what we do is when I actually
click on "Validate" and "Configure",
when it creates the Kubernetes cluster
and insert the Kubernetes cluster,
all the files that get generated appropriately,
we will tie into the port of 3000 to
this port so that it can be accessed outside [inaudible].
So what did this do?
As part of this, this is what we
call it as a multi-stage pipeline.
So you can see that it generated
this YAML file automatically to you.
You don't need to spend time figuring it out,
"What all I need to do, the YAML?"
"How does the YAML syntax will look like?"
We will generate the basic YAML file.
There are two stages that exist.
That's the reason we are calling it as multi-stage pipeline.
Until now, in the YAML CI,
you always will just doing only build with any number of jobs.
>> Yeah.
>> But now you can do build and deploy.
You can see in this basic template,
two stages, but you can have any number of stages.
You can just do build,
you can deploy it to your first set of customers,
you can deploy it to your second set of customers.
So you can build multiple stages that are needed into it.
>> So this is all generated for you?
>> This is all generated for you.
>> You don't need to make any changes, anything like that?
>> You don't need to-
>> Would you need to ever make changes?
>> No.
>> Okay.
>> You don't need to do any changes.
The same thing will work as is for you.
What we are doing inside this is,
you can see that I'm just doing a Docker build and push.
After that, I'm just publishing
some of the artifacts that are needed.
I'm downloading the artifacts
here and I'm running the Kubernetes task to
pick that build image and deploy it to cluster.
Let me click "Save" and "Run".
Now, when I we click on "Save" and "Run",
here you choose some more magic.
The first file I showed you was the pipelines,
that YAML that we generated.
>> Yeah.
>> We also generated two other files.
These are Kubernetes manifests files.
>> Okay.
>> So this is where we are trying to teach you saying that,
you don't need to learn about the Kubernetes concepts,
but we generate these two files and then these two files are
available in your source repo once I commit and run.
Then, if you want to do any modifications at later point,
whenever you learn more about Kubernetes,
then you can actually just go change those files.
So scale up, scale down,
and anything that is needed.
>> So you make it really simple,
really easy for us to just pick it up and go.
>> Yes.
>> Okay.
>> Less than two minutes, four steps, done.
Now, here it is executing the multi-stage pipeline.
While it is executing,
we also updated entire our Azure Pipelines UI.
You can actually, just to see that, if I click on it,
it tells me live progress on what's happening in the build.
Now it is actually building the image,
now as part of the details,
I'm just pushing the image.
Once I pull the image,
push the image, and then build everything,
and then once it is done,
it will publish the pipeline artifacts.
In the meanwhile, let me just show you a few more in the new UI.
It can actually just tells you that which repo it is coming from.
>> Okay.
>> This is the repository that we have selected, which branch.
It also tells you the code.
What timestamp my code has taken in?
If I actually just right click and then open in a new link tab,
it'll directly take you to your code repo that is available.
>> Right.
>> So all of these built-in and available.
Instead of waiting for it to complete,
I'll just show you the one that is completed.
So you can actually just to see
the exact same things, master repo.
If you have tests that are ran,
we will automatically detect all the tests.
If you see in the pipeline,
I have never defined saying that,
"Hey, run the test and upload."
If the tests are ran,
we will automatically detect and then upload all the test.
If I click on the test,
it'll show you a nice report.
In my case, everything is passing.
But if you have failures, it'll highlight,
it'll show you the code,
and already showing you the two stages that I talked about.
One was the build stage,
second one was the deploy stage.
The deploy job is actually downloading the artifacts,
and then it is deploying you to the Kubernetes cluster that exist.
>> The UI changes that you've made,
it just makes things so much more easier
to understand and read straight away, right?
>> Yes.
>> Yeah.
>> Right. So that's the end-to-end
of YAML-based pipelines that we have created.
We had CI only,
and here is how we expanded it to CD as well.
>> Right. I saw a little bit about environments,
can you tell me more about environments with Kubernetes?
>> Okay. So let me just switch back.
So what it does in this case is,
you can see that there are three tabs that are there.
One is the task tab, and then the environments tab.
So environment is a new concept
that we are introducing into the pipeline.
So until now, we used to call
our product as developers, DevOps product.
But most of the stuff for the optimized for developers,
first time now Ops guys get to see and get to control.
So as part of the Pipeline,
we actually created a object called Environments Object.
>> Okay.
>> Now, this Environment Object has its own security permissions,
it has its own retention periods that users can set.
Now, if I click on this "View Environment",
it'll just now take me to the full Environment Object.
Because the product that we deployed was a Kubernetes one,
it now shows me on
the Kubernetes resources that are involved in there.
>> Fantastic.
>> If I just to show you the deployments,
if I click on the job that it's deployed to,
it shows me what all commits that are involved.
So one of the key questions of,
because this is the first pipeline that we have setup,
so it just shows me all the commits that are there,
not just the commits,
it also shows you if you have associated with the work items.
>> Okay.
>> The work items can come from GitHub issues,
or it can come from Azure Boards.
Now, how is this helping?
I think there are two key scenarios that I'll tell you.
I think today one of the problem that the developers have is,
"Is my commit made it to the East US region deployment?"
Now, they don't need to ask this question to anybody,
they can go to this environment.
Assume this is their production environment that is there,
they can run the latest job that is there,
click on it, go to the "Commits",
and then they will really see right there,
if their commit is, sorry.
Let me just click it again,
I just pressed the back button.
Go to the "Environment",
go to this "Deployments" tab,
go to the "Job",
click on the "Commits".
In this particular case, it's all mine.
But if my commit is showing up,
that means it has reached the
customer region that you are looking for.
>> Right, okay.
>> That's one scenario.
The second scenario is for Release Managers.
Most of the times, they go back and forth saying that,
"Hey, is your feature checked in?"
"Is your bug checked in?"
"Does your features reached the customers?"
They can literally take,
here I have only one list,
assume a list of items that are available.
They can just look at this list of items and then
publish the release notes more easily.
>> Perfect. That's it?
>> That's the key environment concept.
But I'll now get into more magic of
what I will do with respect to the Kubernetes as well.
>> Okay.
>> If I just to click on the "Resources",
you can actually see the "payments" here.
I click on the "payments",
now it actually shows me what is
running inside the Kubernetes cluster.
Here are the services that we just got deployed,
it tells me the health of the ports that are running,
and I can actually drill deeper into each of the ports.
For each of the ports,
I can look at the logs that are running.
In this case, it is a successful one, so there is not much.
Assume if there are failures,
it'll tell you to debug the failures more easier.
It will tell you what exactly is
the Kubernetes YAML that is getting deployed onto this as well.
So from Ops perspective, on the DevOps perspective,
we are bringing them very close together
so that you can actually see from application perspective,
what changes you have done.
In addition to that, what deployment that you
have done and how exactly you deployment is performing here.
>> Right. Perfect. So we're a little bit short on
time but I've got a couple more things
that I would love to just ask you.
When is all of this going to be available?
Because I'm dying to get my hands on that.
>> Yeah. So I think it'll be just enabled this to everybody.
I think it is rolling out by Friday.
>> Okay.
>> All of this features should be available to everyone.
If you guys just to go click on "Preview Features",
you will find multi-stage pipelines.
By end of this week, it should be available.
You opt into this,
you will get all the feature.
>> Fantastic. I mean,
so much stuff has come out this week from Azure Pipelines.
I mean, all of this is stuff exciting,
but what's next in Pipelines?
>> There are a few more features that we are
working on based on the customer request.
One is about the YAML-based pipelines
are helping them meet the compliance requirements,
but they are saying, "How do I just do approvals inside it?"
>> Yeah.
>> So we are trying to get the approvals inside it,
and the environment that I've shown you
is optimized today for Kubernetes.
We want to make it available for VMs and other resources,
and we are also working on multiple artifacts.
How do I just consume
any artifact into this YAML Pipeline and take it forward?
>> Okay, fantastic. Well, I mean,
we just covered just a tip
of everything that we've announced here.
But everyone can find everything on
our DevOps Blog by going to aka.msdevopsblog,
and you'll find all of the announcements that we've
made this week for Azure DevOps,
including Azure Pipelines, and check out [inaudible] page
if you want to get started
and just get going with everything. Thanks again, Gopi.
>> Thank you.
>> Really appreciate your time.
>> Thank you.
[MUSIC]