错误:script.sh:在Jenkins Pipeline Java应用程序中找不到docker

时间:2018-12-21 08:05:17

标签: java docker jenkins sonarqube

我已经研究这个问题已有一段时间了,但找不到解决该问题的可靠方法。我尝试使用Jenkins和Sonarqube删除并重新安装docker容器,但仍然收到相同的错误。如果感觉好像我缺少什么,但不知道它是什么。

这部分属于一个单独的docker文件。

FROM jenkins/jenkins:lts

这是Sonarqube的另一个

FROM sonarqube:lts

这是我的docker-compose.yml文件。

version: '3.2'
services:
  sonarqube:
    build:
      context: sonarqube/
    ports:
      - 9000:9000
      - 9092:9092
    container_name: sonarqube
  jenkins:
    build:
      context: jenkins/
    privileged: true
    user: root
    ports:
      - 8080:8080
      - 50000:50000
    container_name: jenkins
    volumes:
      - /tmp/jenkins:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - sonarqube

这是我应用程序根目录中的docker文件

FROM maven:lts

COPY pom.xml sportsteams/

COPY src/ sportsteams/src/

WORKDIR sportsteams/

RUN mvn clean install

EXPOSE 8090

ENTRYPOINT [ "java", "-jar", "/sportsteams/target/jenkins.jar"]

这是Jenkins文件,也位于我的应用程序的根目录中。

def CONTAINER_NAME="sportsteams"
def CONTAINER_TAG="lts"
def DOCKER_HUB_USER="Mattjsg"
def HTTP_PORT="8090"

node {

    stage('Initialize'){
        def dockerHome = tool 'myDocker'
        def mavenHome  = tool 'myMaven'
        env.PATH = "${dockerHome}/bin:${mavenHome}/bin:${env.PATH}"
    }

    stage('Checkout') {
        checkout scm
    }

    stage('Build'){
        sh "mvn clean install"
    }

    stage('Sonar'){
        try {
            sh "mvn sonar:sonar"
        } catch(error){
            echo "The sonar server could not be reached ${error}"
        }
     }

    stage("Image Prune"){
        imagePrune(CONTAINER_NAME)
    }

    stage('Image Build'){
        imageBuild(CONTAINER_NAME, CONTAINER_TAG)
    }

    stage('Push to Docker Registry'){
        withCredentials([usernamePassword(credentialsId: 'dockerHubAccount', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {
            pushToImage(CONTAINER_NAME, CONTAINER_TAG, USERNAME, PASSWORD)
        }
    }

    stage('Run App'){
        runApp(CONTAINER_NAME, CONTAINER_TAG, DOCKER_HUB_USER, HTTP_PORT)
    }

}

def imagePrune(containerName){
    try {
        sh "docker image prune -f"
        sh "docker stop $containerName"
    } catch(error){}
}

def imageBuild(containerName, tag){
    sh "docker build -t $containerName:$tag  -t $containerName --pull --no-cache ."
    echo "Image build complete"
}

def pushToImage(containerName, tag, dockerUser, dockerPassword){
    sh "docker login -u $dockerUser -p $dockerPassword"
    sh "docker tag $containerName:$tag $dockerUser/$containerName:$tag"
    sh "docker push $dockerUser/$containerName:$tag"
    echo "Image push complete"
}

def runApp(containerName, tag, dockerHubUser, httpPort){
    sh "docker pull $dockerHubUser/$containerName"
    sh "docker run -d --rm -p $httpPort:$httpPort --name $containerName $dockerHubUser/$containerName:$tag"
    echo "Application started on port: ${httpPort} (http)"
} 

1 个答案:

答案 0 :(得分:0)

不要不要使用container_name字段,该字段的值应与全局图像的名称相同。 container_name告诉docker用此名称标记您的容器。因此,您将以某种方式覆盖默认值。

只需省略