Как запустить скрипт Python в Docker-контейнере в конвейере Jenkins - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть образ докера в dockerhub, который я хочу добавить в качестве агента в мой сценарий конвейера jenkins.Как часть изображения, я выполняю git clone для извлечения репозитория из github, который имеет несколько сценариев Python, что соответствует нескольким этапам в моем конвейере jenkins.Я пытался искать везде, но не могу найти соответствующую информацию, которая говорит о том, как получить доступ к файлам внутри контейнера докера в конвейере jenkins.

Я запускаю jenkins на виртуальной машине, и на ней установлен докер.Конвейер выполняет сборку на док-контейнере.Поскольку на каждом этапе конвейера задействовано много этапов, я постарался максимально использовать Python API.

Вот так выглядит мой dockerfile, образ успешно собирается, и я могу разместитьэто в dockerhub.Когда я запускаю контейнер, я вижу директорию "jenkins_pipeline_scripts", которая содержит все необходимые скрипты python для этапов конвейера.

FROM ros:melodic-ros-core-stretch

RUN apt-get update && apt-get -y install python-pip

RUN git clone <private-repo with token>

Так выглядит мой текущий скрипт конвейера jenkins.

pipeline {
    agent {
        docker {
            image '<image name>'
            registryUrl 'https://registry.hub.docker.com'
            registryCredentialsId 'docker-credentials'
            args '--network host -u root:root'
        }
    }

    stages {
        stage('Test') {
            steps {
                sh 'python jenkins_pipeline_scripts/scripts/test.py'   
            }
        }
    }
}

Это ошибка, которую я получаю при выполнении задания.

$ docker top 05587cd75db5c4282b86b2f1ded2c43a0f4eae161d6c7d7c03d065b0d45e1 -eo pid,comm
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] sh
+ python jenkins_pipeline_scripts/scripts/test.py
python: can't open file 'jenkins_pipeline_scripts/scripts/test.py': [Errno 2] No such file or directory

1 Ответ

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

Когда Jenkins Pipeline запускает контейнер агента, он изменит параметр контейнера WORKDIR с помощью -w и подключит папку рабочего пространства задания Jenkins с помощью параметра -v.

В результате использования обоих параметров папка рабочей области задания Jenkins станет WORKDIR вашего контейнера.

Ниже приведен вывод моей консоли задания jenkins:

docker run -t -d -u 29001:100 
-w /bld/workspace/test/agent-poc 
-v /bld/workspace/test/agent-poc:/bld/workspace/test/agent-poc:rw,z 
-v /bld/workspace/test/agent-poc@tmp:/bld/workspace/test/agent-poc@tmp:rw,z 
-e ******** -e ******** -e ******** -e ******** 
docker.hub.com/busybox cat

При клонировании кода вы клонируете код, а они не находятся внутри WORKDIR, таким образом, не сообщает об ошибке такого файла.

Два подхода к решению вашей проблемы.

1) Сначала скопируйте вашу папку с кодом, вы должны знать этот путь.

    stage('Test') {
        steps {
            sh '''
              cd <your code folder in container>
              python jenkins_pipeline_scripts/scripts/test.py
            '''   
        }
    } 

2) переместить репозиторий кода git clone из Dockerfile в стадию конвейера

Как я объяснил в начале, рабочая область вашей работы станет контейнером WORKDIR, таким образом, вы можете клонировать свой код в рабочую область работы jenkins через шаг конвейератогда вам не нужно cd <your code folder in container>.

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