Why Cloud Ides Are the Future?
Total Page:16
File Type:pdf, Size:1020Kb
Containing your development – why Cloud IDEs are the future? Steve Poole @spoole167 Andy Watson @AndyRWatson About me Steve Poole Andy Watson @spoole167 @AndyRWatson Developer advocate for Developer advocate for Runtimes Eclipse CodeWind Cloud: it’s what we always wanted Today, our Cloud story is really a container story Containers are giving us new opportunities As long as the answer is “container” We’re all set on a future with containers Containers offer immutability and repeatability Enabling new architectures The idea was to swap larger long running systems With many, many fast starting , short lived ones Initially we thought containers made it easy.. FROM jetty RUN apt-get update COPY my.war /webapps Store code Compile and Build the image Push the image in Git Test locally locally It’s not turned out that way It’s tough being a container developer #worksfineonjdk9 #workslikeheavenonjdk11 What does the dev environment look like? Add in the build cycle #worksfineonjdk9 #workslikeheavenonjdk11 Add IDEs, tests, test data and quality tools.. #worksfineonjdk9 #workslikeheavenonjdk11 Wait, there’s more… #worksfineonjdk9 #workslikeheavenonjdk11 The CI/CD Pipeline Now add more frameworks and languages Add containers and clouds… In a container in your desktop In a container in your CI system Your development Lifecycle Runs on your desk To produce an image … Doesn’t look very “immutable” does it? In a container in your desktop In a container in your CI system Your development Lifecycle Runs on your desk To produce an image … Do these match? A common tale your Your local your CI system production environment system What you build here your Your local your CI system production environment system Doesn’t match what builds here your Your local your CI system production environment system Or what runs here your Your local your CI system production environment system And… What runs in production your Your local your CI system production environment system Is difficult to test here your Your local your CI system production environment system And almost impossible to test here your Your local your CI system production environment system And where we thought we’d have one architecture… Traditional Monolith in a box microservice Serverless / eventing function function APP APP APP APP µFrame FRAME FRAME FRAMEWORK work FRAMEWORK WORK WORK Java / µF µF APP APP JVM APP SERVER APP SERVER SERVER SERVER Java / Java / Java / JVM Java / JVM JVM JVM µF µF OS OS OS HARDWARE HARDWARE HARDWARE We’re using them all To deliver we have multiple stages of verification What the IDE What the full build What the full build What the dev CI thinks thinks in the container full build thinks thinks 1 What the prod CI What the dev CI What actually What the prod CI container build container build happened full build thinks thinks thinks Because we can’t be certain a developer's action won’t break the production system Cloud Computing is not perfect - yet But who cares about a little rain? Developer Experience Runtimes Platforms “Containerisation” is disruptive Traditional Monolith in a box microservice Serverless / eventing function function APP APP APP APP µFrame FRAME FRAME FRAMEWORK work FRAMEWORK WORK WORK Java / µF µF APP APP JVM APP SERVER APP SERVER SERVER SERVER Java / Java / Java / JVM Java / JVM JVM JVM µF µF OS OS OS HARDWARE HARDWARE HARDWARE To enable these choices you need new things… An industrial shipyard AKA Kubernetes Now add tools to manage these systems.. Umm…. Enough tools for you? Building, testing and deploying is changing too In the cloud a single server You don’t want is too high a to be left risk hanging around – waiting for the CI system to come back Containers are changing everything about how we work Roughly 80% of development is containerized. For many companies the complexity is too hard to manage… So they don’t. “Testing in production” is becoming the new normal It’s ironic The person who knows what that the code is supposed to do Is greatly hampered by the process of delivering the code And the business, which needs faster delivery Is taking risks to short circuit its own processes.. 43 A little bit more rain than you expected? Any sun on our horizon? We can’t turn off the internet So we are evolving the tools as we go Development of Cloud applications is hard your Your local your CI system production environment system Development of Cloud applications is hard developers need access to an environment that matches production as closely as possible your Your local your CI system production environment system Development of Cloud applications is hard While being able to deliver code faster than ever before your Your local your CI system production environment system How do we build a new development approach? your Your local your CI system production environment system This is not a new challenge Its just got 10x, 100x harder.. Developing and testing modern applications is truly difficult What can we do to reduce the complexity? What the IDE What the full build What the full build What the dev CI thinks thinks in the container full build thinks thinks 1 What the prod CI What the dev CI What actually What the prod CI container build container build happened full build thinks thinks thinks Eclipse Cloud Development Tools working group https://ecdtools.eclipse.org • Eclipse Codewind Accelerate the adoption of Cloud Integrated Development Environment (IDE) and container- • Eclipse Che based workspace management • Eclipse Theia • Eclipse Open VSX Engages with the Eclipse and broader developer community to ensure broad adoption of emerging standards for cloud- based developer tool Introducing Eclipse codewind @AndyRWatson @EclipseCodewind Cloud Deployment Built into container Initial cloud development has been ‘late binding’: Developers test with the application Commit Code runtime installed on their laptop and running Local dev as a process, then CI/CD pipeline builds and Debug Test deploys as a container “Well it worked ok on my machine !” What is ‘Cloud-native Development’? If you’re deploying containers it’s better to develop in them too: • Higher fidelity – OS, runtime, libraries, fixpack levels, all exactly match production • Developers are directly testing the output of the build • Services injected and used as they will be in production • Ability to debug on and exploit containers and Kubernetes So why isn’t development cloud-native today? • History prior to cloud; momentum • Apps deployed to multiple (non-cloud) environments • The ‘container penalty’: • Slow to build initial container • No iterative development • Harder to access logs and other files in the container • Shell access • … • Tools looking to help to remove the container penalty Inner loop becoming more complicated ? Tooling • Often tied to a vendor or cloud offering ? • IDE specific plugins ? • Same experience for all developers • Levels of support consistent across platforms ? Eclipse Codewind Extension to popular IDEs to support cloud-native development for Kubernetes Rapidly create, iterate, test, debug, and extend applications running in containers Reduce need to use container / kubernetes command line Why Eclipse Codewind? Why full open source / open community? • Proprietary tools have started to emerge from several vendors, but no shared tools, vision, or community. Start to foster some tools reuse and compatibility Why Eclipse? • Strong history of developing IDE tools & community. Eclipse ‘classic’ IDE, Theia, and Che are already there Local IDE – Docker Desktop Local IDE Support Eclipse VS Code Tech Preview - IntelliJ Hosted / Cloud IDE Support • Fully hosted Eclipse Che IDE • Multiple cloud workspaces • Support for VS Code extensions Benefits: • Easy access, zero configuration • Test and debug directly on Kubernetes • Security constrained development Che Local IDE to Remote Kube Support • Test and debug directly on Kubernetes • Reduces resource requirements on Eclipse VS Code Che local machine • Look and feel of still developing locally Containerization Methods • DevFile Templates for popular languages / frameworks • Springboot, • MicroProfile, • Express, • Define container environment and dependencies • Templates exist in their own repository • Configurable / Expandable to meet your own needs devFile container Templates dependencies Container develop Features Codewind’s Developer Tools • Create projects from extensible list of templates • Project info – container ports, endpoints, etc. • Container build & runtime status • Console output directly in the IDE • Shell into running containers • Debugging • … Integrated Application Performance Monitoring • Lightweight, live performance monitoring for key metrics including HTTP response times, throughput, memory, and CPU use • Available metrics based on language Visual Studio Code Java and Node Profilers • Identify CPU intensive methods directly within Visual Studio Code to focus optimization where it counts Load Testing Dashboard • Integrated performance dashboard • Run repeatable load tests against application endpoints • Easily configurable, including payloads • Compare results against historical performance to spot regressions Demo Easily Install Codewind via the Marketplaces! Visit codewind.dev YouTube – Eclipse Codewind Twitter - @EclipseCodewind github/eclipse/codewind What can we do to reduce the complexity? What the IDE What the full build What the full build What the dev CI thinks thinks in the container full build thinks thinks 1 What the prod CI What the dev CI What actually What the prod CI container