我有一个成功构建docker-image的Jenkins-Pipeline。 但是当涉及到运行docker-image时它就失败了。 在docker镜像里面,我有一些API测试,我想用ctest运行。 可以通过在目录/ testing中调用test来执行测试。
有什么建议吗?
pipeline {
agent {label 'apitest-centos7'}
stages {
stage('cleanup'){
steps{
cleanWs()
}
}
stage('git checkout Dockerfile') {
steps{
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'ebf01b-3gf93-4f8e-9f69-97ffgff308af', url: 'http://gitlab.somecompany.loc/somecompany/MyApiTestingTools.git']]])
sh 'ls'
}
}
stage('build Dockerimage'){
steps{
dir('dockerbuild'){
fileExists 'Dockerfile'
sh 'sudo docker build --no-cache=true -t apitestimage .'
}
}
}
stage('start Dockerimage and Tests') {
steps{
dir("dockerbuild"){
withDockerContainer(args: "-ti apitestimage bash -c 'cd testing && ctest", image: 'apitestimage') {
}
}
}
}
}
post {
always {
/*mattermostSend color: 'good', message: 'API-Tests have been executed'*/
deleteDir() /* clean up our workspace */
}
success {
mattermostSend color: 'good', message: 'API-Tests succeded', channel: 'api-tests'
}
unstable {
mattermostSend color: 'warning', message: 'API-Tests are unstable', channel: 'api-tests'
}
failure {
mattermostSend color: 'danger', message: 'API-Tests have failed', channel: 'api-tests', icon: 'https://talks.bitexpert.de/zendcon16-jenkins-for-php-projects/images/jenkins.png'
}
changed {
mattermostSend color: 'warning', message: 'API-Tests have changed', channel: 'api-tests'
}
}
}
答案 0 :(得分:3)
我猜错了3个原因:
-it
选项)启动容器交互模式,这可能会导致一些问题args
和image
尝试更改为:
withDockerContainer(args: "bash -c 'cd testing && ctest'", image: 'apitestimage')
顺便说一下,您可以考虑使用docker pipeline API:
stage('build Dockerimage') {
steps {
script {
apitestimage = docker.build('apitestimage', '--no-cache=true dockerbuild')
}
}
}
stage('start Dockerimage and Tests') {
steps{
script {
apitestimage.inside {
sh 'cd testing && ctest'
}
}
}
}
当docker.inside
在当前工作空间中安装卷时,您甚至可以避免图像创建步骤(您不会发布它,所以我猜它只是测试所必需的)并从中启动必要的命令基础映像构建测试环境并启动测试。