Docker命令在Jenkins文件中用于Jenkinspipe道
我有一个Jenkinsfile
来执行我的end2endtesting(基于NodeJStesting框架Nightwatch-Cucumber
和Nightwatch.js
)在一个Docker container
内的一个Jenkinspipe道上,它Docker container
docker stop
, docker rm
, docker pull
, docker run
和docker 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 stop
, docker rm
, docker pull
, docker run
和docker exec
? 我怎样才能用真正的Docker
命令replaceshell
命令?