Установка Jenkins с Docker

Установка Jenkins через Docker. Нюансы запуска docker-compose внутри контейнера. Организация сети распределённой сборки. Подготовка виртуальных машин для менеджера и агентов через Ansible.

  • 00:00:38 - Выбор системы автоматизации
  • 00:02:10 - Способы установки Jenkins
  • 00:04:20 - Создание проекта
  • 00:06:06 - Добавление Makefile
  • 00:07:06 - Доступ к Docker
  • 00:09:03 - Использование Docker в Docker
  • 00:10:14 - Использование стороннего docker-демона
  • 00:12:39 - Пробрасывание сертификатов
  • 00:14:51 - Пробрасывание рабочей директории
  • 00:16:02 - Сохранение кэша образов
  • 00:17:50 - Локальная установка
  • 00:19:54 - Интерфейс Blue Ocean
  • 00:20:36 - Создание демонстрационного Pipeline
  • 00:22:25 - Локальный прокси Nginx
  • 00:24:34 - Установка docker-compose
  • 00:26:50 - Конфигурация для production
  • 00:28:34 - Создание виртуальной машины
  • 00:29:26 - Создание плейбуков для Ansible
  • 00:35:18 - Запуск плейбуков для установки
  • 00:36:24 - Добавление команды деплоя
  • 00:38:22 - Установка Jenkins в production
  • 00:39:28 - Выполнение Ad-Hoc команд в Ansible
  • 00:42:34 - Добавление тестового Pipeline
  • 00:42:59 - Настройка числа исполнителей
  • 00:47:10 - Проблема последовательного запуска
  • 00:49:02 - Использование сети агентов
  • 00:51:53 - Добавление агента
  • 00:54:55 - Генерация SSH-ключа для агента
  • 00:58:25 - Добавление Node в Jenkins
Скрытый контент
Комментарии (33)
Руслан

Спасибо, отличное видео.

Ответить
Arunas

Спасибо, очень!

Ответить
Роман

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

Ответить
Bondarenko Alexandr

А как без этого?

Ответить
Роман

Да это полезно для общего развития, но сдается мне, что здесь собрались в большинстве своем программисты (как и я), и для них данная информация не имеет большего значения, кроме как самому потренироваться. Данные знание мало пригодятся в работе, т.к. в любой студии или компании программисту не дадут этим заниматься, для этого есть devops (который в любом случае будет более опытен), в отличие от лекции по программированию, архитектурных решений, тестирования, крайне полезны и который можно применять в своей работе и дальше в этом развиваться. Я считаю что не стоит распыляться, как по мне на ненужные вещи для программиста, а уделить больше времени именно программированию, рассмотреть и применить различные паттерны в данном проекте, что бы было более практическое понимание где и как их стоит правильно их использовать.Но отмечу, это всего лишь мое мнение и пожелание, и оно может отличаться от мнения Дмитрия.

Ответить
Bondarenko Alexandr

Ну уж и не знаю... Я программист и я регулярно настраиваю CI/CD. Для меня материал довольно полезен.

Ответить
Дмитрий Елисеев

Данные знание мало пригодятся в работе, т.к. в любой студии или компании программисту не дадут этим заниматься, для этого есть devops

Наоборот, понятие DevOps как раз подразумевает, что всем этим начинают заниматься сами программисты. А не классический вариант, когда в компании есть отдельный программист (dev) и отдельный сисадмин (ops).

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

Так изначально и анонсировалось, что это будет серия про полный цикл разработки под ключ с рассмотрением всех подобных тем.

Ответить
Bondarenko Alexandr

Спасибо, Дмитрий! Одно время попробовал запустить Jenkins в docker с маунтом докер сокета, но во время сборки приложений при поднятии контейнеров не маунтились тома. Теперь понимаю, как этого избежать.

Ответить
Дмитрий Елисеев

В таком случае нужно было монтировать рабочую папку по тому же абсолютному пути:

volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    - /var/jenkins_home:/var/jenkins_home

чтобы внешний docker-демон видел тот же /var/jenkins_home.

Ответить
Bondarenko Alexandr

Спасибо

Ответить
Руслан

Отличный урок, спасибо!

Ответить
fedot

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

Ответить
Arunas

согласен

Ответить
Bondarenko Alexandr

Дмитрий, а почему задача из authorize.yml запускается отдельно от задачи создания пользователя?

Ответить
Дмитрий Елисеев

Потому что она необязательна для запуска.

Ответить
Дмитрий

Спасибо за замечательные уроки! Вопрос, почему мне приходится в плейбуках уточнять путь к ролям? Вместо просто: - swap, надо писать: .../roles/swap У меня ubuntu 16.

Ответить
Дмитрий

Сам себе отвечаю, потому что плейбуки зачем-то поместил в отдельную папку, а надо в корень рядом с папкой /roles

