Установка Concourse CI в Ubuntu 16.04

Concourse CI – это современная масштабируемая система непрерывной интеграции, предназначенная для автоматизации конвейеров тестирования. Учитывая преимущества предыдущих систем CI, Concourse стремится упростить управление конвейерами и исключить схему снежинки, чтобы управлять сервером тестирования было так же просто, как кодом, который он обрабатывает.

Данное руководство поможет установить Concourse CI на сервер Ubuntu 16.04 с бэкэндом PostgreSQL.

Требования

  • Сервер Ubuntu 16.04.
  • 1 Гб RAM.
  • Пользователь с доступом к sudo.
  • Настроенный брандмауэр.

Все необходимые инструкции можно найти в этом мануале.

1: Установка и настройка PostgreSQL

Прежде чем приступить к установке Concourse CI, нужно настроить на сервере СУБД PostgreSQL, которая будет хранить данные Concourse.

Обновите индекс пакетов, а затем загрузите пакеты postgresql и postgresql-contrib из стандартного репозитория Ubuntu.

sudo apt-get update
sudo apt-get install postgresql postgresql-contrib

После установки БД нужно создать специального пользователя PostgreSQL  для управления данными Concourse (в руководстве пользователь будет называться concourse). Используйте sudo, чтобы получить доступ к системному пользователю postgres, который является администратором СУБД.

sudo -u postgres createuser concourse

По умолчанию Concourse пытается подключиться к базе данных atc. Главный веб-интерфейс и API Concourse называются ATC (расшифровывается как air traffic control). Создайте эту базу данных и передайте права на неё пользователю concourse:

sudo -u postgres createdb --owner=concourse atc

Теперь можно переходить к установке бинарных файлов Concourse CI.

2: Загрузка и установка Concourse CI

Concourse предоставляет ссылки на скомпилированные исполняемые файлы для платформы Linux на своем сайте и на GitHub.

Проще всего их найти на официальном сайте проекта. В разделе Concourse Binaries откройте Downloads, найдите пакет для Linux, щелкните правой кнопкой мыши и скопируйте ссылку. Пока что не закрывайте страницу.

На сервере откройте каталог /tmp и загрузите пакет с помощью curl.

cd /tmp
curl -LO URL_на_бинарные_файлы_concourse

Затем нужно загрузить последнюю версию клиента командной строки fly. Вернитесь на сайт Concourse в раздел Downloads, в разделе Fly Binaries найдите пакет для Linux и скопируйте ссылку на него.

Вернитесь на сервер и загрузите пакет в каталог /tmp:

cd /tmp
curl -LO URL_на_бинарные_файлы_fly

Если запрос на загрузку привел к ошибке, вместо бинарной программы файлы будут содержать сообщение об ошибке HTTP. Убедитесь, что файлы на самом деле являются двоичными исполняемыми файлами; для этого введите:

file *linux_amd64 | grep executable
concourse_linux_amd64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=3f24eae5da950594d8d1aaea7631bc20883afba3, not stripped
fly_linux_amd64:       ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped

Если вы получили такой вывод, значит, файлы являются исполняемыми. Откройте права на исполнение этих файлов, удалите суффикс _linux_amd64 и переместите их в /usr/local/bin.

chmod +x concourse* fly*
sudo mv concourse* /usr/local/bin/concourse
sudo mv fly* /usr/local/bin/fly

Чтобы убедиться, что все будет работать должным образом, запросите версию загруженных программ.

cd ~
concourse --version
fly --version
3.0.1
3.0.1

3: Конфигурации Concourse CI

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

Создайте каталог для конфигурации:

sudo mkdir /etc/concourse

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

Генерирование ключей

Concourse состоит из нескольких компонентов, которые должны иметь возможность взаимодействовать друг с другом.

ATC – это главный концентратор, который обрабатывает веб-запросы, API и конвейеры. Воркеры (workers) управляют контейнерами для выполнения задач CI/CD, определенных в конвейере. TSA – это настраиваемый SSH-сервер, который поддерживает взаимодействие воркеров с ATC.

