Files
devops-infra-helm-charts-gcp/helm-templates/jenkins-grn/unittests/jcasc-config-test.yaml
T
2026-08-26 03:39:42 +05:30

844 lines
23 KiB
YAML

suite: Configuration as Code
templates:
- jcasc-config.yaml
tests:
- it: default config
release:
namespace: default
asserts:
- isKind:
of: ConfigMap
- hasDocuments:
count: 1
- isNotEmpty:
path: data["jcasc-default-config.yaml"]
- matchRegex:
path: metadata.labels["helm.sh/chart"]
pattern: ^jenkins-
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: agent namespace and templates
release:
namespace: controller-namespace
set:
additionalAgents:
maven:
namespace: maven
podName: maven
customJenkinsLabels: maven
image:
repository: jenkins/jnlp-agent-maven
tag: latest
python:
podName: python
customJenkinsLabels: python
sideContainerName: python
image:
repository: python
tag: "3"
command: /bin/sh -c
args: "cat"
TTYEnabled: true
agent:
namespace: jenkins-agents
podTemplates:
python3: |-
- name: python3
label: jenkins-python3
serviceAccount: jenkins
containers:
- name: python
image: python:3
command: "/bin/sh -c"
args: "cat"
ttyEnabled: true
privileged: true
resourceRequestCpu: "400m"
resourceRequestMemory: "512Mi"
resourceRequestEphemeralStorage: "1Gi"
resourceLimitCpu: "1"
resourceLimitMemory: "1024Mi"
resourceLimitEphemeralStorage: "2Gi"
asserts:
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: customized config
set:
controller:
disableRememberMe: true
executorMode: EXCLUSIVE
numExecutors: 1
enableRawHtmlMarkupFormatter: true
JCasC:
authorizationStrategy: |-
globalMatrix:
permissions:
- "Overall/Read:anonymous"
configScripts:
welcome-message: |
jenkins:
systemMessage: Welcome to our CI\CD server. This Jenkins is configured and managed 'as code'.
securityRealm: local
jenkinsAdminEmail: admin@example.org
ingress:
hostName: jenkins.example.com
tls:
- hosts:
- jenkins.example.com
secretName: tlsSecret
agent:
namespace: default
containerCap: 22
jnlpregistry: private.registry.com
defaultsProviderTemplate: my-defaults
kubernetesConnectTimeout: 11
kubernetesReadTimeout: 12
podName: my-agent
sideContainerName: sideContainer
alwaysPullImage: true
command: /bin/command
image:
repository: my-image/jnlp
tag: v1.2.3
privileged: true
resources:
limits:
cpu: 1024m
memory: 1Gi
ephemeralStorage: 1Gi
requests:
cpu: 756m
memory: 768Mi
ephemeralStorage: 512Mi
runAsUser: 2000
runAsGroup: 2000
TTYEnabled: true
workingDir: /workdir
envVars:
- name: VAR
value: value
idleMinutes: 30
imagePullSecretName: pullSecret
nodeSelector:
jenkins-agent: v1
selector: abc
podRetention: onFailure
connectTimeout: 111
volumes:
- type: ConfigMap
configMapName: myconfigmap
mountPath: /var/myapp/myconfigmap
- type: EmptyDir
mountPath: /var/myapp/myemptydir
memory: false
- type: HostPath
hostPath: /var/lib/containers
mountPath: /var/myapp/myhostpath
- type: Nfs
mountPath: /var/myapp/mynfs
readOnly: false
serverAddress: "192.0.2.0"
serverPath: /var/lib/containers
- type: PVC
claimName: mypvc
mountPath: /var/myapp/mypvc
readOnly: false
- type: Secret
defaultMode: "600"
mountPath: /var/myapp/mysecret
secretName: mysecret
- type: EphemeralVolume
mountPath: /var/myapp/myephemeralvolume
accessModes: ReadWriteOnce
requestsSize: 2Gi
storageClassName: test-storageclass
annotations:
ci.jenkins-agent/test: "custom"
yamlTemplate: |-
apiVersion: v1
kind: Pod
spec:
tolerations:
- key: "key"
operator: "Equal"
value: "value"
yamlMergeStrategy: merge
serviceAccountAgent:
name: agent-serviceaccount
release:
name: my-release
namespace: other
asserts:
- hasDocuments:
count: 2
- documentIndex: 0
isKind:
of: ConfigMap
- matchRegex:
path: metadata.labels["helm.sh/chart"]
pattern: ^jenkins-
- documentIndex: 0
equal:
path: metadata.name
value: my-release-jenkins-jenkins-config-welcome-message
- documentIndex: 0
equal:
path: metadata.namespace
value: other
- matchRegex:
path: metadata.labels["helm.sh/chart"]
pattern: ^jenkins-
- documentIndex: 1
isKind:
of: ConfigMap
- documentIndex: 1
equal:
path: metadata.name
value: my-release-jenkins-jenkins-jcasc-config
- documentIndex: 1
equal:
path: metadata.namespace
value: other
- documentIndex: 0
equal:
path: metadata.labels.my-release-jenkins-jenkins-config
value: "true"
- documentIndex: 1
equal:
path: metadata.labels.my-release-jenkins-jenkins-config
value: "true"
- documentIndex: 0
equal:
path: data
value:
welcome-message.yaml: |-
jenkins:
systemMessage: Welcome to our CI\CD server. This Jenkins is configured and managed 'as code'.
- documentIndex: 1
matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: custom dynamic pvc workspace volume
set:
agent:
workspaceVolume:
type: "DynamicPVC"
accessModes: "ReadWriteOnce"
requestsSize: "2Gi"
storageClassName: "gp2"
release:
namespace: default
asserts:
- isKind:
of: ConfigMap
- hasDocuments:
count: 1
- isNotEmpty:
path: data["jcasc-default-config.yaml"]
- matchRegex:
path: metadata.labels["helm.sh/chart"]
pattern: ^jenkins-
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: custom emptyDir workspace volume
set:
agent:
workspaceVolume:
type: "EmptyDir"
memory: true
release:
namespace: default
asserts:
- isKind:
of: ConfigMap
- hasDocuments:
count: 1
- isNotEmpty:
path: data["jcasc-default-config.yaml"]
- matchRegex:
path: metadata.labels["helm.sh/chart"]
pattern: ^jenkins-
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: custom hostPath workspace volume
set:
agent:
workspaceVolume:
type: "HostPath"
hostPath: "/data"
release:
namespace: default
asserts:
- isKind:
of: ConfigMap
- hasDocuments:
count: 1
- isNotEmpty:
path: data["jcasc-default-config.yaml"]
- matchRegex:
path: metadata.labels["helm.sh/chart"]
pattern: ^jenkins-
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: custom nfs workspace volume
set:
agent:
workspaceVolume:
type: "Nfs"
readOnly: false
serverAddress: "1.1.1.1"
serverPath: "/data"
release:
namespace: default
asserts:
- isKind:
of: ConfigMap
- hasDocuments:
count: 1
- isNotEmpty:
path: data["jcasc-default-config.yaml"]
- matchRegex:
path: metadata.labels["helm.sh/chart"]
pattern: ^jenkins-
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: custom pvc workspace volume
set:
agent:
workspaceVolume:
type: "PVC"
claimName: "my-claim"
readOnly: false
release:
namespace: default
asserts:
- isKind:
of: ConfigMap
- hasDocuments:
count: 1
- isNotEmpty:
path: data["jcasc-default-config.yaml"]
- matchRegex:
path: metadata.labels["helm.sh/chart"]
pattern: ^jenkins-
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: custom other workspace volume
set:
agent:
workspaceVolume:
type: "persistentVolumeClaimWorkspaceVolume"
claimName: "my-claim"
readOnly: false
release:
namespace: default
asserts:
- isKind:
of: ConfigMap
- hasDocuments:
count: 1
- isNotEmpty:
path: data["jcasc-default-config.yaml"]
- matchRegex:
path: metadata.labels["helm.sh/chart"]
pattern: ^jenkins-
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: disable helm.sh label
set:
renderHelmLabels: false
asserts:
- equal:
path: metadata.labels
value:
RELEASE-NAME-jenkins-jenkins-config: "true"
app.kubernetes.io/component: jenkins-controller
app.kubernetes.io/instance: RELEASE-NAME
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: jenkins
- it: disable agents
release:
namespace: controller-namespace
set:
agent.enabled: false
asserts:
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: disable default config
set:
controller.JCasC.defaultConfig: false
asserts:
- hasDocuments:
count: 0
- it: custom jenkins label
set:
controller:
customJenkinsLabels: ["testlabel"]
release:
namespace: default
asserts:
- isKind:
of: ConfigMap
- hasDocuments:
count: 1
- isNotEmpty:
path: data["jcasc-default-config.yaml"]
- matchRegex:
path: metadata.labels["helm.sh/chart"]
pattern: ^jenkins-
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: adds custom labels on agent pods
set:
agent:
podLabels:
label-one: value-one
label-two: true
asserts:
- isKind:
of: ConfigMap
- hasDocuments:
count: 1
- isNotEmpty:
path: data["jcasc-default-config.yaml"]
- matchRegex:
path: metadata.labels["helm.sh/chart"]
pattern: ^jenkins-
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: disable useDefaultServiceAccount
set:
agent:
useDefaultServiceAccount: false
asserts:
- isKind:
of: ConfigMap
- hasDocuments:
count: 1
- isNotEmpty:
path: data["jcasc-default-config.yaml"]
- matchRegex:
path: metadata.labels["helm.sh/chart"]
pattern: ^jenkins-
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: set agent.serviceAccount
set:
agent:
serviceAccount: "testing"
asserts:
- isKind:
of: ConfigMap
- hasDocuments:
count: 1
- isNotEmpty:
path: data["jcasc-default-config.yaml"]
- matchRegex:
path: metadata.labels["helm.sh/chart"]
pattern: ^jenkins-
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: legacyRemotingSecurityEnabled = false
release:
namespace: default
set:
controller:
legacyRemotingSecurityEnabled: false
asserts:
- isKind:
of: ConfigMap
- hasDocuments:
count: 1
- isNotEmpty:
path: data["jcasc-default-config.yaml"]
- matchRegex:
path: metadata.labels["helm.sh/chart"]
pattern: ^jenkins-
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: legacyRemotingSecurityEnabled = true
release:
namespace: default
set:
controller:
legacyRemotingSecurityEnabled: true
asserts:
- isKind:
of: ConfigMap
- hasDocuments:
count: 1
- isNotEmpty:
path: data["jcasc-default-config.yaml"]
- matchRegex:
path: metadata.labels["helm.sh/chart"]
pattern: ^jenkins-
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: empty projectNamingStrategy
release:
namespace: default
set:
controller:
projectNamingStrategy:
asserts:
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: non-string projectNamingStrategy
release:
namespace: default
set:
controller:
projectNamingStrategy:
myConfiguration:
mySetting1: true
mySetting2: something
asserts:
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: specify security settings without apiToken override
release:
namespace: default
set:
controller:
JCasC:
security:
gitHostKeyVerificationConfiguration:
sshHostKeyVerificationStrategy: "acceptFirstConnectionStrategy"
asserts:
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: specify security settings with apiToken override
release:
namespace: default
set:
controller:
JCasC:
security:
apiToken: overridden
asserts:
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: specify additional container
release:
namespace: default
set:
agent:
additionalContainers:
- sideContainerName: dind
image:
repository: docker
tag: dind
command: dockerd-entrypoint.sh
args: ""
privileged: true
asserts:
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: specify additional container and overwrite in additional agent
release:
namespace: default
set:
agent:
additionalContainers:
- sideContainerName: dind
image:
repository: docker
tag: dind
command: dockerd-entrypoint.sh
args: ""
privileged: true
additionalAgents:
additional-agent:
podName: additional-agent
additionalContainers:
- sideContainerName: additional
image:
repository: my-additional-container-image
tag: latest
command: entrypoint.sh
args: arg1 arg2
asserts:
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: specify additional container and clear in additional agent
release:
namespace: default
set:
agent:
additionalContainers:
- sideContainerName: dind
image:
repository: docker
tag: dind
command: dockerd-entrypoint.sh
args: ""
privileged: true
additionalAgents:
additional-agent:
podName: additional-agent
additionalContainers: []
asserts:
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: configure hostnetworking to agent
release:
namespace: default
set:
agent:
hostNetworking: true
asserts:
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: set secretEnvVars
set:
agent:
secretEnvVars:
- key: UNITTEST_PATH
secretKey: UNITTEST_K8S_PATH
secretName: k8s-unittest-secret-name
envVars:
- name: UNITTEST_ENV
value: testvalue
release:
namespace: default
asserts:
- isKind:
of: ConfigMap
- hasDocuments:
count: 1
- isNotEmpty:
path: data["jcasc-default-config.yaml"]
- matchRegex:
path: metadata.labels["helm.sh/chart"]
pattern: ^jenkins-
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: set directConnection
set:
agent:
directConnection: true
release:
namespace: default
asserts:
- isKind:
of: ConfigMap
- hasDocuments:
count: 1
- isNotEmpty:
path: data["jcasc-default-config.yaml"]
- matchRegex:
path: metadata.labels["helm.sh/chart"]
pattern: ^jenkins-
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: set restrictedPssSecurityContext
set:
agent:
restrictedPssSecurityContext: true
release:
namespace: default
asserts:
- isKind:
of: ConfigMap
- hasDocuments:
count: 1
- isNotEmpty:
path: data["jcasc-default-config.yaml"]
- matchRegex:
path: metadata.labels["helm.sh/chart"]
pattern: ^jenkins-
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: agent with liveness probe
set:
agent:
livenessProbe:
execArgs: "cat /tmp/healthy"
failureThreshold: 3
initialDelaySeconds: 0
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
release:
namespace: default
asserts:
- isKind:
of: ConfigMap
- hasDocuments:
count: 1
- isNotEmpty:
path: data["jcasc-default-config.yaml"]
- matchRegex:
path: metadata.labels["helm.sh/chart"]
pattern: ^jenkins-
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: agents with liveness probe
set:
agent:
additionalContainers:
- sideContainerName: side-container
image:
repository: REPOSITORY
tag: TAG
args: ""
command: ""
livenessProbe:
execArgs: "cat /tmp/healthy"
failureThreshold: 3
initialDelaySeconds: 0
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
release:
namespace: default
asserts:
- isKind:
of: ConfigMap
- hasDocuments:
count: 1
- isNotEmpty:
path: data["jcasc-default-config.yaml"]
- matchRegex:
path: metadata.labels["helm.sh/chart"]
pattern: ^jenkins-
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: additional clouds
set:
additionalClouds:
remote-cloud-1:
kubernetesURL: https://api.remote-cloud.com
credentialsId: "remote-cloud-token"
release:
namespace: default
asserts:
- isKind:
of: ConfigMap
- hasDocuments:
count: 1
- isNotEmpty:
path: data["jcasc-default-config.yaml"]
- matchRegex:
path: metadata.labels["helm.sh/chart"]
pattern: ^jenkins-
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: additional clouds inheriting additional agents
set:
additionalAgents:
maven:
namespace: maven
podName: maven
customJenkinsLabels: maven
image:
repository: jenkins/jnlp-agent-maven
tag: latest
additionalClouds:
remote-cloud-1:
kubernetesURL: https://api.remote-cloud.com
credentialsId: "remote-cloud-token"
release:
namespace: default
asserts:
- isKind:
of: ConfigMap
- hasDocuments:
count: 1
- isNotEmpty:
path: data["jcasc-default-config.yaml"]
- matchRegex:
path: metadata.labels["helm.sh/chart"]
pattern: ^jenkins-
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: additional clouds overriding additional agents
set:
additionalAgents:
maven:
namespace: maven
podName: maven
customJenkinsLabels: maven
image:
repository: jenkins/jnlp-agent-maven
tag: latest
additionalClouds:
remote-cloud-1:
kubernetesURL: https://api.remote-cloud.com
credentialsId: "remote-cloud-token"
additionalAgentsOverride: true
release:
namespace: default
asserts:
- isKind:
of: ConfigMap
- hasDocuments:
count: 1
- isNotEmpty:
path: data["jcasc-default-config.yaml"]
- matchRegex:
path: metadata.labels["helm.sh/chart"]
pattern: ^jenkins-
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: custom configmap annotations
set:
controller:
JCasC:
configMapAnnotations:
jenkins.example.com/anno1: "custom-annotation"
jenkins.example.com/anno2: "another-annotation"
asserts:
- isKind:
of: ConfigMap
- hasDocuments:
count: 1
- equal:
path: metadata.annotations
value:
jenkins.example.com/anno1: "custom-annotation"
jenkins.example.com/anno2: "another-annotation"
- it: additional clouds set skipTlsVerify
set:
additionalClouds:
remote-cloud-1:
kubernetesURL: https://api.remote-cloud.com
credentialsId: "remote-cloud-token"
agent:
skipTlsVerify: true
release:
namespace: default
asserts:
- isKind:
of: ConfigMap
- hasDocuments:
count: 1
- isNotEmpty:
path: data["jcasc-default-config.yaml"]
- matchRegex:
path: metadata.labels["helm.sh/chart"]
pattern: ^jenkins-
- matchSnapshot:
path: data["jcasc-default-config.yaml"]
- it: additional clouds set usageRestricted
set:
additionalClouds:
remote-cloud-1:
kubernetesURL: https://api.remote-cloud.com
credentialsId: "remote-cloud-token"
agent:
usageRestricted: true
release:
namespace: default
asserts:
- isKind:
of: ConfigMap
- hasDocuments:
count: 1
- isNotEmpty:
path: data["jcasc-default-config.yaml"]
- matchRegex:
path: metadata.labels["helm.sh/chart"]
pattern: ^jenkins-
- matchSnapshot:
path: data["jcasc-default-config.yaml"]