在Jenkins容器中构建docker映像

时间:2018-12-03 22:08:05

标签: docker jenkins continuous-integration jenkins-pipeline

我正在使用jenkins容器执行基于此Jenkinsfile的管道:

pipeline {
agent any

tools {
    maven 'Maven 3.6.0'
    jdk 'jdk8'
}
stages {
    stage('Pull from git') {
        steps {
            checkout scm
        }
    }

    stage('Compile App') {
        steps {
            sh "mvn clean install"
        }
    }

    stage('Build da Imagem') {
        steps {
            script {
                docker.withTool("docker") {
                    def readyImage = docker.build("dummy-project/dummy-project-image", "./docker")
                    }
                }
            }
        }
    }
}

在最后阶段,当我尝试构建docker映像时,我得到了这个Error。 是否可以在jenkins容器中构建docker映像?

1 个答案:

答案 0 :(得分:1)

您的管道执行代理无法与docker守护进程通信,因此您需要对其进行正确配置,并且有以下三种方法(我知道):

1)为您的代理提供docker安装

2)从https:/$JENKINS_URL/configureTools/

添加Docker安装

3)如果使用Kubernetes作为协调器,则可以在管道的开头添加podTemplate定义,然后使用它,这里是一个示例:

// Name of the application (do not use spaces)
def appName = "my-app"
// Start of podTemplate
def label = "mypod-${UUID.randomUUID().toString()}"
podTemplate(
  label: label,
  containers: [
    containerTemplate(
      name: 'docker',
      image: 'docker',
      command: 'cat',
      ttyEnabled: true)],
  volumes: [
    hostPathVolume(hostPath: '/var/run/docker.sock', mountPath: '/var/run/docker.sock'),
    hostPathVolume(hostPath: '/usr/bin/kubectl', mountPath: '/usr/bin/kubectl'),
    secretVolume(mountPath: '/etc/kubernetes', secretName: 'cluster-admin')],
  annotations: [
      podAnnotation(key: "development", value: appName)]
)
// End of podTemplate


[...inside your pipeline]

  container('docker') {
    stage('Docker Image and Push') {
      docker.withRegistry('https://registry.domain.it', 'nexus') {
      def img = docker.build(appName, '.')
      img.push('latest')
  }

希望对您有帮助