Построить и запустить докер контейнер в Дженкинс - PullRequest
0 голосов
/ 10 мая 2019

Мне нужно запустить Docker-контейнер в Jenkins, чтобы можно было запускать такие установленные библиотеки, как pycodestyle, в следующих шагах.

  1. Я успешно собрал Docker Container (в Dockerfile)
  2. Как мне получить доступ к контейнеру, чтобы я мог использовать его на следующем шаге?(Пожалуйста, найдите код >> << в шаге сборки ниже)

Спасибо

    stage('Build') {
            // Install python libraries from requirements.txt (Check Dockerfile for more detail)


            sh "docker login -u '${DOCKER_USR}' -p '${DOCKER_PSW}' ${DOCKER_REGISTRY}"
            sh "docker build \
                --tag '${DOCKER_REGISTRY}/${DOCKER_TAG}:latest' \
                --build-arg HTTPS_PROXY=${PIP_PROXY} ."
        >>    sh "docker run -ti ${DOCKER_REGISTRY}/${DOCKER_TAG}:latest sh" <<<
            }
    }

    stage('Linting') {
            sh '''
            awd=$(pwd)
            echo '===== Linting START ====='  
            for file in $(find . -name '*.py'); do
                    filename=$(basename $file)
                    if [[ ${file:(-3)} == ".py" ]] && [[ $filename = *"test"* ]] ; then
                            echo "perform PEP8 lint (python pylint blah) for $filename"
                            cd $awd && cd $(dirname "${file}") && pycodestyle "${filename}" 
                    fi
            done
            echo '===== Linting END ====='                        
            '''
    }

1 Ответ

2 голосов
/ 10 мая 2019

Вам необходимо смонтировать рабочую область вашего задания Jenkins (содержащего ваш проект python) как том (см. Параметр «docker run -v») в ваш контейнер, а затем выполнить шаг сборки «следующий шаг» внутри этого контейнера.Вы можете сделать это, предоставив сценарий оболочки как часть исходного кода вашего проекта, который выполняет «следующий шаг», или напишите этот сценарий на предыдущем этапе сборки.

Это будет примерно так:

sh "chmod +x build.sh"
sh "docker run -v $WORKSPACE:/workspace ${DOCKER_REGISTRY}/${DOCKER_TAG}:latest /workspace/build.sh"

build.sh - это исполняемый скрипт, который является частью рабочей области вашего проекта и выполняет «следующий шаг».

$ WORKSPACE - это папка, используемая вашей работой jenkins (обычно /var / jenkins_home / jobs // workspace - она ​​предоставляется Jenkins как переменная сборки .

Обратите внимание : для этого решения требуется, чтобы демон Docker работал натот же хост, что и у Jenkins! В противном случае рабочая область не будет доступна для вашего контейнера.

Другое решение состоит в том, чтобы запустить Jenkins в качестве контейнера Docker, чтобы вы могли легко обмениваться домашними / рабочими пространствами Jenkins с контейнерами, в которых вы работаете.задания по сборке, как описано здесь:

Выполнение тестов Jenkins в контейнерах Docker, сборка из dockerfile в кодовой базе

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