Отсутствует обязательный параметр в файле Docker - PullRequest
0 голосов
/ 12 февраля 2019

Я изучаю, как использовать Jenkins и jenkinsfile для моего проекта CI / CD, и при попытке запустить образ докера для выполнения моих тестов селена выдается сообщение об отсутствии параметра образа докера.

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

pipeline {
agent any

stages {
    stage('Build') {
        steps {
            echo 'Building..'
            sh 'npm install'
        }
    }
    stage('Test') {
        steps {
            echo 'Testing..'
             docker {
                        image 'selenium/standalone-firefox:3.141.59-gold' 
                        args '-p 4444:4444' 
                }
            sh 'npm test'
        }
    }
    stage('Deploy') {
        steps {
            echo 'Deploying....'
        }
    }
 }
}

Docker должен работать на моем сервере Ubuntu с открытым портом 4444 докера и сопоставленным с портом 4444 сервера.

1 Ответ

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

Вы использовали Declarative Pipeline для своего Jenkinsfile, а не Scripted Pipeline.Для Declarative Pipeline docker - это директива, которая может использоваться только для указания agent для всего конвейера или этапа следующим образом:

pipeline {
   agent { // specify docker container for entire pipeline
      docker {
         image ''
         args ''
      }
   }
}

stage('test') {
   agent { // all steps of this stage will be executed inside this docker container
      docker {
         image ''
         args ''
      }
   }
}

Вы не можете использовать эту директиву docker какшаг конвейера, как sh, 'эхо'.

Jenkins действительно поставляет DSL docker, который можно напрямую использовать в Scripted Pipeline.

Declarative Pipeline укажите шаг script, в который мы можем поместить сценарий , похожий на сценарий, как показано ниже:

stage('test') {
  steps {
    script {
      def version = ....
      def img = docker.build(...)
      img.push()

      docker.image(...).inside(){}
    }
  }
}

Таким образом, вы можете изменить свой файл Jenkins каки попробуйте.

pipeline {
agent any

stages {
    stage('Build') {
        steps {
            echo 'Building..'
            sh 'npm install'
        }
    }
    stage('Test') {
        steps {
            echo 'Testing..'
            script {
                docker.image('selenium/standalone-firefox:3.141.59-gold')
                      .inside('-p 4444:4444'){}
            }
            sh 'npm test'
        }
    }
    stage('Deploy') {
        steps {
            echo 'Deploying....'
        }
    }
 }
}

По умолчанию интегрируется Docker Pipeline, предполагается, что Docker Registry по умолчанию имеет значение Docker Hub .

Если вы собираетесь использовать пользовательскийРеестр Docker, вы можете использовать docker.withRegistry, чтобы указать пользовательский URL-адрес и учетные данные реестра следующим образом:

stage('Test') {
    steps {
        echo 'Testing..'

            script {
                docker.withRegistry('<custom docker registry>', 
                                    '<credentialsId for custom docker registry if required>') {
                    docker.image('selenium/standalone-firefox:3.141.59-gold')
                          .inside('-p 4444:4444'){}
                }
            }
        sh 'npm test'
    }
}

Примечание: Если в реестре настраиваемого Docker требуются учетные данные, вы должны добавить свойучетная запись для настраиваемого реестра докеров в Jenkins через учетные данные Jenkins.После добавления Jenkins назначит для вашей учетной записи идентификатор, который называется credentialsId, который используется в приведенном выше коде.

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