Jenkinsfiledocker工人

我在Docker容器内的GCE上运行jenkins实例,并想从这个Jenkinsfile和Github执行一个多分支pipe道。 我正在使用GCE jenkins教程。 这是我的Jenkinsfile

 node { def project = 'xxxxxx' def appName = 'gceme' def feSvcName = "${appName}-frontend" def imageTag = "eu.gcr.io/${project}/${appName}:${env.BRANCH_NAME}.${env.BUILD_NUMBER}" checkout scm sh("echo Build image") stage 'Build image' sh("docker build -t ${imageTag} .") sh("echo Run Go tests") stage 'Run Go tests' sh("docker run ${imageTag} go test") sh("echo Push image to registry") stage 'Push image to registry' sh("gcloud docker push ${imageTag}") sh("echo Deploy Application") stage "Deploy Application" switch (env.BRANCH_NAME) { // Roll out to canary environment case "canary": // Change deployed image in canary to the one we just built sh("sed -i.bak 's#eu.gcr.io/cloud-solutions-images/gceme:1.0.0#${imageTag}#' ./k8s/canary/*.yaml") sh("kubectl --namespace=production apply -f k8s/services/") sh("kubectl --namespace=production apply -f k8s/canary/") sh("echo http://`kubectl --namespace=production get service/${feSvcName} --output=json | jq -r '.status.loadBalancer.ingress[0].ip'` > ${feSvcName}") break // Roll out to production case "master": // Change deployed image in canary to the one we just built sh("sed -i.bak 's#eu.gcr.io/cloud-solutions-images/gceme:1.0.0#${imageTag}#' ./k8s/production/*.yaml") sh("kubectl --namespace=production apply -f k8s/services/") sh("kubectl --namespace=production apply -f k8s/production/") sh("echo http://`kubectl --namespace=production get service/${feSvcName} --output=json | jq -r '.status.loadBalancer.ingress[0].ip'` > ${feSvcName}") break // Roll out a dev environment default: // Create namespace if it doesn't exist sh("kubectl get ns ${env.BRANCH_NAME} || kubectl create ns ${env.BRANCH_NAME}") // Don't use public load balancing for development branches sh("sed -i.bak 's#LoadBalancer#ClusterIP#' ./k8s/services/frontend.yaml") sh("sed -i.bak 's#eu.gcr.io/cloud-solutions-images/gceme:1.0.0#${imageTag}#' ./k8s/dev/*.yaml") sh("kubectl --namespace=${env.BRANCH_NAME} apply -f k8s/services/") sh("kubectl --namespace=${env.BRANCH_NAME} apply -f k8s/dev/") echo 'To access your environment run `kubectl proxy`' echo "Then access your service via http://localhost:8001/api/v1/proxy/namespaces/${env.BRANCH_NAME}/services/${feSvcName}:80/" } } 

我总是得到一个错误docker not found

 [apiservice_master-GJCRJX6ZJPDVVSEUHIS6VBX7OYMFS5WKRVRKCSF4PSO76ZGZPKFQ] Running shell script + docker build -t eu.gcr.io/xxxxx/apiservice:master.1 . /var/jenkins_home/workspace/apiservice_master-GJCRJX6ZJPDVVSEUHIS6VBX7OYMFS5WKRVRKCSF4PSO76ZGZPKFQ@tmp/durable-b4503ecc/script.sh: 2: /var/jenkins_home/workspace/apiservice_master-GJCRJX6ZJPDVVSEUHIS6VBX7OYMFS5WKRVRKCSF4PSO76ZGZPKFQ@tmp/durable-b4503ecc/script.sh: docker: not found 

我需要改变什么才能让docker工人在jenkins内工作?

这看起来像DiD(Docker中的Docker),这个最近的问题指出了问题。
请参阅“ 在您的CI或testing环境中使用Docker-in-Docker?思考两次。

同样的问题build议在特权模式下运行。
并确保你正在执行的docker容器有docker安装。

您需要在用于该节点的Jenkins代理映像中安装Docker客户端,即。 cloudbees/java-with-docker-client和代理中安装的cloudbees/java-with-docker-client套接字