Докерский контейнер Jenkins просто зависает и никогда не выполняет шаги - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь запустить образ Python в Jenkins, чтобы выполнить серию модульных тестов с pytest, но у меня странное поведение с Docker.

Мой конвейер Jenkinsfile -

  agent {
      docker { image 'python:3.6-jessie' }
    }

    stages {
      stage('Run tests') {
        steps {
            withCredentials([
                string(credentialsId: 'a-secret', variable: 'A_SECRET')
            {

              sh label: "Install dependencies", script: 'pip install -r requirements.txt'
              sh label: 'Execute tests', script: "pytest mytests.py"
            }
     }
  }
}

Однако, когда я запускаю конвейер, Docker, похоже, выполняет очень длинную инструкцию (со значительно большим количеством -e переменных окружения, чем я определил как учетные данные?), За которым следует cat.

Затем сборка просто зависает и никогда не завершается:

         Jenkins does not seem to be running inside a container
            $ docker run -t -d -u 996:994 
    -w /var/lib/jenkins/workspace/myproject 
    -v /var/lib/jenkins/workspace/myproject:/var/lib/jenkins/workspace/myproject:rw,z
    -v /var/lib/jenkins/workspace/myproject@tmp:/var/lib/jenkins/workspace/myproject@tmp:rw,z 
-e ******** -e ******** python:3.6-jessie cat

Когда я запускаю SSH в свой экземпляр и запускаю docker ps, я вижу

CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
240d00459d92        python:3.6-jessie   "cat"               About a minute ago   Up About a minute                       kind_wright

Почему Дженкинс работает cat?Почему Дженкинс говорит, что я не бегаю внутри контейнера, когда он явно создал контейнер для меня?И самое главное, почему мои pip install -r requirements и другие шаги не выполняются?

1 Ответ

0 голосов
/ 08 февраля 2019

Я наконец понял это.Если у вас есть пустые глобальные переменные среды в вашей конфигурации Jenkins, похоже, вы получите искаженную команду docker run, так как Jenkins напишет команду с вашей пустой строковой переменной среды, как docker run -e some_env_var=some_value -e = ...

Thisзаставит контейнер просто зависнуть.

Контрольный признак того, что это происходит, заключается в том, что вы получите сообщение об ошибке:

invalid argument "=" for "-e, --env" flag: invalid environment variable: =

Первоначально это трудно диагностировать, поскольку Дженкинс (по праву) скрывает ваши действительные учетные данные с ***поэтому пустые строки среды не отображаются как пустые.

Вам необходимо проверить глобальную конфигурацию Jenkins и убедиться, что у вас нет случайно определенных пустых переменных среды:

enter image description here

Если они существуют, их необходимо удалить и выполнить повторно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...