Just starting with cloud development? Avoid dev setup and deployment headaches with Appsody, Codewind, and Tekton.
Our industry is experiencing a rapid adoption of container-enabled environments like Docker and Kubernetes. As these environments have grown in popularity, so has the adoption of microservices architectures. These approaches enable applications to leverage the key features of these new environments, such that they are not just cloud hosted, but rather cloud-native. These environments, however, come with a learning curve, presenting new challenges for developers who simply want to write, deploy, and debug their code quickly.
Traditionally, developers create applications on their desktop, debug them locally, and then build and deploy them through an automated DevOps pipeline. In each environment, there are often numerous differences, including the operating system, runtime, or package version differences. In addition, since development usually occurs locally before deploying to a containerized environment, there can be painfully long waits between making a code change and seeing that change running live in a staging environment that matches production.
Fortunately for developers, as part of the framework behind the open source Kabanero project, there are tools to help. This blog post presents the curated development tools Codewind, Appsody, and Tekton.
Codewind: Simplify building cloud-native apps for Kubernetes
Codewind is a new Eclipse project that addresses many of these developer challenges. Codewind is a set of tools that helps developers efficiently build high-quality, cloud-native applications for Kubernetes, regardless of which IDE or language they are using.
When a developer's IDE is enhanced with Codewind, they can run their applications in a Docker container and still get the development experience they’re used to. Codewind's rapid development loop lets them edit, build, and run their code with minimal interruption—hiding the complexities of the underlying platform. With Codewind, developers can focus on just delivering code.
Codewind's initial tech-preview offers plugin support for VS Code and Eclipse IDEs. This common library provides the following IDE features:
- Create projects from templates or bind to existing projects, rapidly creating container-ready applications
- View live project information, including application and build status
- Debug and incrementally update Microprofile, Spring, and Node.js projects
- View application and build logs
- Integrate validation errors into the IDE's problems view
- Open a shell session into an application container
- Enable build actions, such as auto build or manual initiation of a build
- Disable, enable, and delete projects
- Launch performance metrics, a performance dashboard, and run load testing
In other words, Codewind has everything a developer needs for cloud-native development, without having to leave their IDE. Try it yourself in your Eclipse or VS Code IDE! Download the install from Eclipse Codewind and provide feedback to the Codewind developers via Mattermost.
Appsody: Simplify deploying cloud-native apps to Kubernetes
Building traditional cloud applications means not just creating the application itself, but also incorporating cloud-native capabilities. For example, liveness and readiness, metrics and observability, and dynamic configuration. The application then needs to be packaged for cloud using best practice Dockerfiles to create production-optimized container images. This requires the accumulation of significant knowledge of how to integrate with cloud capabilities, as well as writing and maintaining the integration code.
Sigh... but developers just want to code. To reduce the time spent on creating development and production configurations, Appsody provides open source tools and capabilities that simplify the experience of building and deploying applications to Kubernetes using the language and frameworks of your choice.
To do that, Appsody provides three components:
- Appsody Stacks
- Appsody CLI
- Appsody Deploy
Appsody Stacks are pre-built, cloud-optimized development and production configurations for a range of programming languages and microservice frameworks, including Open Liberty, Spring Boot, Express.js, LoopBack, and Kitura. These are discoverable and shareable through the Appsody Hub repository.
Appsody Stacks are designed to provide a spectrum of capabilities dependent on how much of the cloud-native application you want to write yourself and how much you want to delegate to the Stack. These range from:
- Cloud packaged: Build a best-practice container image for your application
- Cloud-native: Pre-configured microservice framework
- Cloud functions: Takes functions and composes them with the Stack to provide a full, containerized, serverless microservice
The following diagram shows this Appsody Stack progression from left-to-right:
Working with Appsody Stacks, the CLI provides commands that implement the full development lifecycle. This spans the ability to create a new or enable an existing application using appsody <dev-env> init as well as commands to run, test, debug, and finally to build an image and deploy it to Kubernetes. Additionally, the Appsody CLI is integrated into Codewind, so you can develop with Appsody Stacks directly in the most popular IDEs using Codewind's plugins.
With a single build command, you can create a standard, production-optimized container image of your cloud-native microservices, then deploy the image into Kubernetes using the deploy command. Appsody Deploy makes use of the Appsody Operator (based on Red Hat OpenShift Operators), which minimizes the configuration required to deploy the microservice, enabling you to deploy using either a serverless deployment via Knative or as a regular Kubernetes service. This makes it easy to switch between a server and serverless deployment dependent on your required performance and scaling characteristics.
Try out Appsody
You can try out Appsody by following the instructions in my blog "Build a new Cloud Native Express.js app with Appsody" or do some serverless programming with "Cloud Functions for Node.js using Connect APIs."
Tekton: Kubernetes-style CI/CD pipelines
The Tekton project provides Kubernetes-style resources for declaring continuous integration and continuous deployment (CI/CD) pipelines. A Tekton Pipeline is a structured collection of Tasks—each of which is a set of instructions to execute within a given container. Tekton automates common activities in Kubernetes environments, such as building, testing, and deploying code.
Tekton composable Tasks and Pipelines create a network of shared, reusable automation components, where developers can share both code and DevOps best practices. IBM is working with the open source community to design an extension mechanism that enables developers to combine off-the-shelf pipelines with their own extensions and customizations, while still getting support and fixes for the core pipeline. To take full advantage of Tekton, developers must apply industry-standard best practices while enforcing their own controls and business processes. In some environments, they might need to run extra tests, or perform vulnerability scanning.
For a closer look, see our video "What is Tekton?":
IBM’s main contributions to the Tekton framework is a web-based dashboard as shown below:
Tekton also includes an extension that enables developers to manage webhooks from systems such as GitHub. These webhooks are commonly used to initiate CI/CD pipelines.
In the final post in this series, we'll take a closer look at IBM Cloud Transformation Advisor. It analyzes the code (WAR files) of your existing WebSphere applications and based on their complexity, estimates a development cost to migrate them to a cloud-based platform.