Даже несмотря на то, что все эти компоненты будут работать на одном сервере, воркерам и TSA необходимо надежное соединение. Для этого понадобится три набора ключей:

  • пара ключей для TSA;
  • пара ключей для воркеров;
  • пара ключей для подписи токенов пользовательских сеансов и взаимодействия TSA и ATC.

Поскольку они будут использоваться автоматически при запуске компонентов, создать эти ключи нужно без пароля. чтобы создать три пары ключей в каталоге /etc/concourse, введите:

sudo ssh-keygen -t rsa -q -N '' -f /etc/concourse/tsa_host_key
sudo ssh-keygen -t rsa -q -N '' -f /etc/concourse/worker_key
sudo ssh-keygen -t rsa -q -N '' -f /etc/concourse/session_signing_key

Просмотрите каталог и убедитесь, что в нем есть три набора ключей:

ls -l /etc/concourse
total 24
-rw------- 1 root root 1679 May 11 17:19 session_signing_key
-rw-r--r-- 1 root root  394 May 11 17:19 session_signing_key.pub
-rw------- 1 root root 1679 May 11 17:19 tsa_host_key
-rw-r--r-- 1 root root  394 May 11 17:19 tsa_host_key.pub
-rw------- 1 root root 1675 May 11 17:19 worker_key
-rw-r--r-- 1 root root  394 May 11 17:19 worker_key.pub

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

Поскольку в данной настройке есть только один воркер, можно просто скопировать файл открытого ключа.

sudo cp /etc/concourse/worker_key.pub /etc/concourse/authorized_worker_keys

Создание конфигурационных файлов среды

Concourse не читает конфигурационный файл. Однако он может принимать значения конфигурации, исходя их переменных среды, переданных при запуске процесса.

Позже нужно будет создать unit-файлы systemd, чтобы определить сервисы Concourse и управлять ими. Эти файлы могут читать переменные среды из файла и передавать их процессу при его запуске.

Создайте файл, который определяет переменные процесса web (отвечает за запуск ATC и TSA) и worker.

Начнем с файла для процесса web:

sudo nano /etc/concourse/web_environment

В нем нужно определить переменные среды, необходимые компонентам ATC и TSA. Каждая переменная начинается с CONCOURSE_.

Для начала нужно установить постоянные значения, которые не будут меняться. Эти переменные будут определять местоположение закрытых ключей TSA и сессий, файла authorized_worker_keys и сокета PostgreSQL:

# These values can be used as-is
CONCOURSE_SESSION_SIGNING_KEY=/etc/concourse/session_signing_key
CONCOURSE_TSA_HOST_KEY=/etc/concourse/tsa_host_key
CONCOURSE_TSA_AUTHORIZED_KEYS=/etc/concourse/authorized_worker_keys
CONCOURSE_POSTGRES_SOCKET=/var/run/postgresql

Далее нужно определить переменные, которые будут меняться. CONCOURSE_EXTERNAL_URL определяет IP-адрес и порт, к которому будет привязан сервис. Укажите внешний IP-адрес сервера и порт 8080.

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

# These values can be used as-is
CONCOURSE_SESSION_SIGNING_KEY=/etc/concourse/session_signing_key
CONCOURSE_TSA_HOST_KEY=/etc/concourse/tsa_host_key
CONCOURSE_TSA_AUTHORIZED_KEYS=/etc/concourse/authorized_worker_keys
CONCOURSE_POSTGRES_SOCKET=/var/run/postgresql
# Change these values to match your environment
CONCOURSE_BASIC_AUTH_USERNAME=8host
CONCOURSE_BASIC_AUTH_PASSWORD=8hostblog
CONCOURSE_EXTERNAL_URL=http://servers_public_IP:8080

Сохраните и закройте файл.

Создайте файл среды для процесса worker:

sudo nano /etc/concourse/worker_environment

В этом файле нужно указать местонахождение закрытого ключа воркера, открытого ключа TSA и каталога, в котором воркер будет хранить свои файлы. Также нужно указать адрес, по которому можно получить доступ к TSA (в данном случае это localhost). Вы можете использовать приведенные ниже значения без изменений:

