Compare commits

..

10 Commits
v1.0 ... master

3 changed files with 70 additions and 8 deletions

View File

@ -1,4 +1,4 @@
FROM jetbrains/teamcity-agent FROM jetbrains/teamcity-agent
RUN curl -sL https://deb.nodesource.com/setup_11.x | bash - \ RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - \
&& apt-get install -y nodejs build-essential nano && apt-get install -y nodejs build-essential nano

View File

@ -1,8 +1,9 @@
# Teamcity # Teamcity
Внутренний ТС, работающий в докере. _Запускаем в докере, чтобы запускать в докере!_
Запискаем докер, когда запускаем докер! Подробнее о сервере, установке ТС, пользователе и правах в [Confluence](https://confluence.archive.systems/display/PRO/TeamCity).
Внутренний ТС. Подробнее в (Confluence)[https://confluence.archive.systems/display/PRO/TeamCity]
## Запуск на продакшене
Переименовать в стандартное названия для docker-compose: Переименовать в стандартное названия для docker-compose:
```bash ```bash
cp prod.yml docker-compose.yml cp prod.yml docker-compose.yml
@ -15,27 +16,32 @@ docker-compose up -d --force-recreate
``` ```
## Запуск на локальной машине в исследовательских целях ## Запуск на локальной машине в исследовательских целях
Для нашей версии (3.4) нужно доп. средства: Для нашей версии (docker-compose 3.4) нужно доп. средства. Подробнее о подходе с мерджем файлов [тут](https://stackoverflow.com/a/55033027).
Ставим:
* [pipenv](https://docs.pipenv.org/en/latest/) * [pipenv](https://docs.pipenv.org/en/latest/)
* [docker-compose addons](https://github.com/dnephin/compose-addons#docker-compose-addons) * [docker-compose addons](https://github.com/dnephin/compose-addons#docker-compose-addons)
Выполняем:
```bash ```bash
pipenv install pipenv install
dcao-merge -o docker-compose.yml prod.yml local.yml dcao-merge -o docker-compose.yml prod.yml local.yml
``` ```
и запускаем. Подробнее [тут](https://stackoverflow.com/a/55033027).
Запускаем (как для продакшена).
## Разные нюансы compose-файла ## Разные нюансы compose-файла
Самое главное, что: Самое главное, что:
1. прокидываем сокет демона ХОСТА в контеры агентов (docker in docker) 1. прокидываем сокет демона ХОСТА в контеры агентов (docker in docker)
2. монтируем агентские рабочие папки из агентов на хост, чтобы демон (см. 1) мог увидеть файлы по относительным путям 2. монтируем агентские рабочие папки из агентов на хост, чтобы демон (см. 1) мог увидеть файлы по относительным путям
Нельзя использовать ```_``` или ```-``` в названии сервисов! [Docker Compose DNS issues with Team City Agent](https://stackoverflow.com/q/46013774) [Нельзя использовать](https://stackoverflow.com/q/46013774) ```_``` или ```-``` в названии сервисов!
Нужно примаунтить директории, в которые чекаутится проект, чтобы избежать проблемы отсутствия файлов в первом докере (чтобы можно было запускать контейнеры внутри!). Первая ссылка - описание проблемы, вторая - солюшн. Нужно примаунтить директории, в которые чекаутится проект, чтобы избежать проблемы отсутствия файлов в первом докере (чтобы можно было запускать контейнеры внутри!). Первая ссылка - описание проблемы, вторая - солюшн.
* [Using docker compose inside a running container](https://github.com/docker/compose/issues/3918#issuecomment-483969527) * [Using docker compose inside a running container](https://github.com/docker/compose/issues/3918#issuecomment-483969527)
* [Unable to start any build step with Docker Wrapper on an agent from official docker image](https://youtrack.jetbrains.com/issue/TW-52017?_ga=2.31155327.1161243431.1566480946-540401972.1563195305) * [Unable to start any build step with Docker Wrapper on an agent from official docker image](https://youtrack.jetbrains.com/issue/TW-52017?_ga=2.31155327.1161243431.1566480946-540401972.1563195305)
Агенты должны делить сеть с хост-машиной, на которой стоит докер-демон, чтобы было возможно Агенты должны делить сеть с хост-машиной, на которой стоит докер-демон, чтобы было возможно
обращаться к сервисам по 127.0.0.1. [From inside of a Docker container, how do I connect to the localhost of the machine?](https://stackoverflow.com/a/24326540) обращаться к сервисам [по 127.0.0.1](https://stackoverflow.com/a/24326540).
При этом сеть host надо указать при сборке (требует версию 3.4) [Option network_mode: host in docker compose file not working as expected](https://forums.docker.com/t/option-network-mode-host-in-docker-compose-file-not-working-as-expected/51682). При этом сеть host [надо указать при сборке](https://forums.docker.com/t/option-network-mode-host-in-docker-compose-file-not-working-as-expected/51682) (требует версию 3.4).

56
docker-compose.yml.dist Normal file
View File

@ -0,0 +1,56 @@
version: '3.4'
services:
mysql:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
MYSQL_DATABASE: teamcity
MYSQL_USER: teamcity
MYSQL_PASSWORD: "${MYSQL_PASSWORD}"
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_bin
volumes:
- '/var/data/mysql:/var/lib/mysql'
restart: always
server:
image: 'jetbrains/teamcity-server'
volumes:
- '/var/data/teamcity/server:/data/teamcity_server/datadir'
- '/var/log/teamcity/server:/opt/teamcity/logs'
environment:
TZ: Europe/Moscow
ports:
- '80:8111'
restart: always
agent-white:
build:
context: .
volumes:
- '/var/data/teamcity/agent-white:/data/teamcity_agent/conf'
- '/var/run/docker.sock:/var/run/docker.sock'
- '/opt/buildagent/white/work:/opt/buildagent/work'
- '/opt/buildagent/white/temp:/opt/buildagent/temp'
- '/root/.docker/config.json:/root/.docker/config.json'
environment:
SERVER_URL: http://server:8111
AGENT_NAME: 'White'
WORK_VOL: /opt/buildagent/white/work
restart: always
agent-black:
build:
context: .
volumes:
- '/var/data/teamcity/agent-black:/data/teamcity_agent/conf'
- '/var/run/docker.sock:/var/run/docker.sock'
- '/opt/buildagent/black/work:/opt/buildagent/work'
- '/opt/buildagent/black/temp:/opt/buildagent/temp'
- '/root/.docker/config.json:/root/.docker/config.json'
environment:
SERVER_URL: http://server:8111
AGENT_NAME: 'Black'
WORK_VOL: /opt/buildagent/black/work
restart: always