Как установить Concourse CI в Ubuntu 16.04

Вступление

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

В этом руководстве мы покажем, как установить Concourse CI на сервер Ubuntu 16.04. Мы настроим базу данных PostgreSQL для использования в качестве бэкэнда, загрузим и установим двоичные файлы Concourse, а затем настроим веб-и рабочие процессы, которые позволят нам создавать и выполнять конвейеры непрерывной интеграции.

Предпосылки

Для выполнения этого руководства вам понадобится сервер Ubuntu 16.04 с не менее * 1 ГБ ОЗУ *. Настройте некорневого пользователя + sudo + и брандмауэр, как описано в первоначальной настройке сервера Ubuntu 16.04. руководство, прежде чем продолжить.

Установите и настройте PostgreSQL

Прежде чем мы загрузим двоичные файлы Concourse CI, мы должны установить экземпляр PostgreSQL на нашем сервере. Concourse будет использовать базу данных PostgreSQL для хранения своих конвейерных данных.

Сначала обновите локальный индекс пакета, чтобы обновить локальное представление доступных файлов. После этого установите пакеты + 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 +. Concourse называет свой основной веб-узел и центр API «ATC», что означает «управление воздушным движением». Мы можем создать эту базу данных и назначить владельца для пользователя базы данных + concourse +, чтобы обеспечить соответствующий доступ:

sudo -u postgres createdb --owner=concourse atc

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

Загрузите и установите исполняемые файлы Concourse CI

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

Самый простой способ найти их - это страница Concourse CI. В разделе * Downloads *, в разделе * Concourse Binaries *, щелкните правой кнопкой мыши и скопируйте расположение ссылки для загрузки платформы * Linux *. Держите эту страницу открытой, так как мы скоро вернемся к ней.

На вашем сервере перейдите в каталог + / tmp + и затем используйте + curl +, чтобы скачать скопированную ссылку:

cd /tmp
curl -LO

Далее мы загрузим последнюю версию `+ fly + 'клиента командной строки. Вернитесь на Concourse CI страницу загрузки, в разделе * Downloads *, в разделе * Fly Binaries *, щелкните правой кнопкой мыши и скопируйте расположение ссылки для * Linux * платформа загрузки.

На вашем сервере снова загрузите скопированную ссылку в + / tmp + с помощью + curl +:

cd /tmp
curl -LO

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

file *linux_amd64 | grep executable
Outputconcourse_linux_amd64: ELF 64-bit LSB , 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 , 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
Output

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

Создание активов конфигурации Concourse CI

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

Прежде чем мы начнем, создайте каталог конфигурации, в котором мы можем хранить все соответствующие файлы:

sudo mkdir /etc/concourse

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

Создание файлов ключей

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

Https://concourse.ci/architecture.html#architecture-atc[ATC] является основным концентратором, который обрабатывает веб-запросы и запросы API и координирует конвейеры. Workers управляет контейнерами для запуска задач CI / CD, определенных в конвейере. Https://concourse.ci/architecture.html#architecture-tsa[TSA] - это настраиваемый SSH-сервер, который безопасно регистрирует работников в УВД.

Несмотря на то, что мы будем запускать все эти компоненты на одном сервере, работник и 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

Если мы проверим в каталоге concourse, мы увидим, что теперь доступны три открытых и три закрытых ключа:

ls -l /etc/concourse
Outputtotal 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 определит, какие работники имеют право подключаться к системе, проверив файл авторизованного ключа. Нам нужно предварительно заполнить файл авторизованных ключей открытым ключом работника, который мы сгенерировали, чтобы он мог успешно подключиться.

Поскольку это наш единственный работник, мы можем просто скопировать файл:

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

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

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

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

Через некоторое время мы будем создавать файлы модулей + systemd + для определения и управления нашими сервисами Concourse. Файлы модулей могут считывать переменные среды из файла и передавать их процессу при его запуске. Мы создадим файл, который определяет переменные для процесса Concourse + web +, который запускает компоненты ATC и TSA, и еще один файл для процесса Concourse + worker +.

Создайте и откройте файл для процесса + web +, набрав:

sudo nano /etc/concourse/web_environment

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

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

/ И т.д. / подвальный / web_environment

# 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. Здесь вы можете выбрать любое имя пользователя и пароль. Вы можете изменить учетные данные администратора в любое время, изменив эти значения и перезапустив службу:

/ И т.д. / подвальный / web_environment

# 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=
CONCOURSE_BASIC_AUTH_PASSWORD=
CONCOURSE_EXTERNAL_URL=http://:8080

Сохраните и закройте файл, когда вы закончите.

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

sudo nano /etc/concourse/worker_environment

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

/ И т.д. / подвальный / worker_environment

# 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:2222

Сохраните и закройте файл, когда вы закончите.

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

Прежде чем мы продолжим, мы должны создать специального пользователя Linux для запуска процесса Concourse + 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

Наши ресурсы конфигурации теперь принадлежат системному пользователю + concourse + с ограниченными правами для других пользователей.

Создание системных файлов модулей для Интернета и рабочих процессов.

Теперь мы готовы определить файлы модулей Concourse CI, которые будут запускать и управлять процессами приложения. Мы создадим один файл для процесса + web +, который обрабатывает компоненты TSA и ATC, и один файл для процесса `+ worker + ', который обрабатывает контейнеры для задач конвейера.

