java - Jenkins Pipeline Java 应用程序中的错误 : script. sh : docker not found,

标签 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)"
} 

最佳答案

请勿使用与全局镜像名称具有相同值的 container_name 字段。 container_name 告诉 docker 使用此名称标记您的容器。因此,您以某种方式覆盖了默认值。

省略即可

关于java - Jenkins Pipeline Java 应用程序中的错误 : script. sh : docker not found,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53881165/

相关文章:

java - 删除文件第一行/顶行的最快 Java 方法(如堆栈)

java - 如何使用ArrayList字段迁移Room数据库?

Docker - 服务的别名 DNS 条目 (CNAME)

Jenkins 构建失败,但所有阶段都成功

Jenkins 中的 Python 单元测试?

java - JEE7 : Do EJB and CDI beans support container-managed transactions?

java - 错误 "import static com.sun.corba (...)"

linux - 两个容器之间使用另一个容器进行通信

django - 尝试在 Docker 上使用 NGINX + Gunicorn 时,NGINX 给出 502 Bad Gateway

git - 使用 Jenkins 和 Git 进行身份验证