Google announced the general availability (GA) of Skaffold, a tool that simplifies common tasks when developing and deploying to Kubernetes. Skaffold can auto-detect and deploy changes automatically in development mode, and build, test and deploy changes in deployment mode. Skaffold supports multiple tools in the various stages of its pipeline.

Skaffold runs in two modes - development and deployment. In the former mode, invoked with 'skaffold dev', it watches local source code for changes and builds and deploys when it detects changes. In the latter mode, invoked by 'skaffold run', it builds once, deploys and exits, making it suitable for CI/CD pipelines. Skaffold supports multiple tools for various stages in its pipeline. For builds, it can work with Dockerfiles, Kaniko, Google Cloud Build, Bazel, maven and gradle. It supports container-structure-test to validate the built images. Container-structure-test provides a YAML config-driven way to run various kinds of tests. For deployment, it can work with kubectl, Helm, and kustomize.

In dev mode, Skaffold pipes the log output of running containers and manages port forwarding from the deployed apps to the local machine. It can sync files directly to a running container when the files change, and update Kubernetes manifests with the updated image tags when they are rebuilt. A Skaffold workflow consists of a "pipeline" composed of multiple stages. Stages can be skipped if they are not relevant to the context - e.g. not pushing artifacts to a remote repository when the deployment is targeted at a local Minikube.



Image courtesy : https://skaffold.dev/docs/design/

Skaffold was announced in alpha last year. The GA release also adds experimental support for Cloud Native Buildpacks, which make it easier for devs to build container images by automatically installing dependencies and building depending on the programming language.

To work with different sets of tools in different contexts, Skaffold supports "profiles". The build, test and deploy tools in the specified Skaffold profile can override the ones mentioned in the skaffold.yml, which is the base configuration file in the application's root directory. One can use different profiles for different environemnts - dev, staging and prod - and change the tools used in them accordingly.

Skaffold also exposes an API to integrate with other tools in the workflow. For example, a deployment monitoring dashboard can listen for notifications from the Events API. Other tools in this space include Draft, Tilt, Forge, and Garden.