instruction: How do you configure Jenkins with Kubernetes build agents?
output: GitHub - jenkinsci/configuration-as-code-plugin: Jenkins Configuration as Code Plugin Skip to content Navigation Menu Toggle navigation Sign in Appearance settings Product GitHub Copilot Write better code with AI GitHub Spark New Build and deploy intelligent apps GitHub Models New Manage and compare prompts GitHub Advanced Security Find and fix vulnerabilities Actions Automate any workflow Codespaces Instant dev environments Issues Plan and track work Code Review Manage code changes Discussions Collaborate outside of code Code Search Find more, search less Explore Why GitHub All features Documentation GitHub Skills Blog Solutions By company size Enterprises Small and medium teams Startups Nonprofits By use case DevSecOps DevOps CI/CD View all use cases By industry Healthcare Financial services Manufacturing Government View all industries View all solutions Resources Topics AI DevOps Security Software Development View all Explore Learning Pathways Events &amp; Webinars Ebooks &amp; Whitepapers Customer Stories Partners Executive Insights Open Source GitHub Sponsors Fund open source developers The ReadME Project GitHub community articles Repositories Topics Trending Collections Enterprise Enterprise platform AI-powered developer platform Available add-ons GitHub Advanced Security Enterprise-grade security features Copilot for business Enterprise-grade AI features Premium Support Enterprise-grade 24/7 support Pricing Search or jump to... Search code, repositories, users, issues, pull requests... --> Search Clear Search syntax tips Provide feedback --> We read every piece of feedback, and take your input very seriously. Include my email address so I can be contacted Cancel Submit feedback Saved searches Use saved searches to filter your results more quickly --> Name Query To see all available qualifiers, see our documentation . Cancel Create saved search Sign in Sign up Appearance settings Resetting focus You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert {{ message }} jenkinsci / configuration-as-code-plugin Public Notifications You must be signed in to change notification settings Fork 733 Star 2.8k Jenkins Configuration as Code Plugin plugins.jenkins.io/configuration-as-code License MIT license 2.8k stars 733 forks Branches Tags Activity Star Notifications You must be signed in to change notification settings Code Issues 105 Pull requests 6 Actions Projects 0 Security Uh oh! There was an error while loading. Please reload this page . Insights Additional navigation options Code Issues Pull requests Actions Projects Security Insights jenkinsci/configuration-as-code-plugin master Branches Tags Go to file Code Open more actions menu Folders and files Name Name Last commit message Last commit date Latest commit History 1,990 Commits .github .github .idea/ codeStyles .idea/ codeStyles .mvn .mvn .run .run demos demos docs docs images images integrations integrations plugin plugin test-harness test-harness .dockerignore .dockerignore .git-blame-ignore-revs .git-blame-ignore-revs .gitattributes .gitattributes .gitignore .gitignore Jenkinsfile Jenkinsfile LICENSE LICENSE README.md README.md codecov.yml codecov.yml pom.xml pom.xml View all files Repository files navigation README Code of conduct Contributing MIT license Security Jenkins Configuration as Code (a.k.a. JCasC) Plugin Introduction Getting Started Examples and demos Handling Secrets Security considerations Exporting configurations Validating configurations Merge Strategy Triggering Configuration Reload Installing plugins Supported Plugins Adding JCasC support to a plugin Configuration-as-Code extension plugins Jenkins Enhancement Proposal Introduction Setting up Jenkins is a complex process, as both Jenkins and its plugins require some tuning and configuration, with dozens of parameters to set within the web UI manage section. Experienced Jenkins users rely on groovy init scripts to customize Jenkins and enforce the desired state. Those scripts directly invoke Jenkins API and, as such, can do everything (at your own risk). But they also require you to know Jenkins internals and are confident in writing groovy scripts on top of Jenkins API. The Configuration as Code plugin is an opinionated way to configure Jenkins based on human-readable declarative configuration files. Writing such a file should be feasible without being a Jenkins expert, just translating into code a configuration process one is used to executing in the web UI. The below configuration file includes root entries for various components of your primary Jenkins installation. The jenkins one is for the root Jenkins object, and the other ones are for different global configuration elements. jenkins : systemMessage : " Jenkins configured automatically by Jenkins Configuration as Code plugin \n\n " globalNodeProperties : - envVars : env : - key : VARIABLE1 value : foo - key : VARIABLE2 value : bar securityRealm : ldap : configurations : - groupMembershipStrategy : fromUserRecord : attributeName : " memberOf " inhibitInferRootDN : false rootDN : " dc=acme,dc=org " server : " ldaps://ldap.acme.org:1636 " nodes : - permanent : name : " static-agent " remoteFS : " /home/jenkins " launcher : inbound : workDirSettings : disabled : true failIfWorkDirIsMissing : false internalDir : " remoting " workDirPath : " /tmp " slaveAgentPort : 50000 tool : git : installations : - name : git home : /usr/local/bin/git credentials : system : domainCredentials : - credentials : - basicSSHUserPrivateKey : scope : SYSTEM id : ssh_with_passphrase_provided username : ssh_root passphrase : ${SSH_KEY_PASSWORD} description : " SSH passphrase with private key file. Private key provided " privateKeySource : directEntry : privateKey : ${SSH_PRIVATE_KEY} Additionally, we want to have a well-documented syntax file and tooling to assist in writing and testing, so end users have full guidance in using this toolset and do not have to search for examples on the Internet. See the presentation slides from DevOps World - Jenkins World 2018 for an overview. Getting Started First, start a Jenkins instance with the Configuration as Code plugin installed. Those running Jenkins as a Docker container (and maybe also pre-installing plugins ), do include Configuration as Code plugin. Second, the plugin looks for the CASC_JENKINS_CONFIG environment variable. The variable points to a comma-separated list of any of the following: Path to a folder containing a set of config files. For example, /var/jenkins_home/casc_configs . A full path to a single file. For example, /var/jenkins_home/casc_configs/jenkins.yaml . A URL pointing to a file served on the web. For example, https://acme.org/jenkins.yaml . If an element of CASC_JENKINS_CONFIG points to a folder, the plugin will recursively traverse the folder to find file(s) with .yml,.yaml,.YAML,.YML suffix. It will exclude hidden files or files that contain a hidden folder in any part of the full path. It follows symbolic links for both files and directories. Exclusion examples CASC_JENKINS_CONFIG=/jenkins/casc_configs ✔️ /jenkins/casc_configs/jenkins.yaml ✔️ /jenkins/casc_configs/dir1/config.yaml ❌ /jenkins/casc_configs/.dir1/config.yaml ❌ /jenkins/casc_configs/..dir2/config.yaml CASC_JENKINS_CONFIG=/jenkins/.configs/casc_configs contains hidden folder .config ❌ /jenkins/.configs/casc_configs/jenkins.yaml ❌ /jenkins/.configs/casc_configs/dir1/config.yaml ❌ /jenkins/.configs/casc_configs/.dir1/config.yaml ❌ /jenkins/.configs/casc_configs/..dir2/config.yaml All configuration files that are discovered MUST be supplementary. They cannot overwrite each other's configuration values. This creates a conflict and raises a ConfiguratorException . Thus, the order of traversal does not matter to the final outcome. Instead of setting the CASC_JENKINS_CONFIG environment variable, you can also define using the casc.jenkins.config Java property. This is useful when installing Jenkins via a package management tool and can't set an environment variable outside of a package-managed file, which could be overwritten by an update. For RHEL/CentOS systems, you can append the following to the JENKINS_JAVA_OPTIONS entry in /etc/sysconfig/jenkins -Dcasc.jenkins.config=/jenkins/casc_configs If you do not set the CASC_JENKINS_CONFIG environment variable or the casc.jenkins.config Java property, the plugin will default to looking for a single config file in $JENKINS_HOME/jenkins.yaml . If set up correctly, you should be able to browse the Configuration as Code page Manage Jenkins -&gt; Configuration as Code . Initial Configuration When configuring the first Jenkins instance, browse the examples shown in the demos directory of this repository. If you have a plugin that does not have an example, consult the reference help document. Click the Documentation link at the bottom of the Configuration as Code page in your Jenkins instance. If you want to configure a specific plugin, search the page for the name of the plugin. The page will show you which root element belongs to the configuration. Most installed plugins belong under the unclassified root element. Examples See demos folder with various samples. LDAP Replace user interface based configuration for LDAP with the text-based configuration. jenkins : securityRealm : ldap : configurations : - groupMembershipStrategy : fromUserRecord : attributeName : " memberOf " inhibitInferRootDN : false rootDN : " dc=acme,dc=org " server : " ldaps://ldap.acme.org:1636 " Yaml Aliases and Anchors Replace repeated elements with yaml anchors. Anchor keys must be prefixed with x- due to JCasC handling unknown root elements. x-jenkins-linux-node : &amp;jenkins_linux_node_anchor remoteFS : " /home/jenkins " launcher : inbound : workDirSettings : disabled : true failIfWorkDirIsMissing : false internalDir : " remoting " workDirPath : " /tmp " jenkins : nodes : - permanent : name : " static-agent1 " &lt;&lt; : *jenkins_linux_node_anchor - permanent : name : " static-agent2 " &lt;&lt; : *jenkins_linux_node_anchor Which produces two permanent agent nodes which can also be written like this. jenkins : nodes : - permanent : name : " static-agent1 " remoteFS : " /home/jenkins " launcher : inbound : workDirSettings : disabled : true failIfWorkDirIsMissing : false internalDir : " remoting " workDirPath : " /tmp " - permanent : name : " static-agent2 " remoteFS : " /home/jenkins " launcher : inbound : workDirSettings : disabled : true failIfWorkDirIsMissing : false internalDir : " remoting " workDirPath : " /tmp " Security considerations Only Jenkins administrators are able to create or update a Jenkins instance using configuration as code configuration files. However, in some environments, administrators may choose to allow less privileged users to modify portions of the configuration files, for example by storing them in an SCM repository that those users have access to. Allowing non-administrators to edit these configuration files can pose various security risks, so any changes made by non-administrators must be reviewed for safety before they are applied. Here are some examples of changes that could be problematic: Modification of the security realm or authorization strategy settings could give users higher permissions than intended. Interpolation of secrets in unprotected contexts may expose sensitive data. For example, a snippet like systemMessage: "${SENSITIVE_VARIABLE}" could expose the value of a sensitive environment variable to all users who are able to access Jenkins. Installing plugins We don't support installing plugins with JCasC, so you need to use something else for this, Dockers users can use: https://github.com/jenkinsci/docker/#preinstalling-plugins Kubernetes users: https://github.com/jenkinsci/helm-charts Supported Plugins Most plugins should be supported out-of-the-box or maybe require some minimal changes. See this dashboard for known compatibility issues. Adding JCasC support to a plugin Plugin developers wanting to support JCasC in their plugin should check out our how-to guide . Configuration-as-Code extension plugins configuration-as-code-groovy-plugin Allows specifying groovy code that should run on during configuration. Jenkins Enhancement Proposal As configuration as code is demonstrated to be a highly requested topic in the Jenkins community, we have published JEP 201 as a proposal to make this a standard component of the Jenkins project. The proposal was accepted. 🎉 About Jenkins Configuration as Code Plugin plugins.jenkins.io/configuration-as-code Topics jenkins hacktoberfest configuration-as-code jenkins-configuration jcasc Resources Readme License MIT license Code of conduct Code of conduct Contributing Contributing Security policy Security policy Uh oh! There was an error while loading. Please reload this page . Activity Custom properties Stars 2.8k stars Watchers 77 watching Forks 733 forks Report repository Releases 107 1985.vdda_32d0c4ea_b_ Latest Jul 30, 2025 + 106 releases Packages 0 No packages published Uh oh! There was an error while loading. Please reload this page . Contributors 192 Uh oh! There was an error while loading. Please reload this page . + 178 contributors Languages Java 99.7% Other 0.3% Footer &copy; 2025 GitHub,&nbsp;Inc. Footer navigation Terms Privacy Security Status Docs Contact Manage cookies Do not share my personal information You can’t perform that action at this time.