 Hello and welcome everybody. Thanks for joining. My name is Sergei Kabashnuk. This is Mikhail Walla. We are with headers and today we are going to talk about developers, development environment and development tools which help can help you and make your development easy a bit later and as this tool we will we are going to talk about Eclipse chair, which is an open source project and we are a contributors of this project which aims to provide fast easy to use extensible platform for hybrid cloud development. It provide Kubernetes based developer workspaces. We will talk a bit later. What is it? But it's allow you leverage fully internalize developer workspaces and bring your application to a cloud and all build tools. It is based on the new best-of-the-art open source editor Eclipse tier. It has a great compatibility with this code extension. So almost a big set of the this code existed plugins and is available to you and as a major features of this presentation, we are going to talk about the file which is an attempt to provide standard or format where you can define all tools and all things which you are going to use in develop during development as a single file, which is trying to be as small as possible So make it make it a bit easy to use. So let's Talk a bit more about a few major concepts. So Kubernetes with zero effort. What does it mean? Eclipse tier has the nice features to to make the URLs which you can embed to your issues your readme's which just a Browser you can click on it and get the fully development environment just in your browser Without and needn't install anything we go out need to explain someone which steps they need to provide Need to make to have the same environment. So this is we call it factories In other features, it's A dev file development environment as a code So if you are able to define your development environment as a as a file you can put it in a source code It can be then branched can be full requested and it basically it provide it Fix the issue, but it works on one machine, but someone does not it will fix the issue like Wrong version of some some tools and dependency Issues stuff like that. It protects your source codes and since source codes remained in the cloud and you Are not able to forget and it's not check it out locally You are not able to forget it with laptop in a bar. So let's work for your IT department They can make the old knowledge to secure the cloud secure your code it's it's maybe less that important for open source project, but for companies which are more closed like From a city call or some of something like that. That's might be very very important Extensible platform as I said the Eclipse share is Based on Eclipse tier, which has a great Extensibility plug-in support with this code so you can bring your extension here and Used existed one So it's provide Kubernetes based workspaces, what does it mean? So It's a sandbox and you everything is running on the Kubernetes and Opshipping shift where you can combine together application runtimes like Java node like Tomcads like servers can provide the As a part of workspace build tools like Madden Like Gradle like nodes stuff like that it provides What do you expect from the eds? or provide the code assistant support and other things like OpenShift connector, which our times previously shows you and obviously source code, which is source of all our developments So you can imagine the pod which is representing workspaces running separately tools needed for you like Geed like other thing build tools Maven as I said Runtime Java runtime for instance testing tool which you might like regular Flow code build test run debug and deploy so everything that is provided as a part of workspace port and of course all of that needs the source code because you you are producing changes all these tools might want to Need the source code so we are mounting the source code to the each of those tools you'll show all containers and so the the K concept all these tools are packaged with as a containers and it has the Quite a big bunch of benefits, so zero dependency installation like if you need to Maven it comes with Java so you don't need to figure out which version of Java you need to just require in the main Is related execution so one tool can't affect another tool Olden life cycle and upgrades so it's just you don't need to find there the tools exist you just Upgrade the version of container it it comes to you as part of the open source project eclipse We are trying to use community-based images so Community knows better when we are how to provide the runtime for node example a go application or Java so we are trying to leverage the upstreams images first if we could do that Because we think they are no better than I we are So simple packaging in this world like a lot of people knows what is the container images? scalable so you can expect To leverage all benefits of the cloud and the scalability world Yes, as I said the new New editor from from our opinions the best open source editor at this moment So it also comes with the As a container with all these dependencies, but you should not think that's the only one editor that is possible So as I said, we are trying to provide Extensible platform and you can use another alternative editors like you Peter notebooks Maybe you're another one, but you Peter I I've saw that contribution It's extensible An extensibility comes from the standards language server the protocol is one of the standards which allows to bring you language specific features to your Editors and if someone writes already language server Language server for some languages it can be connected to Eclipse chair as well as DS code atom all editors which support language server protocol and Same thing for the bug adapter protocol As I said, it has a great compatibility with this code extension. So more and more extensions are Confirmed works successfully Yeah, so you can enable Enable plugins during working Session as you expect The things in editing in this code Extension packages with the dependencies so do you don't need to think about to install something extra? This list of plugins Customizable the plug-in registry. So if you have the some private installation some private packages some private containers You can add the new one or remove the existed one. So that's fully customizable no worry about that and Def file so Def file is the thing which we think can Provide your development environment as a code It's an attempt to standardize the features some of the main case things that which you expect here as the sources projects can be multiple can be probably zero neck soon Editors like the standard editor by default is Eclipse thea But as I said, you can replace it in other editors like Eclipse. You Peter and and Tools of course like build tools runtime tools Runtime environments you can adjust add your Kubernetes application in users there's runtime environment and Commands so commands that you are Often used to build test run the bug deploy Etc. Let's take a look how it looks like. So it's like one of the basics As a one it has the sources as it's from the two. Do you see everything? Okay, you can see it so starting from two explaining components here the Java Java support and Docker image used as Runtime it's emitting commands just because it's will be looks quite long But later I think we will see some examples of commands so you should think about As a workspace like a puzzles when you are Combining everything you need to endure and develop and as a container you get your application You add something some some piece of the puzzles as a container and Of course as I said we aim to provide extensible platform for cloud development teams if you define your Workspace as a file put it in a source code it managed your consistency So again, but it works on my machine on someone doesn't Doesn't work. It's reproducible. You need to just click on the link Simple to share you can share the link you can share a link to the file you can share the factory link and Extensible you can bring your images your tools It's easy to bring the plugins to Eclipse tier it's easy to Kind of easy bring the new language servers because anyway, it's a standard. So you don't need to rewrite To each time if you're building new language It's time to demo Okay so now You know the theory So hopefully now let's look at Something in action. So What I want to show you is Like writer defile from scratch for this Simple application so I Fused the real world demo application and it's like github project that has defined API and they have multiple implementations of the back end and multiple front end and I I choose the Java back end on spring boot and Javascript react application for the front end and later I will use the MySQL Database It's the simple architecture Basically what I want is my back end to provide some public route as well as the front end and the front end application we'll communicate through the back end public route and Later back end will communicate under the hood with my Squel database so to Fasten things I have like prepared steps But imagine I'm writing that right now So this is like the simplest Valid defile you can have so you can see it's a Yammel and it's inspired by Kubernetes Yammel object definitions so we have some API version currently this is like only one we support but We are like ready to Have more versions in the future and some metadata currently we have only the name or generate name and Like workspace we will create from this defile will be named like this if you generate name, it's The name will be like Generated with some logic from from from this So as a second step, I want to add my project and that means the source code repositories to the workspace and I have to I have my front end which is some react Application repository and the back end which is spring boot back end application now the Names are quite important because it's the name of the directory that the project will be cloned to and You will see that later like what does it? Does it look in a real workplace? Now the location of the repository is clear and type this is like github github repository on github and we support some more What I'm not sure which I can hear also define like branch or Clone path for example which is quite useful for For like go projects for example if you want to clone your repository into some go path somewhere in the Container, so I have my projects Next step is attributes these are like key value pairs of some attributes for a workspace What I'm defining here is to not persist volumes and That means that if I stop the workspace everything will be like deleted or I Couldn't get to it again and it's basically just to think make things faster for the demo so now the like Most interesting part of the def file which is defining components and I would like logically split the components to two parts first part first part could be like components for for check which is for example the editor or Check plugins and as Sergey told that we Use chat the editor It is the default, but I'm showing here that you can basically define the editor here And I'm using some specific version of that Now to the plugins I'm using the typescript plugin, which is like I will I will gain with it support for for JavaScript and I can use things like code completion and code navigation and in-line documentation and stuff like that and I can also set the memory limit and I guess some other parameters Here I have commented out the Java plugin It's just to show that we can support we can like have that but also for like make things faster and I comment it out Yeah Important thing here is that all plugins are defined in Plug-in registry Which we can find on GitHub here. Yeah, so these are like all plugins we can use in in chat and they have Some description you can like either define your own plugin and even use your own Plug-in registry with your own plugins whatever you want so so Che editor and Che plugins were where like components for Che and now define the components from the second group and these are for our our application so I have Java back end and I Need to build it somewhere and run it somewhere, right? So I have my component that I I have named Java back end and I'm using type Docker image which is like the I Would say simplest Component which you can define because it has like the strict structure into the file This is image that will be used for for a component. So it will be started When I start the workspace Memory limit for for a container I want to mount the sources there so I can't build and run and do stuff and Important thing here is I can and I'm defining endpoint here What does it mean is? basically the service and the public route will be created for this Component for this container and I've named it web back end for port 880 because 880 is where my application will run and I want it to be public because I need to contact Like communicate with Java back end from from the front end application next I have front end component and And Just to show you we support different types. I Have this type of Kubernetes again, I want to mount the sources there and Here you can see that I have basically definition of Kubernetes Kubernetes pop which is like standard Kubernetes object in the Real workspace it Will not be the pot and I will show you how it looks like later So but the definition is here one pot which has one container named node.js some image Some resources memory limitations stuff like that. So I have my components for back end and the front end now I want to Define some commands I Like which I will be able to use and we'll be able to run and I have just two simple ones one is for running the back end application and second is for running the front end application Now here I have the actions of the of the command and As you can see it is an array so it Looks like we support multiple actions, but currently we support only one, but the defile is ready for more Now the work here where the command will be run is defined like that yeah like this So this is like standard chair Environment variable which says Root of the projects. I think it's slash projects and And Here is the back end folder and if we scroll up It's exactly this one. So the sources will be cloned into back end directory here and I want to execute this command at this place and I I'm saying that I want to run this command on This component so it's exactly this one Front-end is pretty much the same. I'm just Going to front-end here and running different command because it's JavaScript. I have commented out the preview RL because Why I comment it out, I don't know It is like The the URL with port that the application Will start and I can I can go there and take a look but Yeah, it will work without it as well. Yeah So as the last step, I'm adding This is a bit confusing, but this was it a MySQL component which will be Used as a database for the back end again type in the component is simple decor image and Name is my squirrel I'm using some my squirrel image and Here important stuff that I can define environment via variables here Because for the my squirrel I need to define the user password and database and Basically I can define anything here again some Some resource limitations and I'm defining endpoint here, which is named DB and It is again important and you will see later why It's for port three three oh six and It will be discoverable which means that Endpoint with the name DB will be created and by endpoint. I mean like a service in in the workspace namespace on In Kubernetes or open shift and I don't want it to be public. So No public road will be created for the for the component. So This is this is my def file. I Can use the I could use the factory API which will look like this it's a Link to chair open shift IO which is like software as a service provided by it by redhead and The def file is just passed there as a parameter. So if I click here It Will start the workspace But I will cheat here a bit and I opened my already started workspace to Make things faster and working So This is how the workspace look like Like after after I started from the def file So as you can see I have my back end and front-end sources Here I have my my components I can see the the plugins and the editor here and my defined components here and Here are my Comments so I will write run the back end command I defined and the front end one and we'll see Are there any questions? Can you repeat it again, please Yeah, but this would be external to like drawing something external Of course, yes Yeah Basically, if you configure your application to connect some external You can so now some pop-up appears and it's that my Backend application start listening on port 8080 so I can close this one because I don't need that now Here's the pop-up for For the front-end which is more interesting because I I didn't define any endpoint endpoint for it but They are can somehow detect that application is listening and Can route it to the public so I can open the link and This is my front-end application But the front-end application is not yet connected to my back end. This is some back-end publicly available so what I want to do is These are public routes for on on my on my cluster and I have here my Java back-end Hostname and I will write here so now I Like leave the Backend open and we will see if it communicates With my back end Some post Yeah, and it's like write some logs. So it's communicating communicating with my with my back-end But the back-end is now using the h2 database. So If I stop it I just look out here if I stop the back-end and Run it again I should be running. I have no data here because I lost everything and So now I will try to like connect the Application the back-end to my sequel database so Here I have my my sequel Component and I can open the terminal and I'm in the my sequel container so I will connect to the to through database and Nothing here. So what I can do is First I need to have My sequel driver in my application like this and I need to configure my application to connect to the database and the most important thing here is this which is the end point which I said to my sequel database and set it as discoverable and and Here are my services listed in in the in the cluster namespace and this is exactly that one So I can reach it from the Java back-end and I can use it and it's on port 3506 and Of course at the database name Username and the password So let's run the back-end again So my back-end is running and now I should see That there are already some tables created so If I create some user I Can see my user here. I create some some article and it's here so the back-end service is now communicating with my My sequel at a base and it's happening like inside the infrastructure without any public communication so It's basically it's basically the demo. I can show you here like how the How the workspace look like in the in the Kubernetes so Basically the workspace is just this one pot and It is I have running Che in in this namespace. So it's a bit messy here so this is the this is the workspace both only one and this service and this four and Four Ingresses so basically all these ingress is are for the workspace if we look Into the workspace I can see my It is I think six containers Here's the IDE This is the machine exec which is like executing the commands on on the components and Here are my defined components Yeah, what else? I think I think that's all you want to comment something The links So you can see here you can put the link to a depth file like a That file you can use as URL github repository So we will in case if there is no defile there will run an empty Thea base workspace in case if the Defile exists there we can use it as a definition of your workspace. You can specify a link to a branch on github tag like Just grab the link, but you have the browser put it in the as a URL You can put that In your pull requests. I think soon we have some plugins which shall lose you automate this the whole fork edit Push Flow so it will be embedded the link for you We had it in a previous version. It's still under development for the latest one So yeah, and this is basically it Any questions? Yes You mean inside a check. Yeah. Yeah. Yeah, we have we have a key cloak user management and I showed you the single user deployment but if you deploy with multi user, which is like the default basically You have Authentification to provide authentication. We need the open ID provider and we use the key cloak as a open ID provider, which Like by default and you can replace it to Yes Machine Okay, so the question basically the comparison with migrant So Yeah, that's basically it not the silver bullet. It's just so for everything but one of the advantages you can You can bring as a component your definition of your application and use it at runtime So it will be part of your workspace actually you will be running exactly the same thing which will be running on the production So, okay, I think you see the reference content But you can put the reference to the actual file which you then it means if you replace the application definition It will automatically be there next time you're running the workspace Another thing is that Like if I have my repository on github, for example, I can put it just this link and everyone who will come like on one click have complete the workspace environment and Another another use case I would say is It was mentioned in previous talk like you can have all application lifecycle Like fool fully in a in a cloud. So basically you don't have to run anything locally you have like all the deployments code editing build build pipelines everything everything there and Like the let's say it department can manage that and Developers are basically only users of it So it's different approach I have to say like I think there is like no silver bullet It's just different approach. I would say that eclipse chair. It's a bit more bigger It brings you an editor also all the plugins for editors like consent assistant anything you are running Accepting from editor so plug-in ecosystem That's what ground is not something which are going to provide it provides you a build or test environment or Runtime environment, but it's not combining all the things together The question is if there are any integrations with other ideas like my local idea, for example I Don't think so. We've only only web ideas and as sergi machines. We support Jupiter notebooks and I think some more but the Tia is basically the default and most our efforts are there so in theory you can run the SSHD demon as part of your workspace Put the some key there and just connected the SSH I'm not sure it was in theory No, no, it wasn't practiced in the previous version, but I wouldn't say that it's it's Quite often that you are connecting locally be to another idea, but as part of the def file you can define a editor less Workspace like we know editor and you can use it as an application environment if commands like everything there, but no editor Any other questions? Okay. Thank you