Ответить
Дмитрий

Дмитрий, в моём jenkins такая беда, ветка master начала падать с ошибкой на npm-install причем падает только ветка master, другие ветки не падают

12:38:39  Successfully built 0686eba36227
12:38:39  Successfully tagged rfr_master_myapp:latest
12:38:39  docker-compose run --rm node-cli npm install
12:38:41  Creating network "rfr_master_default" with the default driver
12:38:41  Creating volume "rfr_master_mongodata" with default driver
12:40:55  
12:40:55  <--- Last few GCs --->
12:40:55  
12:40:55  [1:0x5562eb1b93e0]   122294 ms: Mark-sweep 247.8 (258.7) -> 246.8 (258.2) MB, 844.9 / 2.1 ms  (average mu = 0.811, current mu = 0.223) allocation failure scavenge might not succeed
12:40:55  [1:0x5562eb1b93e0]   123154 ms: Mark-sweep 247.9 (258.2) -> 247.5 (259.2) MB, 676.2 / 9.7 ms  (average mu = 0.711, current mu = 0.214) allocation failure scavenge might not succeed
12:40:55  
12:40:55  
12:40:55  <--- JS stacktrace --->
12:40:55  
12:40:55  FATAL ERROR: MarkCompactCollector: young object promotion failed Allocation failed - JavaScript heap out of memory
12:40:55  Makefile:34: recipe for target 'npm-install' failed
12:40:55  make: *** [npm-install] Error 139```
Ответить
Дмитрий

Что то не охото переустанавливать и настраивать заново jenkins. Может можно как то это поправить?

Ответить
Дмитрий Елисеев

А образ свежий FROM node:15-alpine?

А если зайти в var/lib/docker/volumes и в jenkins-data удалить папку node_modules в workspaces/xxx_master и потом перезапустить сборку?

Ответить
Дмитрий

Образ node:alpine - норм? вроде должен быть крайний.

Папку нашел, pipeline отработал успешно!

Спасибо Дима!

Ответить
Дмитрий

Для информации: внезапно отвалилась дополнительная нода, вообще не хотела подключаться, полечил обновлением образа jenkins (docker-compose pull && docker-compose build --pull).

Ответить
Дмитрий

Дима, чем отличается?

docker-compose pull --include-deps && docker-compose build

от

docker-compose pull && docker-compose build --pull

Ответить
Дмитрий Елисеев

Правильнее использовать вариант:

docker-compose pull && docker-compose build --pull

Исправил это в репозитории и скоро исправлю в видео.

Ответить
elmut

добрый вечер а подскажите какие вы плагины поставили. я собрал Jenkins из alpine

Ответить
Дмитрий Елисеев

При установке выбрали рекомендуемые по умолчанию. Потом свми доставили SSH Agent.

Ответить
`

Выскакивает такая ошибка, при после команды make init

ERROR: Could not build wheels for cryptography which use PEP 517 and cannot be installed directly ERROR: Service 'jenkins' failed to build: The command '/bin/sh -c apk add --no-cache py-pip python3-dev libffi-dev openssl-dev gcc libc-dev make gettext && pip3 install docker-compose' returned a non-zero code: 1 make: *** [Makefile:15: docker-build] Error 1

Ответить
Дмитрий

да, кстати аналогично, потребовалось обновить докер и вот такая же ошибка появляется

Ответить
Дмитрий

https://docs.docker.com/compose/install/

For alpine, the following dependency packages are needed: py-pip, python3-dev, libffi-dev, openssl-dev, gcc, libc-dev, rust, cargo and make.

Таким образом в список установки надо добавить rust и cargo

Ответить
`

Спасибо, помогло :)

Ответить
`

Здравствуйте, у меня не получается одновременно задеплоить registry и jenkins. Пишет что порт 443 уже занят другим сервисом. Если я деплою сначало registry, после этого jenkins не получается задеплоить из за того, что nginx registry занимает порт, что посоветуете?

Ответить
Дмитрий Елисеев

Да, просто так одновременно задеплоить два проекта на один порт не получится.

Можете совместить исходники из двух проектов ​в один, сделав общий файл docker-compose.yml.

Либо можете отдельныйм docker-compose.yml поставить общий входной прокси-сервер Traefik и эти два проекта деплоить в его сеть.

Ответить
Дмитрий

Я так делал, как Дима пишет с общим docker-compose.yml, работает. Сначала, поднял реестр, потом остальное. Но в итоге отказался от этой затеи, потому что виртуалка не тянет и постоянные проблемы. И в конце концов у меня отдельные виртуалки на реестр, дженкинс (1GB памяти - вот это прям обязательно) и сайт.

Ответить
Зарегистрируйтесь или войдите чтобы оставить комментарий

Или войти через:

Google
GitHub
Yandex
MailRu