Статьи

Настройте свой собственный стек непрерывной доставки

На прошлой неделе я хотел попробовать что-то новое с «pipe as code» с Jenkins . Лучший способ попробовать что-то новое — это запускать его как контейнеры Docker . Таким образом, я смогу поддерживать свой MacBook в чистоте и не путать существующие вещи, над которыми я работаю (см. Также эту статью о том, что Docker может предложить разработчику) Еще одним большим преимуществом использования Docker является то, что уже есть полный набор докеров, доступных для настройки необходимых инструментов. Однако по непонятной причине этот стек не работал на моем MacBook (см. Эту проблему ), поэтому я воспользовался этой возможностью, чтобы собрать свой собственный стек с некоторыми докерами по своему выбору :-).
Инструменты в моем стеке:

  • Nexus (как репозиторий Maven)
  • Gitlab (для размещения источников моих Java-проектов)
  • Дженкинс (конечно, чтобы использовать конвейер в качестве кода)

В этом посте я опишу, как настроить каждый контейнер и заставить его работать вместе как один стек. Я начну с самого простого:

    • нексус

На самом деле я предпочитаю Artifactory, так как я более привык использовать это. Но, как вы можете прочитать здесь, у меня также были некоторые проблемы с тем, чтобы моя Artifactory работала как контейнер Docker. Как отличается это с Nexus . Просто получите общедоступный образ Docker , установите порт и все готово! Вот как я использовал это в моем файле ‘docker-compose.yml’:

01
02
03
04
05
06
07
08
09
10
...
services:
...
  nexus:
    image: clearent/nexus
    volumes:
      - /opt/data/nexus:/nexus-data
    ports:
      - 8081:8081
...
    • GitLab

Этот был несколько сложнее настроить. В итоге я использовал следующие контейнеры Docker:

      • Redis
      • PostgreSql
      • GitLab

Все эти контейнеры основаны на работах Самера Наика .

    • Redis: последние

Этот использует образ Ubuntu того же парня, что и base, и устанавливает на него Redis. Для более подробной информации см. Источники этого изображения . Само изображение можно найти здесь .

    • PostgreSQL: 9.6-1

Также на основе образа Ubuntu его источники (и подробное описание) можно найти здесь, а изображение Docker здесь .

    • gitlab: 8.15.4

Наконец, изображение Gitlab, также основанное на источниках ( здесь ) и изображении Docker ( здесь ) Самера Наика .

Чтобы объединить эти изображения в один рабочий Gitlab, я использую следующий фрагмент docker-compose:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
...
services:
...
  redis:
    image: sameersbn/redis:latest
    volumes:
      - /opt/data/gitlab/redis:/var/lib/redis
   
  postgresql:
    image: sameersbn/postgresql:9.6-1
    environment:
      - DEBUG=true
      - DB_USER=gitlab
      - DB_PASS=password
      - DB_NAME=gitlabhq_production
      - DB_EXTENSION=pg_trgm
      - PG_TRUST_LOCALNET=true
    volumes:
      - /opt/data/gitlab/postgresql:/var/lib/postgresql
    ports:
      - "15432:5432"       
   
  gitlab:
    image: sameersbn/gitlab:8.15.4
    depends_on:
      - redis
      - postgresql
    ports:
      - "8082:80"
      - "8022:22"
    environment:
      - DEBUG=true
      - TZ=Europe/Berlin
      - GITLAB_TIMEZONE=Berlin
      - GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string
      - GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alphanumeric-string
      - GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string
      - GITLAB_HOST=localhost
      - GITLAB_PORT=8082
      - GITLAB_SSH_PORT=8022
       
      - DB_ADAPTER=postgresql
      - DB_HOST=postgresql
      - DB_PORT=5432
      - DB_USER=gitlab
      - DB_PASS=password
      - DB_NAME=gitlabhq_production
 
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      ...
    volumes:
      - /opt/data/gitlab/gitlab:/home/git/data
...

Смотрите мой репозиторий Gitlab здесь для полного файла docker-compose.

    • Дженкинс

Наконец-то появился сам Дженкинс . Я начал с «официального» изображения Дженкинса, но мне не хватало некоторых вариантов, поэтому я создал свой собственный образ, который можно найти здесь .

Что я изменил, так это добавление пакета ‘httping’ в ОС, и у меня установлен плагин GitLab по умолчанию, так как он мне нужен в моей настройке. Dockerfile выглядит так:

1
2
3
4
5
6
FROM jenkins:2.32.1
USER root
RUN apt-get update && apt-get install -y httping
 
COPY plugins.txt /usr/share/jenkins/plugins.txt
RUN /usr/local/bin/plugins.sh /usr/share/jenkins/plugins.txt

Теперь у меня есть все компоненты для стека. Полный файл Docker Compose можно найти здесь . Как вы могли заметить, я использую некоторые каталоги на хосте для хранения данных. Вы можете прочитать больше об этом здесь . Чтобы настроить это в Docker на Mac OS, перейдите в «Настройки Docker» и панель «Общий доступ к файлам» и добавьте каталоги, в которых вы хотите хранить данные:

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

Чтобы запустить стек, я просто выполняю ‘docker-compose up’, и запускаются различные контейнеры Docker:

Теперь я могу войти в Jenkins через браузер:

и начать использовать его.

В другом посте я покажу, как дополнительно настроить Jenkins, и пример, как настроить проект Spring Boot с этим стеком, используя «конвейер как код».