Nano Hash - криптовалюты, майнинг, программирование

Сборка и запуск образа Docker через Jenkins SCM (Jenkinsfile помещается вместе с кодом в репозиторий), сам Jenkins работает в докере, используя dockerfile

Я пытаюсь создать динамическую контейнерную систему для моего загрузочного приложения 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

Это содержимое dockerfile, которое я сделал

# 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="[email protected]"

# 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
            }
        }
    }
}
}

Мне нужно сделать эквивалентные операторы следующих двух команд через 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

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

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

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

08.07.2019
  • Спасибо, я попробую это... в настоящее время не могу не попробовать, так как моя система создает проблемы при подключении к github (ОШИБКА: ошибка при получении удаленного репо "происхождение")... ... Если я могу спросить, будет ли этот конвейер также работать образ докера? Или мне придется использовать образ, созданный через конвейер, и запускать докер отдельно в терминале? 10.07.2019
  • получил тот же ответ. (Дженкинс, кажется, работает внутри контейнера...) Я искал, могу ли я также запустить образ докера. 10.07.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..