【问题标题】:Error: script.sh: docker not found, in Jenkins Pipeline Java application错误:script.sh:在 Jenkins Pipeline Java 应用程序中未找到 docker
【发布时间】:2019-05-21 17:05:49
【问题描述】:

我已经研究这个问题一段时间了,但我找不到解决这个问题的可靠方法。我尝试使用 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)"
} 

【问题讨论】:

  • 管道在哪个 Jenkins 代理上运行?是否安装了 docker?

标签: java docker jenkins sonarqube


【解决方案1】:

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

直接省略

【讨论】:

    猜你喜欢
    • 2018-04-26
    • 2020-09-10
    • 2019-05-19
    • 2019-03-04
    • 2020-10-18
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 2022-07-28
    相关资源
    最近更新 更多