Установка 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
Скрытый контент
Комментарии (26)
Руслан

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

Ответить
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.

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

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

Google
GitHub
Yandex
MailRu