Ошибка: script.sh: докер не найден, в Java-приложении Jenkins Pipeline - PullRequest
0 голосов
/ 21 декабря 2018

Я уже некоторое время исследую эту проблему и не могу найти надежного решения этой проблемы.Я попытался удалить и переустановить свой док-контейнер с Jenkins и Sonarqube, но я все еще получаю ту же ошибку.Если мне кажется, что я что-то упустил, но не знаю, что это такое.

Эта часть относится к отдельному файлу 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 голосов
/ 21 декабря 2018

Do NOT использовать container_name поле с тем же значением, что и имя глобального изображения.container_name говорит docker пометить вам контейнер с этим именем.Таким образом, вы перезаписываете значение по умолчанию.

Просто опустите его

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...