How can the complete process of software development be simple and effective from planning through development, testing and deployment? How can we unify the elements of development processes running in different clouds and hybrid environments? It seems that for this the answer is held by a tin cat.
One of the most defining factors of today's software market is time. The business value of a development highly depends on the time needed for building, testing, shipping and deploying the application. Consequently, the more elements of a building process can be managed in a single unified system, the more effective the building process will be. Lately several points of the development-testing-deployment process adapted solutions and platforms that take the given task phase to a more abstract level, significantly simplifying the process. Coding is supported by low-code platform, software deployment and hosting today is typically done in container-based application managers, mainly Kubernetes. But what would be a single solution that completely integrates each and every production phase, thus boosting the effectiveness of the CI/CD (Continuous Integration, Continuous Delivery, Continuous Deployment) process?
There are several competitors taking on this challenge (Buildkite, AWS CodePipeline, Jenkins etc.), although one thing is common for all of them: none of those are suitable for every project, so neither software is fit for acting as a universal pipeline. This role is what Tekton aims for – with its tin cat logo – along with a grand goal of establishing the next generation of CI/CD methodology.
Let us see some principles for a start: the platform has to be declarative, meaning that it has to integrate the concept of "pipeline" (interconnectible pipes) and its building logic without preliminary coding.
It is important for the created pipeline to be convertible and variable; it is also essential that the new process is reproducible, meaning that running it with the same parameters should always return the same results. Furthermore for a solution to become common for conducting the CI/CD method, first it needs to be able to manage processes running in different clouds in a unified way.
The latter requirement brings the greatest upgrade needed for this paradigm shift. A CI/CD platform will be actually capable of collaborating with every cloud (that is important for development), if it meets the following criteria:
● able to edit different containerized application elements;
● able to safely and dynamically manage huge amounts of containers;
● able to meet requirements for scalability.
To make it simpler: the platform is suitable if it handles container technology (i.e. Docker methodology), and it can manage and scale containers on a macro scale, therefore compatible with the Kubernetes system.
Tekton successfully managed to get through the "bottleneck" here, that is Kubernetes integration. The application manager platform offers several different pre-defined objects and resources – such as pod, deployment, service etc. – though you can add custom-defined, newly created objects called CRDs (Custom Resource Definitions) too. Tekton’s solution is integrating the pipeline in such CRDs and the related elements and operations into Kubernetes, thus becoming suitable for pipeline management and the execution of the incoming tasks.
The most fundamental element of this technology is Step, consisting of a single basic operation – and this builds into Kubernetes as a container. A Task-type object is made up of a series of sequentially executed steps that becomes available for the application manager via the CRD solution mentioned above. The next level of hierarchy is Pipeline CRD its, that consists of several Tasks. Here we have the opportunity to build a graph out of Tasks, and define how and when each branch runs. Apart from static objects we also need to mention Runtime CRD, that contains the operation orders related to Task and Pipeline runs.
As we can see Tekton is able to integrate roughly every important features of a pipeline into Kubernetes. This way it has every chance to accomplish its goal, creating a universal application building pipeline that is able to work with every platform. Thanks to this generalization, the effectiveness of software development will increase by orders of magnitude.