Дженкинс - плагин Kubernetes в OpenShift.Работают только контейнеры jnlp - PullRequest
0 голосов
/ 08 марта 2019

В настоящее время я работаю над конвейером сборки в OpenShift, используя следующую конфигурацию

openshift: v3.6.173.0.140
Jenkins: 2.017 (с использованием изображений redhat из https://github.com/openshift/jenkins)
Jenkins-Плагин Kubernetes 1.12.2

В качестве агентов Jenkins я использую агенты nodejs, предоставляемые шаблоном openshift jenkins, и изображения, которые на них основываются (например, одно изображение, которое я также приспосабливаю с помощью компилятора машинописи)

Теперь я хочу запустить pods с несколькими контейнерами (не только контейнером jnlp one, но и стандартным узлом, go и т. Д.). Теперь, согласно документации, это не должно быть проблемой (https://github.com/jenkinsci/kubernetes-plugin), поскольку яследует просто добавить контейнеры в мой podTemplate, как

podTemplate(label: mylabel, cloud: 'openshift', 
  containers: [
    containerTemplate(
      name: "jnlp",
      resourceRequestMemory: "512Mi",
      resourceLimitMemory: "2048Mi",
      workingDir: "/home/default",
      tty: "false",
      imagePullPolicy: "Always",
      image: 'private-registry:5000/namespace/nodejs-tsc-jnlp-image:latest',
      args: '${computer.jnlpmac} ${computer.name}',
    ),
    containerTemplate(
      name: 'node',
      resourceRequestMemory: '512Mi',
      resourceLimitMemory: '2048Mi',
      workingDir: '/home/default',
      tty: 'true',
      imagePullPolicy: 'Always',
      image: 'node:alpine',
      command: 'cat'
    )
  ]
)

Теперь проблема в том, что это не работает. Вытягивание изображения для контейнера узла просто работает нормально, и если я использую echo test Например, вместо cat as команда test будет отображаться в журнале контейнеров, но контейнер просто пройдет как выполненный и не будет выполненвсе, что описано в конвейере.Опять же, это полностью написано, как указано в документации

node(mylabel){
stage('TEST NODE'){
  container("node"){
    sh("echo test node")
  }
  container("jnlp"){
    sh("echo test jnlp")
  }
}

Есть идеи, что я делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

Хорошо,

, похоже, единственная ошибка, которую я сделал, заключалась в следующем.Используйте сцену внутри контейнера, и это работает.В Openshift также лучше использовать официальное изображение раба Дженкинса, так как у сообщества возникли проблемы с Git Checkout для меня.Я также внес некоторые изменения, чтобы использовать yamlfile для настройки модуля сборки.Таким образом, моя установка теперь выглядит следующим образом (с базовым этапом в качестве примера)

jenkins / BuildPod.yaml

kind: Pod
apiVersion: v1
metadata:
  labels:
    app: my-build-pod
spec:
  containers:
  - name: jnlp
    image: openshift/jenkins-slave-base-centos7:latest
  - name: nodejs
    image: node:8-alpine
    command:
    - cat

Jenkinsfile

node {
  checkout scm
  def label = "mypod-${UUID.randomUUID().toString()}"

  podTemplate(
    label: label
    cloud: 'openshift'
    yaml: readFile(file: "jenkins/BuildPod.yaml")
  ){
    node(label){
      container('nodejs'){
        stage('Check versions'){
          sh 'node -v'
          sh 'npm -v'
        }
      }
    }
  }
}
0 голосов
/ 08 марта 2019

Я бы попытался использовать в качестве команды: /bin/sh -c и cat в качестве аргумента.

...