GoCD – это высокопроизводительная платформа непрерывной интеграции и доставки, которая автоматизирует процессы тестирования и релиз. Благодаря множеству расширенных функций (способность сравнивать сборки, визуализировать сложные рабочие процессы и автоматизировать отслеживание версий) GoCD – это гибкий инструмент, который может помочь разработчикам поставлять проверенное программное обеспечение в производственные среды.
Данный мануал поможет установить сервер и агент GoCD в Ubuntu 16.04.
Требования
Согласно рекомендациям проекта GoCD, вам понадобится:
- Сервер Ubuntu 16.04, 2 Гб RAM и 2 ядра минимум.
- Чтобы обрабатывать артефакты сборки без искажения данных, серверу понадобится выделенный раздел или диск, который будет служить местом хранения артефактов. В данном мануале для хранения артефактов используется /mnt/artifact-storage. Настроить такой диск вам поможет руководство Разделение и форматирование дисков в Linux.
- Пользователь с доступом к sudo и настроенный брандмауэр (вам поможет руководство по начальной настройке).
Установка сервера и агента GoCD
Для начала нужно загрузить и установить серверный и агентский пакеты из выделенного репозитория проекта GoCD.
Добавьте новый репозиторий в APT.
echo "deb https://download.gocd.org /" | sudo tee /etc/apt/sources.list.d/gocd.list
Также необходимо добавить GPG-ключ GoCD в APT, чтобы проверить подписи на пакетах GoCD. Вы можете загрузить ключ и добавить его в свою систему с помощью команды:
curl https://download.gocd.org/GOCD-GPG-KEY.asc | sudo apt-key add -
Затем нужно обновить индекс пакетов, чтобы система загрузила список новых пакетов. Для работы GoCD требуется Java 8. Пакет default-jre можно установить одновременно с сервером и агентом. Кроме того, нужно установить apache2-utils.
sudo apt-get update
sudo apt-get install default-jre go-server go-agent apache2-utils
Программы непрерывной интеграции и зависимости были установлены на сервер.
Подготовка GoCD к работе
Прежде чем начать работу с сервером GoCD, нужно подготовиться.
Для начала нужно открыть процессу GoCD доступ к точке монтирования артефактов, чтобы он мог хранить там наборы данных. Сервер непрерывной интеграции работает в системе как пользователь и группа go. Передайте этому пользователю права на точку монтирования /mnt/artifact-storage.
sudo chown -R go:go /mnt/artifact-storage
Теперь нужно создать файл для паролей и указать в нем учетные данные.
Плагин аутентификации GoCD использует формат пользователя, созданный утилитой htpasswd.
Опция –В включает алгоритм шифрования bcrypt. Опция –с помогает утилите htpasswd создать новый файл по указанному пути. В конце команды указано имя пользователя, для которого нужно создать пароль. Этот пользователь не является системным, потому вы можете использовать здесь любое имя.
sudo htpasswd -B -c /etc/go/authentication 8host
Вам будет предложено ввести и подтвердить пароль для нового пользователя. Имя пользователя и зашифрованная версия пароля будут записаны в файл:
New password:
Re-type new password:
Adding password for user 8host
Примечание: Вы можете добавить в файл больше учетных данных. Однако после добавления первого пользователя команду htpasswd нужно вызывать без флага –с, иначе она создаст новый файл, который заменит существующий файл паролей.
sudo htpasswd -B /etc/go/authentication next_user
Теперь можно запустить процессы агента и сервера GoCD.
sudo systemctl start go-server go-agent
Сначала нужно убедиться, что процессы запустились успешно:
sudo systemctl status go-*
Если это так, команда вернет такой вывод:
go-agent.service - LSB: Go Agent
Loaded: loaded (/etc/init.d/go-agent; bad; vendor preset: enabled)
Active: active (exited) since Thu 2017-07-27 19:39:18 UTC; 1min 36s ago
Docs: man:systemd-sysv-generator(8)
Process: 8911 ExecStart=/etc/init.d/go-agent start (code=exited, status=0/SUCCESS)
. . .
Jul 27 19:39:18 go5 systemd[1]: Started LSB: Go Agent.
go-server.service - LSB: Go Server
Loaded: loaded (/etc/init.d/go-server; bad; vendor preset: enabled)
Active: active (exited) since Thu 2017-07-27 19:39:33 UTC; 1min 21s ago
Docs: man:systemd-sysv-generator(8)
Process: 8867 ExecStop=/etc/init.d/go-server stop (code=exited, status=0/SUCCESS)
Process: 8907 ExecStart=/etc/init.d/go-server start (code=exited, status=0/SUCCESS)
. . .
Jul 27 19:39:33 go5 systemd[1]: Started LSB: Go Server.
Затем нам нужно дождаться, когда сервис свяжется с портами 8153 и 8154. По первому порту GoCD прослушивает HTTP-трафик, а по второму – трафика HTTPS. Хотя процессы запустились, они, возможно, еще не начали принимать веб-трафик.
Чтобы узнать, какие порты прослушиваются в настоящее время, введите:
sudo watch netstat -plnt
Эта команда проверит прослушиваемые TCP-порты и будет обновлять экран каждые 2 секунды. Когда GoCD начинает прослушивать порты 8153 и 8154, экран должен выглядеть так:
Every 2.0s: netstat -plnt Thu Jul 27 20:16:20 2017
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1736/sshd
tcp6 0 0 :::22 :::* LISTEN 1736/sshd
tcp6 0 0 :::8153 :::* LISTEN 8942/java
tcp6 0 0 :::8154 :::* LISTEN 8942/java
Чтобы остановить команду, нажмите CTRL-C.
Теперь, когда программа GoCD работает, можно открыть HTTPS-порт 8154 в брандмауэре UFW. Порт HTTP открывать не нужно, так как программа не должна поддерживать незашифрованных соединений.
sudo ufw allow 8154
Важно! После того как порт 8154 будет разблокирован в брандмауэре, веб-интерфейс GoCD будет доступен на всех интерфейсах. Хотя интерфейс блокируется с помощью файла /etc/go/authentication, в настоящее время GoCD не поддерживает парольную аутентификацию. С настройки аутентификации начнется следующий раздел, потому рекомендуем перейти к нему как можно скорее.
Настройка парольной аутентификации
Теперь можно подключиться к сервису в веб-браузере.
Для этого укажите протокол https://, затем домен или IP-адрес сервера, а затем порт :8154.
https://server_domain_or_IP:8154
Вероятно, браузер отобразит предупреждение о том, что SSL-сертификат данного сервиса не подписан доверенным центром сертификации. Это происходит потому, что программа GoCD использует самоподписанные сертификаты. Чтобы добавить ее в исключения и продолжить, нажмите ADVANCED (или подобную опцию).
Подключившись к GoCD, вы попадете на страницу настройки конвейера. Сначала нужно настроить поддержку парольной аутентификации. Нажмите ADMIN в верхнем меню навигации, затем в подменю Security выберите Authorization Configuration.
На следующей странице нажмите кнопку Add в правом верхнем углу. Появится форма, в которой вы сможете указать данные о файле аутентификации.
Введите любое имя для нового метода авторизации в поле Id. В разделе Plugin Id оставьте «Password File Authentication Plugin for GoCD». В поле Password file path укажите путь к файлу аутентификации, /etc/go/authentication. Нажмите Check connection, чтобы убедиться, что GoCD может подключиться к файлу.
Если GoCD выводит сообщение «Connection OK», нажмите Save, чтобы включить аутентификацию.
Вам будет предложено пройти аутентификацию. В первый раз форма входа может быть представлена в виде стандартного окна входа в браузер; также программа может перенаправить вас на страницу входа GoCD. Войдите с помощью своих учетных данных.
Настройка URL-адреса сайта и места хранения артефактов
Нажмите ADMIN в верхнем меню и выберите Server Configuration.
Вы попадете на главную страницу конфигурации, где сейчас нужно изменить некоторые параметры.
Найдите Site URL в разделе Server Management. GoCD предоставляет два параметра, которые определяют URL сервера непрерывной интеграции: Site URL и Secure Site URL. Первый параметр – стандартный URL-адрес, используется в большинстве случаев. Второй параметр используется в случаях, если Site URL настроен на поддержку HTTP, а GoCD передает конфиденциальные данные. Если в параметре Site URL указан адрес HTTPS, все соединения шифруются, и параметр Secure Site URL включать не нужно.
Поскольку брандмауэр открывает доступ только к HTTPS-порту, в параметре Site URL нужно указать протокол https://, а затем домен или IP-адрес сервера и порт 8154. Параметр Secure Site URL оставьте пустым, обычный URL-адрес и так поддерживает шифрование.
Затем найдите раздел Pipeline Management. В Artifacts Directory Location укажите точку монтирования /mnt/artifact-storage. Также можно при желании изменить политику удаления артефактов GoCD. Чтобы управлять артефактами вручную, оставьте значение Never.
Чтобы сохранить новые настройки, нажмите SAVE.
Интерфейс может вывести предупреждение в верхней строке меню. Чтобы открыть его, кликните по красному индикатору Warning. В предупреждении сообщается, что GoCD сможет использовать /mnt/artifact-storage только после перезагрузки.
The change in the artifact directory location will not take effect until GoCD is restarted [Jul 29 16:43:12]
Чтобы закрыть предупреждение, нажмите Х.
Прежде чем перезапустить сервер, убедитесь, что агент был успешно зарегистрирован на сервере. Нажмите на AGENTS в верхнем меню. Вы попадете в список агентов.
Процесс агента успешно зарегистрирован на сервере и имеет статус «Idle». Это означает, что агент включен, но у него нет заданий.
Убедившись, что агент зарегистрирован, перезапустите сервер GoCD. Вернитесь в командную строку и введите:
sudo systemctl restart go-server
Заключение
Сервер и агент GoCD успешно установлены на сервер Ubuntu 16.04. Артефакты будут храниться в выделенном пространстве. Интерфейс защищен парольной аутентификацией.
Теперь вы можете защитить установку с помощью SSL-сертификата.
Читайте также: Защита GoCD с помощью SSL-сертификата Let’s Encrypt в Ubuntu 16.04