没有从Jenkins中运行Docker

时间:2017-07-20 15:35:39

标签: docker jenkins

我有一个成功构建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'
    }
  }
}

1 个答案:

答案 0 :(得分:3)

我猜错了3个原因:

  • 您正尝试在非交互式无环境(jenkins构建环境)中使用tty(-it选项)启动容器交互模式,这可能会导致一些问题
  • 您提供了两次图片名称:argsimage
  • 你没有结束报价

尝试更改为:

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在当前工作空间中安装卷时,您甚至可以避免图像创建步骤(您不会发布它,所以我猜它只是测试所必需的)并从中启动必要的命令基础映像构建测试环境并启动测试。