# These values can be used as-is
CONCOURSE_WORK_DIR=/var/lib/concourse
CONCOURSE_TSA_WORKER_PRIVATE_KEY=/etc/concourse/worker_key
CONCOURSE_TSA_PUBLIC_KEY=/etc/concourse/tsa_host_key.pub
CONCOURSE_TSA_HOST=127.0.0.1

Сохраните и закройте файл.

Создание системного пользователя и настройка привилегий

Теперь нужно создать специального системного пользователя Linux для процесса web. Это позволит запускать сервисы с выходом в интернет с ограниченными привилегиями.

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

sudo adduser --system --group concourse

Передайте новому пользователю права на каталог /etc/concourse:

sudo chown -R concourse:concourse /etc/concourse

Файлы среду содержат конфиденциальные данные (например, учетные данные администратора сервера CI). Отредактируйте привилегии на эти файлы. Обычные пользователи не должны иметь доступа к ним.

sudo chmod 600 /etc/concourse/*_environment

4: Создание unit-файлов для Concourse CI

Теперь нужно создать unit-файл для процесса web, который отвечает за работу TSA и ATC, и worker, который обрабатывает задачи конвейеров.

Unit-файл для процесса web

Создайте файл concourse-web.service в /etc/systemd/system:

sudo nano /etc/systemd/system/concourse-web.service

Вставьте в файл следующие параметры:

[Unit] Description=Concourse CI web process (ATC and TSA)
After=postgresql.service
[Service] User=concourse
Restart=on-failure
EnvironmentFile=/etc/concourse/web_environment
ExecStart=/usr/local/bin/concourse web
[Install] WantedBy=multi-user.target

Первый раздел содержит описание процесса web и указывает, что его нужно запускать после PostgreSQL.

Раздел [Service] указывает, как будет запускаться сервис. Сервис будет работать как пользователь concourse; systemd будет автоматически перезапускать его в случае сбоя. Также в файле нужно указать файл web_environment, который содержит переменные среды данного процесса. Чтобы запустить процесс, нужно вызвать concourse web.

Раздел [Install] помогает systemd понять порядок запуска сервисов (если этот сервис нужно добавить в автозагрузку).

Сохраните и закройте файл.

Unit-файл для процесса worker

Создайте файл:

sudo nano /etc/systemd/system/concourse-worker.service

Вставьте в него такие параметры:

[Unit] Description=Concourse CI worker process
After=concourse-web.service
[Service] User=root
Restart=on-failure
EnvironmentFile=/etc/concourse/worker_environment
ExecStart=/usr/local/bin/concourse worker
[Install] WantedBy=multi-user.target

Этот unit-файл работает так же, как предыдущий. Он запускает процесс worker после процесса web. Процесс worker запускается как пользователь root, а не concourse, потому что ему нужны привилегии администратора для управления контейнерами. Для определения среды используется файл worker_environment, а для запуска процесса – команда concourse worker.

Сохраните и закройте файл.

5: Настройка брандмауэра и запуск сервисов

Процесс web прослушивает соединения по порту 8080. Разблокируйте его в ufw.

sudo ufw allow 8080

Контейнерам процесса worker необходим доступ к форвардингу, чтобы они могли взаимодействовать с интернетом и разрешать DNS-запросы. Для этого введите:

sudo ufw default allow routed

Теперь можно запустить сервисы:

sudo systemctl start concourse-web concourse-worker

Проверьте состояние сервисов:

sudo systemctl status concourse-web concourse-worker
concourse-web.service - Concourse CI web process (ATC and TSA)
Loaded: loaded (/etc/systemd/system/concourse-web.service; disabled; vendor preset: enabled)
Active: active (running) since Thu 2017-05-11 20:18:16 UTC; 1min 40s ago
Main PID: 9954 (concourse)
Tasks: 7
Memory: 100.0M
CPU: 2.058s
CGroup: /system.slice/concourse-web.service
└─9954 /usr/local/bin/concourse web
May 11 20:19:51 testatc concourse[9954]: {"timestamp":"1494533991.818562269","source":"tsa","message":"tsa.connection.keepalive","log_level":1,"data":{"remote":"127.0.0.1:48764","session":"1","type":"keepalive"}}
. . .
concourse-worker.service - Concourse CI worker process
Loaded: loaded (/etc/systemd/system/concourse-worker.service; disabled; vendor preset: enabled)
Active: active (running) since Thu 2017-05-11 20:18:16 UTC; 1min 39s ago
Main PID: 9960 (concourse)
Tasks: 9
Memory: 619.6M
CPU: 20.353s
CGroup: /system.slice/concourse-worker.service
└─9960 /usr/local/bin/concourse worker
May 11 20:19:12 testatc concourse[9960]: {"timestamp":"1494533952.909682751","source":"tsa","message":"tsa.connection.channel.forward-worker.heartbeat.start","log_level":1,"data":{"remote":"127.0.0.1:48764","session":"1.1.1.7","worker-address":"127.0.0.1:38993","worker-platform":"linux","worker-tags":""}}
. . .

В выводе должна быть строка «active (running)», а в разделе логов не должно быть ошибок. Уделите особое внимание сервису web: его логи не должны содержать сообщений об ошибках подключения к БД.

Если сервисы запущены успешно, добавьте их в автозагрузку:

sudo systemctl enable concourse-web concourse-worker

6: Проверка доступа

Теперь нужно убедиться, что вы можете получить доступ к сервисам Concourse.

Проверка доступа через командную строку

Для начала убедитесь, что можете получить доступ к сервису Concourse с помощью клиента командной строки fly.

Авторизуйтесь с помощью команды login, используя имя пользователя и пароль администратора, которые указаны в файле /etc/concourse/web_environment. Один клиент fly может взаимодействовать с несколькими серверами Concourse; в качестве алиасов для различных серверов команда использует так называемые цели (targets). В данном случае нужно использовать цель local, чтобы подключиться к локальному серверу Concourse.

fly -t local login -c http://127.0.0.1:8080

Укажите имя пользователя и пароль группы main (из файла web_environments). После этого вы увидите:

logging in to team 'main'
username: 8host
password:
target saved

Это значит, что вы можете подключиться к серверу. Также нужно проверить взаимодействие воркера и TSA:

fly -t local workers
name              containers  platform  tags  team  state    version
concourse-server  0           linux     none  none  running  1.0

Команда fly позволяет настроить конвейеры и управлять сервисом Concourse CI. Команда fly help предоставляет справку.

Доступ через веб-интерфейс

Затем проверьте доступ к серверу, посетив IP-адрес и порт 8080 в веб-браузере:

http://servers_public_IP:8080

Вы должны увидеть приветственную страницу Concourse:

no pipelines configured
first, download the CLO tools […]

Здесь вы можете загрузить fly как клиент командной строки на локальный компьютер (для этого кликните по соответствующей платформе). Так вы сможете управлять средой CI. При первом подключении с помощью fly нужно указать внешний IP-адрес сервера, а не 127.0.0.1 (прочитайте предупреждение о шифровании (ниже), прежде чем войти в систему удаленно).

Если вы нажмете ссылку login в верхнем правом углу, вы можете войти в веб-интерфейс. Во-первых, будет предложено выбрать группу. Группа main является единственным доступным вариантом по умолчанию.

Затем интерфейс запросит учетные данные.

Предупреждение: Веб-интерфейс и шлюз API, предоставляемые Concourse CI, по умолчанию не шифруются, поэтому ваше имя пользователя и пароль будут отправлены на сервер в виде обычного текста. Если вы планируете использовать эту установку на постоянной основе, защитите веб-интерфейс с помощью SSL перед входом в систему. Следуйте нашим инструкциям по настройке прокси-сервера Nginx с поддержкой SSL для Concourse CI.

После этого вы получите доступ к интерфейсу.

Заключение

Этот мануал научил вас устанавливать PostgreSQL и бинарные файлы Concourse, генерировать ключи, настраивать сетевой доступ Concourse и пользоваться клиентом командной строки fly.

Прежде чем использовать Concourse в разработке, настройте шифрование шлюзов с помощью SSL.

Читайте также: SSL-шифрование Concourse CI с помощью Nginx в Ubuntu 16.04

Больше информации о fly можно найти в документации Concourse.

Tags: , ,

Добавить комментарий