本文场景为docker安装在宿主机。并用docker启用了Jenkins应用导致容器内不能运行docker进行image生成。
参考了:docker-compose 配置
jenkins docker volume权限问题
经过以上两配置基本可以解决容器内docker与宿主机映射的问题,但是当我用Pipeline打好java jar包准备build镜像文件时又出现了docker: not found问题。
原出现问题配置:

pipeline {
    agent {
        docker {
            image 'maven:3-alpine'
            args '-v /root/.m2:/root/.m2'
        }
    }
    stages {

        stage('Build') {
            steps {
                sh 'mvn -B -DskipTests clean package'
            }
        }
        stage('docker-build') {
                    steps {
                        sh '''cd /var/jenkins_home/workspace/simple-java-maven-app1/target
                        cp ../Dockerfile ./'''
                        sh'docker --help'
                    }
            }
    }
}

在“sh’docker --help“这行报错,问题主要原因是agent 这个全局的额外工具配置上。
由于agent限制No agent type specified. Must be one of [any, docker, dockerfile, label, none] 必在这中间选一个此例中用了全局的maven:3-alpine 所以就没有其它工具 (docker)可用了!!!
后经更正配置为:

pipeline {
    agent none
    stages {
        stage('Build') {
            agent {
                docker {
                    image 'maven:3-alpine'
                    args '-v /root/.m2:/root/.m2'
                }
            }
            steps {
                sh 'mvn -B -DskipTests clean package'
            }
        }
        stage('docker-build') {
                agent any
                steps {
                    sh '''cd /var/jenkins_home/workspace/simple-java-maven-app1/target
                    cp ../Dockerfile ./
                    docker build -t testproject .'''
                }
            }
    }
}

这样在每一步分引用不同的工具,这样就可以正常使用docker了。当然如果在宿主机安装maven映射到容器内,也不会出现此问题。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