Плагин Jenkins Kubernetes не выполняет точку входа в изображение Docker - PullRequest
0 голосов
/ 11 июля 2019

Я довольно новичок в плагине Jenkins Kubernetes и в целом Kubernetes - https://github.com/jenkinsci/kubernetes-plugin

Я хочу использовать плагин для настройки тестов E2E внутри моего CI.

Внутри моего Jenkinsfile У меня есть podTemplate, который выглядит и используется следующим образом:

def podTemplate = """
apiVersion: v1
kind: Pod
spec:
  containers:
  - name: website
    image: ${WEBSITE_INTEGRATION_IMAGE_PATH}
    command:
      - cat
    tty: true
    ports:
     - containerPort: 3000
  - name: cypress
    resources:
      requests:
        memory: 2Gi
      limit:
        memory: 4Gi
    image: ${CYPRESS_IMAGE_PATH}
    command:
      - cat
    tty: true
"""

pipeline {
  agent {
    label 'docker'
  }
  stages {
    stage('Prepare') {
      steps {
        timeout(time: 15) {
          script {
            ci_machine = docker.build("${WEBSITE_IMAGE_PATH}")
          }
        }
      }
    }

    stage('Build') {
      steps {
        timeout(time: 15) {
          script {
            ci_machine.inside("-u root") {
              sh "yarn build"
            }
          }
        }
      }

      post {
        success {
          timeout(time: 15) {
            script {
              docker.withRegistry("https://${REGISTRY}", REGISTRY_CREDENTIALS) {
                integrationImage = docker.build("${WEBSITE_INTEGRATION_IMAGE_PATH}")
                integrationImage.push()
              }
            }
          }
        }
      }
    }

    stage('Browser Tests') {
      agent {
        kubernetes {
          label "${KUBERNETES_LABEL}"
          yaml podTemplate
        }
      }
      steps {
        timeout(time: 5, unit: 'MINUTES') {
          container("website") {
            sh "yarn start"
          }

          container("cypress") {
            sh "yarn test:e2e"
          }
        }
      }
  }
}


В Dockerfile, который создает изображение, я добавил ENTRYPOINT

ENTRYPOINT ["bash", "./docker-entrypoint.sh"]

Однако кажется, чтоон не выполняется плагином kubernetes.

Я что-то упустил?

1 Ответ

2 голосов
/ 11 июля 2019

Согласно Определение команды и аргументов для контейнера документы:

Команда и аргументы, которые вы определяете в файле конфигурации переопределить команду по умолчанию и аргументы, предоставленные контейнером изображение.

В этой таблице приведены имена полей, используемые Docker и Kubernetes:

| Docker field name | K8s field name |
|------------------:|:--------------:|
|    ENTRYPOINT     |     command    |
|       CMD         |      args      |

Определение command подразумевает игнорирование вашего Dockerfile ENTRYPOINT:

Когда вы переопределяете значения по умолчанию ENTRYPOINT и CMD, применяются следующие правила:

  • Если вы поставите command, но не args для Контейнера, будет использоваться только поставляемый command. Значение по умолчанию ENTRYPOINT и значение по умолчанию CMD, определенные в образе Docker, игнорируются.
  • Если вы поставите только args для контейнера, по умолчанию ENTRYPOINT определенный в образе Docker запускается с указанным вами args.

Так что вам нужно заменить command в вашем шаблоне pod на args, что сохранит ваш Dockerfile ENTRYPOINT (действующий эквивалент Dockerfile CMD).

...