Jenkins Slave JNLP4 - время ожидания соединения - PullRequest
0 голосов
/ 16 ноября 2018

Я вижу эту ошибку в некоторых заданиях Jenkins

Cannot contact jenkins-slave-l65p0-0f7m0: hudson.remoting.ChannelClosedException: Channel "unknown": Remote call on JNLP4-connect connection from 100.99.111.187/100.99.111.187:46776 failed. The channel is closing down or has closed down

У меня есть настройка главного и подчиненного jenkins.

На подчиненном устройстве обнаружены следующие журналы

java.nio.channels.ClosedChannelException
    at org.jenkinsci.remoting.protocol.NetworkLayer.onRecvClosed(NetworkLayer.java:154)
    at org.jenkinsci.remoting.protocol.impl.NIONetworkLayer.ready(NIONetworkLayer.java:142)
    at org.jenkinsci.remoting.protocol.IOHub$OnReady.run(IOHub.java:795)
    at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
    at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:59)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

Дженкинс находится в кластере kubernetes.

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  namespace: default
  name: jenkins-deployment
spec:
  serviceName: "jenkins-pod"
  replicas: 1
  template:
    metadata:
      labels:
        app: jenkins-pod
    spec:
      initContainers:
      - name: volume-mount-hack
        image: busybox
        command: ["sh", "-c", "chmod -R 777 /usr/mnt"]
        volumeMounts:
        - name: jenkinsdir
          mountPath: /usr/mnt
      containers:
      - name: jenkins-container
         imagePullPolicy: Always
        readinessProbe:
          exec:
            command:
              - curl
              - http://localhost:8080/login
              - -o
              - /dev/null
        livenessProbe:
          httpGet:
            path: /login
            port: 8080
          initialDelaySeconds: 120
          periodSeconds: 10
        env:
         - name: JAVA_OPTS
           value: "-Dhudson.slaves.NodeProvisioner.initialDelay=0 -Dhudson.slaves.NodeProvisioner.MARGIN=50 -Dhudson.slaves.NodeProvisioner.MARGIN0=0.85"
        resources:
          requests:
            memory: "7100Mi"
            cpu: "2000m"
        ports:
        - name: http-port
          containerPort: 8080
        - name: jnlp-port
          containerPort: 50000
        volumeMounts:
          - mountPath: /var/run
            name: docker-sock
          - mountPath: /var/jenkins_home
            name: jenkinsdir
      volumes:
        - name: jenkinsdir
          persistentVolumeClaim:
            claimName: "jenkins-persistence"
        - name: docker-sock
          hostPath:
            path: /var/run
---
apiVersion: v1
kind: Service
metadata:
  namespace: default
  name: jenkins
  labels:
    app: jenkins
spec:
  type: NodePort
  ports:
  - name: http
    port: 8080
    targetPort: 8080
    nodePort: 30099
    protocol: TCP
  selector:
    app: jenkins-pod
---
apiVersion: v1
kind: Service
metadata:
  namespace: default
  name: jenkins-external
  annotations:
        service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0
  labels:
    app: jenkins
spec:
  type: LoadBalancer
  ports:
  - name: http
    port: 8080
    targetPort: 8080
    protocol: TCP
  selector:
    app: jenkins-pod
---
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: jenkins-master-pdb
  namespace: default
spec:
  maxUnavailable: 0
  selector:
    matchLabels:
      app: jenkins-pod
---
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: jenkins-slave-pdb
  namespace: default
spec:
  maxUnavailable: 0
  selector:
    matchLabels:
      jenkins: slave
---
kind: Service
apiVersion: v1
metadata:
  name: jenkins-discovery
  namespace: default
  labels:
    app: jenkins
spec:
  selector:
    app: jenkins-pod
  ports:
    - protocol: TCP
      port: 50000
      targetPort: 50000
      name: slaves

Я сомневаюсь, что это имеет какое-то отношение к kubernetes, но все же выдает его там.

Ответы [ 3 ]

0 голосов
/ 27 января 2019

Я предполагаю, что вы используете Плагин Jenkins Kubernetes ,

Вы можете увеличить Timeout in seconds for Jenkins connection ниже Kubernetes Pod template.Это может решить вашу проблему.

Описание для Timeout in seconds for Jenkins connection:

Укажите время в секундах, до которого Jenkins должен ждать, пока агент JNLP установит соединение.Значение должно быть положительным целым числом, по умолчанию 100.

0 голосов
/ 12 апреля 2019

Я думаю, что «Дженкинс-Раб» не является допустимым именем. Вы можете попробовать переименовать его в "jnlp"

Объясните здесь:

Это было связано с этой проблемой. Если имя пользовательского агента не jnlp, то создается другой агент с образом jnlp по умолчанию. Это объясняет сообщения типа channel already closed и т.д ..

0 голосов
/ 21 января 2019

Вы настраивали порт JNLP в самом Jenkins?Он находится в разделе «Управление Jenkins»> «Настроить глобальную безопасность»> «Агенты».Нажмите кнопку «Исправлено» (так как вы уже назначили порт TCP).Установите «TCP-порт для агентов JNLP» на 50000.

...