Не выполняется код shell при запуске pipeline Jenkins внутри контейнера Docker

Мне необходимо запустить pipeline в котором есть скрипт на Питоне, а после выполнить ЮнитТесты. Локально программа работает. НО, при использовании Jenkins внутри контейнера Docker, конвейер перестаёт работать на шаге, когда необходимо выполнять команды "sh", это видно по выводу в консоли(прикрепляю скрин ошибки ниже). Jenkins запущен с помощью контейнера на Linux. Путь к shell - /bin/bash. Пробовал менять в Jenkinsfile строку 'sh' на 'bash', "sh '#!/bin/bash'" и все подобное. Локальную переменную и путь к shell внутри Jenkins так же настроил. Ссылка на проект: https://github.com/radwebmax/lab5

Вот код Дженкинсфайла:

pipeline{
    options{timestamps()}
        agent none
        stages{
            stage('Check scm'){
                agent any
                steps{
                    checkout scm
                }
            }
            stage('Build'){
                steps{
                    echo "Building ... ${BUILD_NUMBER}"
                    echo "Build complete"
                }
            }
                
            stage('Test'){
               agent {
           docker {
               image 'alpine'
                       args '-u=\"root\"'                           
                }
                }
                steps{
                    
                     
                             sh 'apk add -update python3 py-pip'
                             sh 'pip install Flask'
                             sh 'pip install xmlrunner'
                             sh 'python3 lab5.2.py'
                }
                post{
                    always{
                        junit 'test-reports/*.xml'
                    success{
                        echo 'Application testing successfully completed'
                    }
                    failure{
                        echo 'Well, well, well... looks like u dont know python...'
                    }
                    }
                }
            }

        }
    }

Вот что получаю в итоге:

18:07:36  $ docker top 71af58eb453b42107f70ecc7843b69e04158c199419d6272092a21e36c888e12 -eo pid,comm
    [Pipeline] {
    [Pipeline] sh
    18:12:42  process apparently never started in /var/jenkins_home/workspace/Lab 5 v2.0@2@tmp/durable-f35786a6
    18:12:42  (running Jenkins temporarily with -Dorg.jenkinsci.plugins.durabletask.BourneShellScript.LAUNCH_DIAGNOSTICS=true might make the problem clearer)
    Post stage
    [Pipeline] junit
    18:12:42  Recording test results
    18:12:42  Test reports were found but none of them are new. Did leafNodes run? 
    18:12:42  For example, /var/jenkins_home/workspace/Lab 5 v2.0@2/test-reports/TEST-FlaskAppTests-20201123214819.xml is 2 days 1 hr old

Ответы (1 шт):

Автор решения: zalex

Я не особо силен в jenkins pipeline, но что то мне подсказывает что agent docker предполагает что вы все таки sh выполняете, а вернее пытаетесь выполнить в контейнере, а не непосредственно на jenkins хосте, разве нет ? А если все таки да, то вам нужно использовать DIND (docker in docker), описание есть в документации. Например вот тут можно посмотреть https://www.jenkins.io/doc/tutorials/create-a-pipeline-in-blue-ocean/

→ Ссылка