Jenkins is an automation tool used for building, deploying and automating any project.
Jenkins is architected for plugin support, and can integrate with practically every tool in the CICD tool chain.
Jenkins, along with it's integration abilities with other CICD tools provides unlimited CICD capabilities.
Jenkins was developed using Java programming language.
Jenkins is typically run as a standalone application using the built-in Jetty Servlet/Application container. Jenkins can also be run as a servlet in other application servers such as Apache Tomcat.
Jenkins can be run on operating systems - macOS, Windows,and Linux - on containers such as Docker containers - and on cloud services such as AWS and Azure.
Credentials in Jenkins can be set up at two scopes.
Global scope: - Applies to Jenkins, nodes, items, and all descendant items. This scope is typically used from pipeline projects.
System scope Applies to Jenkins and nodes only. This scope is typically used for system admin functions such as email authentications, agent connections etc.
Credentials in Jenkins can be of different kinds - Username with password, SSH with private key, Secret file, Secret text, PKCD certificate etc.
Jenkins controller is the central process which stores configurations, loads plugins, renders user interfaces, manages agents, and executes pipeline tasks either directly or more typically via agents.
Jenkins agents are individual nodes - typically a machine, or container - which connects to a Jenkins controller and executes pipeline tasks when directed by the controller.
Jenkins pipeline is suite of plugins that implements and integrates continuous delivery pipelines into Jenkins.
There are three ways to create a Jenkins pipeline
Blue Ocean - A UI tool to visually create pipelines
Classic UI - Jenkins classic UI through which you can create a basic pipeline.
SCM - Write a JenkinsFile manually and commit to your projects code repository which will be picked up and processed by Jenkins.
For enterprise projects, and in general as a best practice it is better to create a JenkinsFile and check the file into the source control repository.