Создание и запуск образа Docker через Jenkins SCM (Jenkinsfile выдвигается вместе с кодом для репо), сам Jenkins запускается в docker, используя dockerfile - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь построить динамическую систему контейнеров для моего загрузочного приложения Spring через Jenkins. Для этого я запустил Jenkins через докер и установил проект, который будет извлекать код из моего хранилища и читать файл jenkins.

В проекте есть как Dockerfile, так и файл Jenkins, так что после чтения jenkins будет читать jenkinsfile, который затем будет читать dockerfile, собирать и запускать, или так и должно быть в потоке. Сборка для моего приложения создается, однако я столкнулся с проблемой в части запуска образа докера.

Я запустил Дженкинса с помощью следующей команды:

docker run -d -v jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker --name jenkinsHome  -p 8089:8080 -p 50000:50000 jenkins/jenkins:lts

Это содержимое докер-файла, которое я создал

# Start with a base image containing Java runtime
FROM gradle:5.0.0-jdk8-alpine as builder
COPY --chown=gradle:gradle . /home/gradle/src
WORKDIR /home/gradle/src
RUN gradle build


# Add Maintainer Info
LABEL maintainer="teckacademy@gmail.com"

# Add a volume pointing to /tmp
VOLUME /tmp

# Make port 8080 available to the world outside this container
FROM openjdk:8-jdk-alpine
EXPOSE 8081
COPY --from=builder /home/gradle/src/build/libs/*.jar /app/
#COPY --from=builder /home/gradle/src/build/libs/*.jar /app/app.jar
RUN ls -r /app
#RUN mkdir -p /app
# The application's jar file
#ARG JAR_FILE=/app/build/libs/aggregator-0.1-SNAPSHOT.jar
ARG PROPERTIES=src/main/resources/application.properties
#ARG PROPERTIES_DEV=src/main/resources/application-dev.properties
ARG PROPERTIES_DEV_YML=src/main/resources/application-qa.yml
ARG PROPERTIES_YML=src/main/resources/application.yml
ARG LOG=logback.xml

# Add the application's jar to the container
#ADD ${JAR_FILE} /app/app.jar
ADD ${PROPERTIES} /app/application.properties
ADD ${PROPERTIES_YML} /app/application.yml
ADD ${PROPERTIES_DEV_YML} /app/application-qa.yml
ADD ${LOG} /app/logback.xml

#RUN apk update
#RUN apk add --update mysql mysql-client && rm -f /var/cache/apk/*
#RUN apk add libmysql-java

#RUN bash -c 'touch /app.jar'
# Run the jar file
#ENTRYPOINT ["java","-    Dspring.config.location=./application.properties", "-jar","/app.jar"]
ENTRYPOINT ["java" ,"-Djava.security.egd=file:/dev/./urandom -    Dspring.profile.active=dev","-jar","/app/reppy-aggregator-dev-0.1-    SNAPSHOT.jar"]
#RUN sh docker stop aggregator-dev
#RUN sh docker build -t aggregator-dev .
#RUN sh docker run -d -p 8081:8081 --name aggregator-dev aggregator-    dev
#RUN sh 'java -jar -Dspring.profile.active=dev /app/app.jar &'
#ENV JAVA_OPTS=""
#ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -        Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

пожалуйста, игнорируйте хешированные строки, я сохранил их, чтобы показать, что еще я пробовал в этом потоке.

Файл jenkins, который у меня есть, имеет следующий код:

pipeline {
agent {
    dockerfile true
    // args '-d -p 8081:8081'
}
stages {
    stage("Checkout") {
        steps {
            // git url: 'https://github.com/mrityush/reppy-aggregator.git', credentialsId: 'tecklabs', branch: 'qa'
            git url: 'https://github.com/mrityush/reppy-aggregator.git', credentialsId: '65b349b7-b6eb-4073-b4d1-194912ccc5b3', branch: 'qa'
        }
    }
    stage('Build image') {
        steps {
            script{
                docker.build aggregator-dev
            }
        }
    }
}
}

Мне нужно сделать двухвалентные операторы следующих 2 команд через jenkinsfile и dockerfile:

docker build -t aggregator-dev .
docker run -d -p 8081:8081 aggregator-dev

но я не уверен, как это сделать в любом из двух файлов

Следующая ошибка - это то, что я получаю постоянно во время сборки jenkins, независимо от того, какую комбинацию я пытаюсь использовать.

Step 19/19 : ENTRYPOINT ["java" ,"-    Djava.security.egd=file:/dev/./urandom -Dspring.profile.active=dev","-    jar","/app/reppy-aggregator-dev-0.1-SNAPSHOT.jar"]
 ---> Running in df4ac65aad14
Removing intermediate container df4ac65aad14
 ---> 397efd233dff
Successfully built 397efd233dff
Successfully tagged     fe5ea528d5e52cbde8d07a84eb2f351d11de9c94:latest
[Pipeline] dockerFingerprintFrom
[Pipeline] }
[Pipeline] // stage
[Pipeline] sh
+ docker inspect -f . fe5ea528d5e52cbde8d07a84eb2f351d11de9c94
.
[Pipeline] withDockerContainer
Jenkins seems to be running inside container     b278ec9f6f776a9371dc8772e9ca2e1effe89ccba51601c95bd22b5819502074
$ docker run -t -d -u 1000:1000 -w     /var/jenkins_home/workspace/reppy-aggregator-dev --volumes-from     b278ec9f6f776a9371dc8772e9ca2e1effe89ccba51601c95bd22b5819502074 -e     ******** -e ******** -e ******** -e ******** -e ******** -e ******** -    e ******** -e ******** -e ******** -e ******** -e ******** -e ********     -e ******** -e ******** -e ******** -e ******** -e ******** -e     ******** -e ******** -e ******** -e ******** -e ******** -e ******** -    e ******** -e ******** -e ********     fe5ea528d5e52cbde8d07a84eb2f351d11de9c94 cat
$ docker top     fdad8c11f9d1a627bacffd90eded3e0e87a1c32612a9edaeb3c8b6237cae83ba -eo     pid,comm
ERROR: The container started but didn't run the expected command.     Please double check your ENTRYPOINT does execute the command passed as     docker run argument, as required by official docker images (see     https://github.com/docker-library/official-images#consistency for     entrypoint consistency requirements).
Alternatively you can force image entrypoint to be disabled by     adding option `--entrypoint=''`.

Пожалуйста, дайте мне знать, как можно решить эту проблему сборки докера (через jenkins в контейнере). Спасибо.

1 Ответ

0 голосов
/ 08 июля 2019

Когда вы используете Dockerfile в качестве агента, изображение создается для вас автоматически.Все, что вам нужно сделать, это выполнить требуемую команду на шаге.

pipeline {
 agent {
  dockerfile true
 }
 stages {
  stage('Use image') {
    steps {
        script{
            sh "uname -a"
        }
    }
  }
 }
}

Приведенный выше конвейер создает образ и предоставляет мне детали ОС.Ссылка на репозиторий здесь https://github.com/rkamath3/ubuntu.git

...