Перезапустите Docker-контейнер с вновь созданным образом через jenkins (работает в контейнере). - PullRequest
0 голосов
/ 09 ноября 2019

У меня есть файл docker-compose.yml, который определяет все необходимые мне службы. Важными частями являются следующие:

services:
  backend-api:
    build: .
  jenkins:
    build: ./jenkins
    volumes:
      - jenkins_data:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock

Backend-api - это простое Java-приложение, построенное на gradle, а сервис jenkins - это стандартный образ jenkins с установленным в нем докером.

Dockerfilebackend-api:

FROM gradle:jdk8 as builder

COPY --chown=gradle:gradle . /home/gradle/src
WORKDIR /home/gradle/src
RUN gradle build

FROM openjdk:8-jre-slim
EXPOSE 8080
COPY --from=builder /home/gradle/src/backend/build/distributions/backend.tar /app/
WORKDIR /app
RUN tar -xvf backend.tar
WORKDIR /app/backend
CMD bin/backend

Я хочу перестроить и перезапустить службу backend-api из контейнера jenkins. Я много читал о нем и смотрел на подключаемые модули CloudBees для jenkins, но не могу понять, как перезапустить и перестроить контейнер на хосте из контейнера jenkins.

Возможно ликак-то добиться этого или весь мой подход к этому неверен?

1 Ответ

1 голос
/ 10 ноября 2019

Быстрый ответ

Вам необходимо правильно настроить докер-клиент внутри док-контейнера jenkins. Вот Dockerfile или весь post

После этого вы можете использовать параметр docker -H для выполнения любой команды в удаленных докерах. В качестве примера я использую это для просмотра удаленных журналов с другого компьютера:

docker -H 10.10.10.66:2375 logs --tail 500 my-app

Примечание: Вы должны включить docker rest api раньше!

Длинный ответ

Общий, простой, ручной и проверенный способ работы с CI и докером:

  • Установите CI на одном сервере.
  • Установите или настройте приложения докера на других серверах, не на том же хосте вашего ci
  • Включите docker rest api на ваших удаленных серверах докеров. Это позволяет вам подключать и выполнять команды docker от вашего ci с помощью docker к другому удаленному компьютеру с помощью docker.
  • Сконфигурируйте свой ci (jenkins в вашем случае) для выполнения задач на других серверах, на которых установлен докер.
  • Запуск задач / заданий jenkins вручную или с помощью webhooks
  • Этот тег jenkins должен быть собран и отправить образ докера в ваш личный реестр докеров
  • Наконец, эта задача может загрузить или вытащить новый образ из частного реестра в целевой каталог. docker server

Примечание:

  • Вы можете использовать параметр -H вместо api rest для выполнения команд на удаленных хостах докера.
  • Вы можете отправить свои изображения в общедоступный концентратор докеров, следуя этому руководству , если у вас нет личного реестра докеров или денег, необходимых для его реализации. Будьте осторожны с исходным кодом и переменными, если вы выбираете общедоступный https://hub.docker.com
  • Если у вас не может быть частного сервера реестра Docker $$, и вы не можете отправить свой корпоративный код в общедоступный реестр Docker, выможете установить личный реестр Docker на вашем хосте jenkins. Не рекомендуется, но: что мы можем сделать?
  • Если установка реестра Docker вместе с вашими jenkins не является вариантом, вы можете создать в вашем jenkins задачу, которая будет загружать исходный код (файлы Dockerfile и приложения) на удаленную машину. и сборка exec docker на удаленной машине.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...