Установка Teamcity на Linux Ubuntu

Используемые термины: Teamcity, CI/CD, Ubuntu.
В нашей инструкции мы выполним развертывание Teamcity 2020.2.2 на Linux Ubuntu 20.04.
Системные требования
Подготовка системы
Установка Java
Установка MariaDB
Установка Teamcity
Настройка автоматического запуска
Установка агента
Читайте также
Системные требования
Требования к Teamcity не высокие, однако, необходимо обратить внимание на требования к программной части.
Требования к оборудованию
В основном, требования предъявляются к агентам.
- Процессор: рекомендуется процессор с 4-я ядрами и более.
- Память: рекомендуется использовать сервер с 4 Гб оперативной памяти.
- Диск: зависит от количества проектов и получаемых в результате сборки артефактов.
Программные требования
Teamcity является приложение Java и запускается на веб-сервере Tomcat. Полный список программных требований:
- Apache Tomcat версии 8,5 и выше.
- Java 8 — версия 8u16 (или 1.8.0_16) и выше.
- Операционная система Windows, Linux, FreeBSD, Solaris, HP-UX.
Поддерживаемые базы данных
Для работы Teamcity необходим сервер баз данных. Поддерживается достаточно большое количество СУБД:
- Oracle.
- MS SQL.
- HSQLDB.
- PostgreSQL.
- MySQL/MariaDB.
Подготовка системы
Для установки свежих пакетов, обновляем их список в репозиториях:
apt-get update
Задаем часовой пояс, например:
timedatectl set-timezone Europe/Moscow
* где Europe/Moscow — московское время. Список всех возможных зон смотрим командой timedatectl list-timezones.
Устанавливаем службу для автоматической синхронизации времени:
apt-get install chrony
А также разрешаем его автозапуск:
systemctl enable chrony
Если в нашем Ubuntu используется брандмауэр (по умолчанию только разрешающие правила), необходимо открыть порт 8111:
iptables -A INPUT -p tcp --dport 8111 -j ACCEPT
* 8111 — порт по умолчанию, на котором запускается Teamcity. При смене этого номера, нужно также добавить его в правила firewall.
Сохраняем правила с помощью утилиты iptables-persistent:
apt-get install iptables-persistent
Если в процессе установки мы отказались сохранять правила, выполняем команду:
netfilter-persistent save
Установка Java
Для работы Teamcity нужен Java. Вы воспользуемся пакетом openjdk. Для его установки вводим:
apt-get install default-jdk
* будет установлена последняя версия, максимально совместимая с используемой версией операционной системы Ubuntu.
Если в системе окажется несколько версий java, выберем последнюю. Для этого вводим команду:
update-alternatives --config java
... и выбираем в списке соответствующий вариант.
Если мы увидим что-то на подобие:
There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/java-11-openjdk-amd64/bin/java
Nothing to configure.
... то значит, что у нас только одна версия Java — продолжаем настройку сервера.
Посмотрим используемую версию java:
java -version
Мы должны увидеть что-то на подобие:
openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment (build 11.0.10+9-Ubuntu-0ubuntu1.20.04)
OpenJDK 64-Bit Server VM (build 11.0.10+9-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)
Java установлен.
Установка и настройка СУБД MariaDB
Как было сказано выше, для работы Teamcity нужна база данных. Мы воспользуемся MariaDB, которая является форком MySQL.
Для ее установки вводим:
apt-get install mariadb-server
Разрешим автозапуск сервера:
systemctl enable mariadb
Зададим пароль для суперпользователя:
mysqladmin -u root password
Подключимся к командной строке SQL:
mysql -uroot -p
Создаем базу данных для нашего приложения:
> CREATE DATABASE teamcity DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
* данной командой мы создадим базу teamcity.
Создадим пользователя для доступа к базе:
> GRANT ALL PRIVILEGES ON teamcity.* TO teamcity@localhost IDENTIFIED BY 'teamcity123';
* где:
- teamcity.* — разрешает доступ к любой таблице базы teamcity;
- teamcity@localhost — разрешает доступ пользователю teamcity с локального компьютера;
- teamcity123 — пароль для создаваемого пользователя.
Выходим из командной оболочки SQL:
> quit
Установка Teamcity
Создадим каталог, где будет размещаться наше приложение:
mkdir /opt/teamcity
Переходим на страницу загрузки Teamcity — начнется загрузка файла — прерываем ее. Копируем ссылку на скачивание архива:
С помощью нашей ссылке, скачиваем архив на компьютер:
wget -O TeamCity.tar.gz https://download.jetbrains.com/teamcity/TeamCity-2020.2.2.tar.gz?_ga=2.175301669.60879802.1613028860-1795692882.1612763354
* в данном примере мы указали опцию -O, чтобы скачанный архив был назван TeamCity.tar.gz.
Распаковываем архив
tar zxf TeamCity.tar.gz -C /opt/teamcity --strip-components 1
* этой командой мы распакуем содержимое архива TeamCity.tar.gz в каталог /opt/teamcity.
Запустим необходимые сервисы для работы приложения:
/opt/teamcity/bin/runAll.sh start
Пробуем открыть браузер и перейти по ссылке http://<IP-адрес нашего сервера>:8111 — мы должны увидеть стартовую страницу установки Teamcity. В форму для каталога данных вводим путь /opt/teamcity/.BuildServer:
После кликаем Proceed. Откроется страница выбора используемой СУБД — мы выбираем MySQL:
Для работы MySQL необходим дополнительный драйвер — просто нажимаем по Download JDBC driver:
Заполняем поля для подключения к базе данных:
* в нашем примере мы создали базу teamcity; для подключения мы указали пользователя teamcity и пароль teamcity123.
Нажимаем Proceed — начнется установка и настройка приложения. Ждем:
На следующей странице принимаем лицензионное соглашение и кликаем Continue:
Создаем нового пользователя с правами администратора:
* в данном примере мы создадим пользователя admin.
Откроется стартовая страница Teamcity:
Приложение установлено и работает.
Настройка автозапуска
На предыдущем шаге мы смогли запустить приложения, но сделали это вручную. После перезагрузки компьютера, оно не будет стартовать автоматически. Создадим службу в виде юнита в systemd.
Создаем пользователя, от которого будет работать наше приложение:
useradd teamcity -U -s /bin/false -d /opt/teamcity -m
* мы создадим пользователя teamcity с опциями:
- -U — будет создана группа с таким же именем.
- -s /bin/false — запрещает пользователю интерактивный вход в систему.
- -d /opt/teamcity — указывает путь до домашней директории.
- -m — сразу создает домашнюю директорию.
Для каталога с нашим приложением установим владельца — нашего созданного пользователя:
chown -R teamcity:teamcity /opt/teamcity
Создаем юнит в systemd:
vi /etc/systemd/system/teamcity.service
[Unit]
Description=Teamcity Service
After=network.target
[Service]
Type=forking
User=teamcity
Group=teamcity
ExecStart=/opt/teamcity/bin/runAll.sh start
ExecStop=/opt/teamcity/bin/runAll.sh stop
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
* где:
- User/Group — пользователь и группа пользователя, от кого будет запускаться сервис.
- ExecStart/ExecStop — пути к скриптам, которые запускают или останавливают работу Teamcity.
- Restart/RestartSec — задают поведение сервиса при необходимости выполнить перезапуск. В нашем примере выполнять при сбое с интервалом в 10 секунд.
Перечитаем конфигурацию systemd:
systemctl daemon-reload
Можно запустить наш сервис и разрешить его автозапуск:
systemctl start teamcity
systemctl enable teamcity
Проверить состояние службы можно командой:
systemctl status teamcity
После пробуем открыть приложение в браузере.
Установка агента
Для сборки кода на удаленной системе, нам необходимо установить на нее агента Teamcity. Мы рассмотрим инструкцию для его развертывания на Linux — Ubuntu, Debian, CentOS.
Сначала установим утилиты, которые нам понадобятся для выполнения установки.
а) Для Ubuntu / Debian:
apt-get install wget unzip default-jdk
б) Для CentOS:
yum install wget unzip java-11-openjdk-devel
* где:
- wget — утилита для загрузки файлов из сети по http.
- unzip — программа для распаковки zip-архивов.
- default-jdk/java-11-openjdk-devel — реализация java.
Скачиваем архив с агентом с нашего сервера:
wget http://192.168.1.15:8111/update/buildAgent.zip
* где 192.168.1.15 — это адрес нашего сервера.
* если мы получим сообщение об ошибке, что команда wget не найдена, необходимо установить одноименную утилиту — yum install wget или apt-get install wget.
Распакуем архив в каталог /opt/teamcity-agent:
unzip buildAgent.zip -d /opt/teamcity-agent
Копируем шаблонный файл с конфигурацией:
cp /opt/teamcity-agent/conf/buildAgent.dist.properties /opt/teamcity-agent/conf/buildAgent.properties
Агент готов к работе. Теперь создадим юнит в systemd для его запуска:
vi /etc/systemd/system/teamcity-agent.service
[Unit]
Description=TeamCity Build Agent
After=network.target
[Service]
Type=forking
PIDFile=/opt/teamcity-agent/logs/buildAgent.pid
ExecStart=/opt/teamcity-agent/bin/agent.sh start
ExecStop=/opt/teamcity-agent/bin/agent.sh stop
[Install]
WantedBy=multi-user.target
Перечитываем конфигурацию systemd:
systemctl daemon-reload
Разрешаем автозапуск агента teamcity и стартуем его:
systemctl enable teamcity-agent --now
Проверить состояние выполнения можно командой:
systemctl status teamcity-agent
По умолчанию агент работает на порту 9090. Если необходимо поменять номер, открываем конфигурационный файл:
vi /opt/teamcity-agent/conf/buildAgent.properties
Вставляем строку:
ownPort=9088
* в данном примере мы хотим запустить агента на порту 9088.
Перезагружаем сервис:
systemctl restart teamcity-agent
Читайте также
Вам могут быть интересны следующие инструкции: