Как я могу добавить условные шаги в jenkinsfile - PullRequest
0 голосов
/ 03 апреля 2020

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

, поскольку эти шаги зависят друг от друга, как я могу добавить условие, если вывод первого cmd равен чему-то («сессия запущена»), затем выполните 2-е, если нет, то выведите некоторое сообщение = («строка»).

stage () {agent {

    docker {
            label 'MyDocker',
            image 'myIMG'
            }
        }
        steps {
            sh label: 'Creating container', script: 'docker run --privileged -d -p 4750:4723 --name mycontainer myimg'
            sh label: 'Building ', script: 'docker exec -it mycontainer test'
        }
    }

1 Ответ

0 голосов
/ 03 апреля 2020

Если вам нужны такие условия на уровне шагов, вы должны использовать шаг script и написать код Groovy.

stage() { 
    agent {
        docker {
            label 'MyDocker',
            image 'myIMG'
        }
    }
    steps {
        script {
            def output = sh returnStdout: true, label: 'Creating container', script: 'docker run --privileged -d -p 4750:4723 --name mycontainer myimg'
            if( output.indexOf('session started') >= 0 ) {
                sh label: 'Building ', script: 'docker exec -it mycontainer test'
            }
            else {
                echo "This is the output: $output"
            }
        }
    }
}

Я добавил параметр returnStdout: true для возврата вывод команды shell.

Чтобы проверить вывод, я использую поиск по подстроке output.indexOf, чтобы сделать код более устойчивым. Конечно, вы можете сравнить 1: 1, заменив его на output == 'session started'.

...