I have deployed a helm - baed Jenkins instance on k8s.
I have also installed (by passing them as list in the values.yaml file about 300 plugins (if that matters).
The thing started going wrong when I tried to spin up an agent.
This failed with the following error:
.default/api/v1/namespaces/jenkins/pods?labelSelector=jenkins%2Fjenkins-myenv-jenkins-slave%3Dtrue%2Cjenkins%2Flabel%3Djenkins-myenv-jenkins-slave_. Message: unable to parse requirement: invalid label value: "jenkins-myenv-jenkins-slave_": a valid label must be an empty string or consist of alphanumeric characters, '-', '_' or '.', and must start and end with an alphanumeric character (e.g. 'MyValue',  or 'my_value',  or '12345', regex used for validation is '(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?'). Received status: Status(apiVersion=v1, code=400, details=null, kind=Status, message=unable to parse requirement: invalid label value: "jenkins-myenv-jenkins-slave_": a valid label must be an empty string or consist of alphanumeric characters, '-', '_' or '.', and must start and end with an alphanumeric character (e.g. 'MyValue',  or 'my_value',  or '12345', regex used for validation is '(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?'), metadata=ListMeta(_continue=null, remainingItemCount=null, resourceVersion=null, selfLink=null, additionalProperties={}), reason=BadRequest, status=Failure, additionalProperties={}).I really wonder how it ended up requesting for a pod with the label
jenkins-myenv-jenkins-slave_since nowhere in my values.yaml file there is anything ending in _.
Here are the first lines of my agent configuration in values.yaml
agent:
  enabled: true
  image: "jenkins/jnlp-slave"
  tag: "3.27-1"
  customJenkinsLabels: []
  # name of the secret to be used for image pulling
  imagePullSecretName:
  componentName: "jenkins-slave"
  privileged: falseWhat is more, the relevant field in the configuration section does not seem to have an underscore in the end
I would recommend not to define agents manually in jenkins, you should only configure kubernetes host address
With a declarative pipeline you can define a kubernetes agent like this:
   agent {
       kubernetes {
            label "${kubernetesUUID}"
            defaultContainer 'docker'
            yaml readTrusted('kube.yaml')
            idleMinutes idleminutes
        }
    }
the file kube.yml would be versionned in the same folder as the Jenkinsfile
apiVersion: v1
kind: Pod
spec:
    containers:
        - name: jnlp
          image: jenkinsci/jnlp-slave:latest
          args:
              - ${computer.jnlpmac} ${computer.name}
          tty: true
        - name: docker
          image: myimage:version
          tty: true
          command:
              - cat
          volumeMounts:
            - mountPath: /dev/random
              name: host-urandom
    volumes:
    - name: host-urandom
      hostPath:
        path: /dev/urandomyou can add as many container as you want in the spec, however jnlp must remain. also you should fix the version and not let latest
you can also pass a string with your spec directly to the yaml step instead of using an external file.
you can use the step idleMinutes if you want to let your agent up after several minutes and not spawn a new agent each time you build
Check if you mistakenly have " " (space) char at the and of your label