Docker命令在Jenkins文件中用于Jenkinspipe道

我有一个Jenkinsfile来执行我的end2endtesting(基于NodeJStesting框架Nightwatch-CucumberNightwatch.js )在一个Docker container内的一个Jenkinspipe道上,它Docker container docker stopdocker rmdocker pulldocker rundocker exec 。 所以,Jenkinspipe道作业拉取一个Docker image ,创build一个Docker container ,启动它,并在这个启动的Docker container执行end2endtesting。 最后会生成一个Cucumber report

这是我目前的Jenkinsfile

 pipeline { agent any parameters { string(defaultValue: 'grme/nightwatch-chrome-firefox:0.0.3', description: '', name: 'docker_image') string(defaultValue: 'npm-test-chrome', description: '', name: 'run_script_method') string(defaultValue: '/Applications/Docker.app/Contents/Resources/bin/docker', description: '', name: 'docker') } stages { stage('Test') { steps { echo "------ stop all Docker containers ------" sh "(${params.docker} stop \$(${params.docker} ps -a -q) || echo \"------ all Docker containers are still stopped ------\")" echo "------ remove all Docker containers ------" sh "(${params.docker} rm \$(${params.docker} ps -a -q) || ${params.sudo} echo \"------ all Docker containers are still removed ------\")" echo "------ pull Docker image from Docker Cloud ------" sh "${params.docker} pull \"${params.docker_image}\"" echo "------ start Docker container from image ------" sh "${params.docker} run -d -t -i -v \$(pwd):/my_tests/ \"${params.docker_image}\" /bin/bash" echo "------ execute end2end tests on Docker container ------" sh "${params.docker} exec -i \$(${params.docker} ps --format \"{{.Names}}\") bash -c \"cd /my_tests && (xvfb-run --server-args=\'-screen 0 1600x1200x24\' npm run ${params.run_script_method} || true) && google-chrome --version && firefox --version\"" echo "------ stop all Docker containers again ------" sh "(${params.docker} stop \$(${params.sudo} ${params.docker} ps -a -q) || ${params.sudo} echo \"------ all Docker containers are still stopped ------\")" echo "------ remove all Docker containers again ------" sh "(${params.docker} rm \$(${params.sudo} ${params.docker} ps -a -q) || ${params.sudo} echo \"------ all Docker containers are still removed ------\")" } } } post { always { echo "------ generate Cucumber report ------" cucumber "**/cucumber.json" } } } 

但是这个解决scheme不是很聪明,因为我在Jenkinsfile使用shell命令来执行Docker命令。 是否有可能使用本地的Docker命令来实现命令docker stopdocker rmdocker pulldocker rundocker exec ? 我怎样才能用真正的Docker命令replaceshell命令?