Создание файла веб-модуля Concourse

Начните с создания файла + concourse-web.service в файле` + / etc / systemd / system`:

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

Внутри вставьте следующее содержимое:

/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, как привязать устройство к порядку запуска системы, если мы настроим службу для запуска при загрузке.

Сохраните и закройте файл, когда вы закончите.

Создание файла рабочей группы Concourse

Затем откройте аналогичный файл, чтобы определить процесс + worker +:

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

Внутри вставьте следующее содержимое:

/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

Этот модуль работает аналогично модулю + concourse-web +. На этот раз мы сообщаем системе запустить процесс + worker + после запуска процесса Concourse + web +. Процесс + worker + запускается как пользователь + root + вместо + concourse +, потому что он требует административных привилегий для управления контейнером. Мы загружаем файл + worker_environment + и используем команду + concourse worker + для запуска процесса.

Сохраните и закройте файл, когда вы закончите.

Настройте брандмауэр и запустите службы

Теперь, когда у нас есть файлы модулей, мы можем разрешить доступ через брандмауэр и запускать службы.

Процесс + 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
Output● concourse-web.service - Concourse CI web process (ATC and TSA)
  Loaded: loaded (/etc/systemd/system/concourse-web.service; disabled; vendor preset: enabled)
  Active:  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:  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":""}}
. . .

Убедитесь, что обе службы читают «активные (работающие)» и что строки журнала не содержат явных ошибок. Обратите особое внимание на сервис + web +, чтобы убедиться, что строки журнала не указывают на проблемы с подключением к базе данных.

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

sudo systemctl enable concourse-web concourse-worker

Проверьте доступ в командной строке и через веб-интерфейс

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

Проверка доступа в командной строке

Во-первых, давайте проверим, что мы можем получить доступ к сервису Concourse с помощью клиента командной строки + fly +.

Мы должны войти в систему, используя административные имя пользователя и пароль, которые мы настроили в файле + / etc / concourse / web_environment +, используя субкоманду + login +. Один двоичный файл + fly + может использоваться для связи и управления несколькими серверами Concourse, поэтому команда использует концепцию, называемую «цели», в качестве псевдонима для разных серверов. Мы назовем нашу цель «local» для входа на локальный сервер Concourse:

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

Вам будет предложено ввести имя пользователя и пароль для команды + main +, которые мы установили в файле + web_environments +. После ввода учетных данных должна отображаться «сохраненная цель»:

Outputlogging in to team 'main'

username:
password:

target saved

Это указывает на то, что мы смогли успешно войти в систему. Пока мы здесь, давайте проверим, что рабочий процесс смог успешно зарегистрироваться в компоненте TSA, введя:

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

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

Проверка доступа через веб-интерфейс

Затем проверьте доступ в Интернет, посетив IP-адрес вашего сервера, а затем в браузере введите «+: 8080 +»:

http://:8080

Вы должны иметь доступ к начальной странице CI Concourse:

изображение: https: //assets.digitalocean.com/articles/concourseci_install_1604/initial_screen.png [первый экран Concourse CI]

Отсюда вы можете загрузить команду + fly + на свой локальный компьютер в качестве клиента командной строки, щелкнув изображение, соответствующее вашей платформе. Это позволяет вам управлять средой CI без входа на сервер. Не забудьте указать публичный IP-адрес вашего сервера вместо + 127.0.0.1 + при первом входе в систему с помощью + fly + (перед удаленным входом прочитайте предупреждение о шифровании ниже).

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

изображение: https: //assets.digitalocean.com/articles/concourseci_install_1604/select_main_team.png [Concourse CI select main team]

На следующей странице вам будет предложено ввести свои учетные данные.

После ввода учетных данных, которые вы настроили в файле + web_environment +, вы войдете в систему и вернетесь к стандартному интерфейсу заполнителя:

изображение: https: //assets.digitalocean.com/articles/concourseci_install_1604/placeholder_interface.png [Concourse CI select main team]

Как только вы отправите свою конвейерную конфигурацию на сервер с помощью + fly +, этот экран будет заменен интерфейсом, где вы можете отслеживать свою конвейерную активность.

Заключение

В этом руководстве мы установили PostgreSQL и двоичные файлы Concourse, настроили ключи шифрования и настроили Concourse и сетевой доступ. После запуска сервисов мы вошли в систему локально с помощью команды + fly + и получили доступ к веб-интерфейсу для подтверждения функциональности.

Как упоминалось ранее, прежде чем использовать Concourse для реальной работы, важно защитить веб-интерфейс и шлюзы API с помощью SSL. Следуйте нашему руководству по https://www.digitalocean.com/community/tutorials/how-to-secure-concourse-ci-with-ssl-using-nginx-on-ubuntu-16-04 настройке обратного прокси-сервера SSL для Concourse CI с Nginx] для настройки безопасного доступа к вашему серверу перед удаленным взаимодействием с сервером.

Чтобы узнать, как использовать + fly + для добавления конвейеров на ваш сервер Concourse, посмотрите пример helhello world ”в документации Concourse.

Related