From 0abb43f31953b425df1e408341f5fea8a17ab11e Mon Sep 17 00:00:00 2001 From: Torsten Walter Date: Sun, 15 Sep 2019 09:12:38 +0200 Subject: [PATCH] [stable/jenkins] add master.JCasC.defaultConfig (#16929) * add master.JCasC.defaultConfig and configure location - JCasC configuration is stored in template `jenkins.casc.defaults` so that it can be used in `config.yaml` and `jcasc-config.yaml` depending on if configAutoReload is enabled or not - Jenkins Location (URL) is configured to provide a startin point for the config Signed-off-by: Torsten Walter * improve JCasC default configuration JCasC default configuration includes: - Jenkins url - disableRememberMe: false - mode: NORMAL - numExecutors: {{ .Values.master.numExecutors }} - projectNamingStrategy: "standard" Signed-off-by: Torsten Walter * JCasC kubernetes config Signed-off-by: Torsten Walter * JCasC: crumbIssue and security.apiToken Signed-off-by: Torsten Walter --- stable/jenkins/CHANGELOG.md | 75 ++++++++++++++++++ stable/jenkins/Chart.yaml | 2 +- stable/jenkins/README.md | 3 +- stable/jenkins/templates/_helpers.tpl | 90 ++++++++++++++++++++++ stable/jenkins/templates/config.yaml | 4 + stable/jenkins/templates/jcasc-config.yaml | 18 +++++ stable/jenkins/values.yaml | 3 +- 7 files changed, 192 insertions(+), 3 deletions(-) diff --git a/stable/jenkins/CHANGELOG.md b/stable/jenkins/CHANGELOG.md index 7022a04894..1ace7330d1 100644 --- a/stable/jenkins/CHANGELOG.md +++ b/stable/jenkins/CHANGELOG.md @@ -6,6 +6,81 @@ numbering uses [semantic versioning](http://semver.org). NOTE: The change log until version 1.5.7 is auto generated based on git commits. Those include a reference to the git commit to be able to get more details. +## 1.7.0 + +[Jenkins Configuration as Code Plugin](https://github.com/jenkinsci/configuration-as-code-plugin) default configuration can now be enabled via `master.JCasC.defaultConfig`. + +JCasC default configuration includes: + - Jenkins url + - Admin email `master.jenkinsAdminEmail` + - crumbIssuer + - disableRememberMe: false + - mode: NORMAL + - numExecutors: {{ .Values.master.numExecutors }} + - projectNamingStrategy: "standard" + - kubernetes plugin + - containerCapStr via `agent.containerCap` + - jenkinsTunnel + - jenkinsUrl + - maxRequestsPerHostStr: "32" + - name: "kubernetes" + - namespace + - serverUrl: "https://kubernetes.default" + - template + - containers + - alwaysPullImage: `agent.alwaysPullImage` + - args + - command + - envVars + - image: `agent.image:agent.imageTag` + - name: `.agent.sideContainerName` + - privileged: `.agent.privileged` + - resourceLimitCpu: `agent.resources.limits.cpu` + - resourceLimitMemory: `agent.resources.limits.memory` + - resourceRequestCpu: `agent.resources.requests.cpu` + - resourceRequestMemory: `agent.resources.requests.memory` + - ttyEnabled: `agent.TTYEnabled` + - workingDir: "/home/jenkins" + - idleMinutes: `agent.idleMinutes` + - instanceCap: 2147483647 + - imagePullSecrets: + - name: `.agent.imagePullSecretName` + - label + - name + - nodeUsageMode: "NORMAL" + - podRetention: `agent.podRetention` + - serviceAccount + - showRawYaml: true + - slaveConnectTimeoutStr: "100" + - yaml: `agent.yamlTemplate` + - yamlMergeStrategy: "override" + - security: + - apiToken: + - creationOfLegacyTokenEnabled: false + - tokenGenerationOnCreationEnabled: false + - usageStatisticsEnabled: true + +Example `values.yaml` which enables JCasC, it's default config and configAutoReload: + +``` +master: + JCasC: + enabled: true + defaultConfig: true + sidecars: + configAutoReload: + enabled: true +``` + +add master.JCasC.defaultConfig and configure location + +- JCasC configuration is stored in template `jenkins.casc.defaults` + so that it can be used in `config.yaml` and `jcasc-config.yaml` + depending on if configAutoReload is enabled or not + +- Jenkins Location (URL) is configured to provide a startin point + for the config + ## 1.6.1 Print error message when `master.sidecars.configAutoReload.enabled` is `true`, but the admin user can't be found to configure the SSH key. diff --git a/stable/jenkins/Chart.yaml b/stable/jenkins/Chart.yaml index 1323152a4a..01596d1403 100755 --- a/stable/jenkins/Chart.yaml +++ b/stable/jenkins/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v1 name: jenkins home: https://jenkins.io/ -version: 1.6.1 +version: 1.7.0 appVersion: lts description: Open source continuous integration server. It supports multiple SCM tools including CVS, Subversion and Git. It can execute Apache Ant and Apache Maven-based diff --git a/stable/jenkins/README.md b/stable/jenkins/README.md index dbffb813b3..ea14cfd074 100644 --- a/stable/jenkins/README.md +++ b/stable/jenkins/README.md @@ -131,7 +131,8 @@ The following tables list the configurable parameters of the Jenkins chart and t | `master.route.path` | Route path | Not set | | `master.jenkinsUrlProtocol` | Set protocol for JenkinsLocationConfiguration.xml | Set to `https` if `Master.ingress.tls`, `http` otherwise | | `master.JCasC.enabled` | Wheter Jenkins Configuration as Code is enabled or not | `false` | -| `master.JCasC.configScripts` | List of Jenkins Config as Code scripts | False | +| `master.JCasC.defaultConfig` | Enables default Jenkins configuration via configuration as code plugin | `false` | +| `master.JCasC.configScripts` | List of Jenkins Config as Code scripts | | | `master.enableXmlConfig` | enables configuration done via XML files | `false` | | `master.sidecars.configAutoReload` | Jenkins Config as Code auto-reload settings | | | `master.sidecars.configAutoReload.enabled` | Jenkins Config as Code auto-reload settings (Attention: rbac needs to be enabled otherwise the sidecar can't read the config map) | `false` | diff --git a/stable/jenkins/templates/_helpers.tpl b/stable/jenkins/templates/_helpers.tpl index 1cd28df879..9c9aab1dd0 100644 --- a/stable/jenkins/templates/_helpers.tpl +++ b/stable/jenkins/templates/_helpers.tpl @@ -67,6 +67,96 @@ Returns the Jenkins URL {{- end}} {{- end -}} +{{/* +Returns configuration as code default config +*/}} +{{- define "jenkins.casc.defaults" -}} +jenkins: + disableRememberMe: false + mode: NORMAL + numExecutors: {{ .Values.master.numExecutors }} + projectNamingStrategy: "standard" + markupFormatter: + {{- if .Values.master.enableRawHtmlMarkupFormatter }} + rawHtml: + disableSyntaxHighlighting: true + {{- else }} + "plainText" + {{- end }} + clouds: + - kubernetes: + containerCapStr: "{{ .Values.agent.containerCap }}" + {{- if .Values.master.slaveKubernetesNamespace }} + jenkinsTunnel: "{{ template "jenkins.fullname" . }}-agent.{{ template "jenkins.namespace" . }}:{{ .Values.master.slaveListenerPort }}" + jenkinsUrl: "http://{{ template "jenkins.fullname" . }}.{{ template "jenkins.namespace" . }}:{{.Values.master.servicePort}}{{ default "" .Values.master.jenkinsUriPrefix }}" + {{- else }} + jenkinsTunnel: "{{ template "jenkins.fullname" . }}-agent:{{ .Values.master.slaveListenerPort }}" + jenkinsUrl: "http://{{ template "jenkins.fullname" . }}:{{.Values.master.servicePort}}{{ default "" .Values.master.jenkinsUriPrefix }}" + {{- end }} + maxRequestsPerHostStr: "32" + name: "kubernetes" + namespace: "{{ template "jenkins.master.slaveKubernetesNamespace" . }}" + serverUrl: "https://kubernetes.default" + {{- if .Values.agent.enabled }} + templates: + - containers: + - alwaysPullImage: {{ .Values.agent.alwaysPullImage }} + {{- if .Values.agent.args }} + args: "{{ .Values.agent.args }}" + {{- else }} + args: "^${computer.jnlpmac} ^${computer.name}" + {{- end }} + command: {{ .Values.agent.command }} + envVars: + - containerEnvVar: + key: "JENKINS_URL" + value: "http://{{ template "jenkins.fullname" . }}.{{ template "jenkins.namespace" . }}.svc.{{.Values.clusterZone}}:{{.Values.master.servicePort}}{{ default "" .Values.master.jenkinsUriPrefix }}" + {{- if .Values.agent.imageTag }} + image: "{{ .Values.agent.image }}:{{ .Values.agent.imageTag }}" + {{- else }} + image: "{{ .Values.agent.image }}:{{ .Values.agent.tag }}" + {{- end }} + name: "{{ .Values.agent.sideContainerName }}" + privileged: "{{- if .Values.agent.privileged }}true{{- else }}false{{- end }}" + resourceLimitCpu: {{.Values.agent.resources.limits.cpu}} + resourceLimitMemory: {{.Values.agent.resources.limits.memory}} + resourceRequestCpu: {{.Values.agent.resources.requests.cpu}} + resourceRequestMemory: {{.Values.agent.resources.requests.memory}} + ttyEnabled: {{ .Values.agent.TTYEnabled }} + workingDir: "/home/jenkins" + idleMinutes: {{ .Values.agent.idleMinutes }} + instanceCap: 2147483647 + {{- if .Values.agent.imagePullSecretName }} + imagePullSecrets: + - name: {{ .Values.agent.imagePullSecretName }} + {{- end }} + label: "{{ .Release.Name }}-{{ .Values.agent.componentName }} {{ .Values.agent.customJenkinsLabels | join " " }}" + name: "{{ .Values.agent.podName }}" + nodeUsageMode: "NORMAL" + podRetention: {{ .Values.agent.podRetention }} + showRawYaml: true + serviceAccount: "{{ include "jenkins.serviceAccountAgentName" . }}" + slaveConnectTimeoutStr: "100" + yaml: |- + {{ tpl .Values.agent.yamlTemplate . | nindent 10 | trim }} + yamlMergeStrategy: "override" + {{- end }} + {{- if .Values.master.csrf.defaultCrumbIssuer.enabled }} + crumbIssuer: + standard: + excludeClientIPFromCrumb: {{ if .Values.master.csrf.defaultCrumbIssuer.proxyCompatability }}true{{ else }}false{{- end }} + {{- end }} +security: + apiToken: + creationOfLegacyTokenEnabled: false + tokenGenerationOnCreationEnabled: false + usageStatisticsEnabled: true +unclassified: + location: + adminAddress: {{ default "" .Values.master.jenkinsAdminEmail }} + url: {{ template "jenkins.url" . }} +{{- end -}} + {{- define "jenkins.kubernetes-version" -}} {{- if .Values.master.installPlugins -}} {{- range .Values.master.installPlugins -}} diff --git a/stable/jenkins/templates/config.yaml b/stable/jenkins/templates/config.yaml index a99c31c67c..60a5b376a8 100644 --- a/stable/jenkins/templates/config.yaml +++ b/stable/jenkins/templates/config.yaml @@ -313,6 +313,10 @@ data: } {{- else }} # Only add config to this script if we aren't auto-reloading otherwise the pod will restart upon each config change: +{{- if .Values.master.JCasC.defaultConfig }} + jcasc-default-config.yaml: |- + {{- include "jenkins.casc.defaults" . |nindent 4}} +{{- end }} {{- range $key, $val := .Values.master.JCasC.configScripts }} {{ $key }}.yaml: |- {{ tpl $val $| indent 4 }} diff --git a/stable/jenkins/templates/jcasc-config.yaml b/stable/jenkins/templates/jcasc-config.yaml index a7ea928614..ac51e14b66 100644 --- a/stable/jenkins/templates/jcasc-config.yaml +++ b/stable/jenkins/templates/jcasc-config.yaml @@ -18,4 +18,22 @@ data: {{ $key }}.yaml: |- {{ tpl $val $| indent 4 }} {{- end }} +{{- if .Values.master.JCasC.defaultConfig }} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "jenkins.fullname" $root }}-jenkins-jcasc-config + namespace: {{ template "jenkins.namespace" $root }} + labels: + "app.kubernetes.io/name": {{ template "jenkins.name" $root}} + "helm.sh/chart": {{ $.Chart.Name }}-{{ $.Chart.Version }} + "app.kubernetes.io/managed-by": "{{ $.Release.Service }}" + "app.kubernetes.io/instance": "{{ $.Release.Name }}" + "app.kubernetes.io/component": "{{ $.Values.master.componentName }}" + {{ template "jenkins.fullname" $root }}-jenkins-config: "true" +data: + jcasc-default-config.yaml: |- + {{- include "jenkins.casc.defaults" . |nindent 4 }} +{{- end}} {{- end }} diff --git a/stable/jenkins/values.yaml b/stable/jenkins/values.yaml index 4360152f2c..fb74b432ac 100644 --- a/stable/jenkins/values.yaml +++ b/stable/jenkins/values.yaml @@ -200,6 +200,7 @@ master: # etc. Best reference is https:///configuration-as-code/reference. The example below creates a welcome message: JCasC: enabled: false + defaultConfig: false pluginVersion: "1.27" # it's only used when plugin version is <=1.18 for later version the # configuration as code support plugin is no longer needed @@ -409,7 +410,7 @@ agent: # Raw yaml template for the Pod. For example this allows usage of toleration for agent pods. # https://github.com/jenkinsci/kubernetes-plugin#using-yaml-to-define-pod-templates # https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ - yamlTemplate: + yamlTemplate: "" # yamlTemplate: |- # apiVersion: v1 # kind: Pod