Установка и настройка системы CI/CD Teamcity на Linux Ubuntu Server

Мы предоставляем услуги удаленного администрирования серверов

Установка и настройка системы CI/CD Teamcity на Linux Ubuntu Server

Обновлено и опубликовано Опубликовано:

Используемые термины: Teamcity, CI/CD, Ubuntu.

В нашей инструкции мы выполним развертывание Teamcity 2020.2.2 на Linux Ubuntu 20.04.

Системные требования

Требования к 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 [email protected] IDENTIFIED BY ‘teamcity123’;

* где:

  • teamcity.* — разрешает доступ к любой таблице базы teamcity;
  • [email protected] разрешает доступ пользователю teamcity с локального компьютера;
  • teamcity123 — пароль для создаваемого пользователя.

Выходим из командной оболочки SQL:

Установка Teamcity

Создадим каталог, где будет размещаться наше приложение:

mkdir /opt/teamcity

Переходим на страницу загрузки 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:

Указываем путь до каталога с данными Teamcity

После кликаем Proceed. Откроется страница выбора используемой СУБД — мы выбираем MySQL:

Выбираем СУБД, в которой Teamcity будет хранить информацию

Для работы MySQL необходим дополнительный драйвер — просто нажимаем по Download JDBC driver:

Скачиваем дополнительный драйвер для работы MySQL с Java

Заполняем поля для подключения к базе данных:

Указываем настройки для подключения к созданной базе в MariaDB

* в нашем примере мы создали базу teamcity; для подключения мы указали пользователя teamcity и пароль teamcity123.

Нажимаем Proceed — начнется установка и настройка приложения. Ждем:

Ждем окончания настройки приложения

На следующей странице принимаем лицензионное соглашение и кликаем Continue:

Принимаем лицензионное соглашение

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

Заполняем поля для создания администратора системы

* в данном примере мы создадим пользователя admin.

Откроется стартовая страница Teamcity:

Главная страница 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

Читайте также

Вам могут быть интересны следующие инструкции:

1. Установка Jenkins на CentOS

2. Установка веб-инструмента GitLab на Linux Ubuntu Server


   Мы принимаем