
To work with any technology, it is crucial and mandatory to have a detailed understanding of the concepts and terminologies associated with it.
Jenkins is a release engineering tool and there are few terminologies which need to be clarified with respect to Jenkins and release engineering.
To carry out even the most basic development support tasks with Jenkins, some essential tools need to be prepared such as softwares, repositories, storage and others.
To use Jenkins, an installation is required first. Jenkins is not bound to a specific method and can be installed using different procedures and on different infrastructure platforms.
After installation, Jenkins is accessible in form which is not very user-friendly. Some configurations and steps are needed to make it available for first time use and to users.
Preparation, installation and configuration of Jenkins is a long process and even more tedious if needed to perform repeatedly for different environments and in case of failures. It needs automation.
The primary function of Jenkins is to let users configure jobs and run builds from them. Although they can be done from the user interface, for more large and complex deployments, they need to be done from the command line or by using scripts.
With the growing number of projects in a Jenkins deployment, it is crucial to make sure that it withstands failures without any downtime. A highly available infrastructure tries to achieve this objective.
Jenkins data, be it build history, information or configuration files, it is a good production practice to back them up so that they can be restored in event of a failure.
Without proper monitoring of the Jenkins infrastructure and its various components, it would be impossible to know about arising problems and fix them in time.
With bigger deployments, comes bigger risk of data and permission abuse including accidental actions causing widespread damage. The only way to check these situations is by implementing correct security measures and role-based access control.
The Jenkins user interface is quite good and very helpful in performing tasks. However, for the more automation savvy people, it is just not enough. They need solutions which can be scripted to achieve the same objectives but much faster.
No matter how much we scale a Jenkins master vertically, it simply would not be enough to support an ever-growing deployment. At some point of time, a distributed approach will need to be adopted.
An efficient way to run a Jenkins deployment is to offload build tasks to slave nodes while keeping the administrative tasks to the master. The most traditional way of running slaves is by adding dedicated Jenkins slave nodes.
With cloud platforms running a huge part of the global infrastructure, testing is another function we can add to it. Dynamic EC2 instances are an excellent and cost-effective way of running Jenkins slaves.
Containers are the newest revolution to take over the infrastructure space. With launch times of few seconds and flexible architecture, they are a great choice for running disposable Jenkins slaves.
Although standalone containers are quite good for running Jenkins slaves, an even more efficient workflow can be achieved by using container orchestration and clustering platform such as Kubernetes.
To achieve continuous deployment, one of the most important methods of release engineering, an efficient code deployment design is required. With the numerous tools available for deployments, it is crucial that we choose the right one for the complexity and size involved.
For complex integration and release scenarios, jobs are not just enough. Jobs need to work together to create a sequenced workflow called pipeline. In the new model, Jenkins pipelines are a game changer with all features of pipelines integrated in itself.
The new pipeline model of Jenkins has its core in the Jenkisfile. It is the source of all configurations related to the pipeline and involves a domain specific language with its own syntax. With detailed documentation, it needs some exploring.
With knowledge of the Jenkinsfile syntax, the next step is to create the pipelines following the different methods available. Also automating the creation and update of pipeline jobs are necessary.
Almost all projects have multiple branches for efficient integration practices and the general pipeline is only able to handle one branch. Multi-branch pipelines are essential for automating projects involving multiple branches.
Although Jenkins has been solving release engineering problems for long, for some users, the learning curve is a bit high. With Blue Ocean, even the least technical users are able to view and use Jenkins pipelines with ease.
To achieve continuous integration, efficient branching and code commits are not enough. There needs to be a process to automatically trigger and run pipelines to process builds continuously. Github support is essential for this process.
In modern day software development, its not just enough to write code. Efficient and optimized coding practices are essential and continuous code inspection and analysis becomes an integral part of the process.
With the numerous programming languages available in the software ecosystem, there arises the need for packaging of each type of software. It is critical that the software is packaged efficiently and made available to end users for use.
With continuous integration, problems are identified readily and can be fixed early in the process. However, problems can differ in complexities and need efficient tracking throughout the process of fixing. JIRA integrates in an excellent manner and achieves the same objective.
With large environments and numerous projects and pipelines, identifying problems and getting readily notified about them becomes essential. In addition to emails, instant notifications come handy when concerned people need to be updated.
Setting up Jenkins and running build jobs is not enough for a production infrastructure. For optimal performance and results, architecting, designing, and implementing a production-grade Jenkins deployment is essential.
This course gets you up and running with Jenkins and enables you to deliver an optimal Jenkins deployment. On your journey, you will explore and configure features such as high availability, security, monitoring, and backing up/restoring data, which are basically all of the things you need to implementing a scalable and production grade infrastructure. You will also learn how to implement distributed builds, automate build pipelines, and integrate your Jenkins deployment with external services, thus showing you how to increase your team's productivity with pipeline as a code building advanced pipelines faster and easier.
By the end of this video course, you will be able to automate, implement, secure, and manage your Jenkins deployment in no time.
This course uses Jenkins 2.89.3, while not the latest version available, it provides relevant and informative content for legacy users of Jenkins.
About the Author
Anirban Saha is an infrastructure professional with more than seven and half years' experience in infrastructure management at various industries and organizations ranging from early startups to corporate environments. He has worked extensively with configuration management and automation tools including Puppet, Chef, Ansible, Saltstack, and Terraform, to name a few. He has extensive experience in architecting, deploying, and managing large infrastructures and speaks at various conferences on the latest technologies.