Первая стабильно работающая композиция c возможностью запуска сервисов на агентах

This commit is contained in:
Nikita Orlov 2019-08-23 20:08:19 +03:00
parent 344c7a3dec
commit 3e1e4a83e8
8 changed files with 155 additions and 31 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
.idea .idea
docker-compose.yml

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_11.x | bash - \
&& apt-get install -y nodejs build-essential && apt-get install -y nodejs build-essential nano

12
Pipfile Normal file
View File

@ -0,0 +1,12 @@
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
[packages]
compose-addons = "*"
[requires]
python_version = "3.6"

88
Pipfile.lock generated Normal file
View File

@ -0,0 +1,88 @@
{
"_meta": {
"hash": {
"sha256": "422971463476d47efe136ec1b3a3d426eb7d895470f91791338491589c2011fc"
},
"pipfile-spec": 6,
"requires": {
"python_version": "3.6"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.org/simple",
"verify_ssl": true
}
]
},
"default": {
"certifi": {
"hashes": [
"sha256:046832c04d4e752f37383b628bc601a7ea7211496b4638f6514d0e5b9acc4939",
"sha256:945e3ba63a0b9f577b1395204e13c3a231f9bc0223888be653286534e5873695"
],
"version": "==2019.6.16"
},
"chardet": {
"hashes": [
"sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
"sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
],
"version": "==3.0.4"
},
"compose-addons": {
"hashes": [
"sha256:946a3eeae4e812dcc5d5c0e32b8546885e38f97828fc0ab1c4990700acd0a6f4"
],
"index": "pypi",
"version": "==0.2.1"
},
"idna": {
"hashes": [
"sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407",
"sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"
],
"version": "==2.8"
},
"pyyaml": {
"hashes": [
"sha256:0113bc0ec2ad727182326b61326afa3d1d8280ae1122493553fd6f4397f33df9",
"sha256:01adf0b6c6f61bd11af6e10ca52b7d4057dd0be0343eb9283c878cf3af56aee4",
"sha256:5124373960b0b3f4aa7df1707e63e9f109b5263eca5976c66e08b1c552d4eaf8",
"sha256:5ca4f10adbddae56d824b2c09668e91219bb178a1eee1faa56af6f99f11bf696",
"sha256:7907be34ffa3c5a32b60b95f4d95ea25361c951383a894fec31be7252b2b6f34",
"sha256:7ec9b2a4ed5cad025c2278a1e6a19c011c80a3caaac804fd2d329e9cc2c287c9",
"sha256:87ae4c829bb25b9fe99cf71fbb2140c448f534e24c998cc60f39ae4f94396a73",
"sha256:9de9919becc9cc2ff03637872a440195ac4241c80536632fffeb6a1e25a74299",
"sha256:a5a85b10e450c66b49f98846937e8cfca1db3127a9d5d1e31ca45c3d0bef4c5b",
"sha256:b0997827b4f6a7c286c01c5f60384d218dca4ed7d9efa945c3e1aa623d5709ae",
"sha256:b631ef96d3222e62861443cc89d6563ba3eeb816eeb96b2629345ab795e53681",
"sha256:bf47c0607522fdbca6c9e817a6e81b08491de50f3766a7a0e6a5be7905961b41",
"sha256:f81025eddd0327c7d4cfe9b62cf33190e1e736cc6e97502b3ec425f574b3e7a8"
],
"version": "==5.1.2"
},
"requests": {
"hashes": [
"sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4",
"sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31"
],
"version": "==2.22.0"
},
"six": {
"hashes": [
"sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c",
"sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"
],
"version": "==1.12.0"
},
"urllib3": {
"hashes": [
"sha256:b246607a25ac80bedac05c6f282e3cdaf3afb65420fd024ac94435cabe6e18d1",
"sha256:dbe59173209418ae49d485b87d1681aefa36252ee85884c31346debd19463232"
],
"version": "==1.25.3"
}
},
"develop": {}
}

View File

@ -1,23 +1,41 @@
# Teamcity # Teamcity
Запискаем докер, когда запускаем докер! Запискаем докер, когда запускаем докер!
Внутренний ТС. Подробнее в (Confluence)[https://confluence.archive.systems/display/PRO/TeamCity] Внутренний ТС. Подробнее в (Confluence)[https://confluence.archive.systems/display/PRO/TeamCity]
## Tl;dr Переименовать в стандартное названия для docker-compose:
```bash
cp prod.yml docker-compose.yml
```
Запуск:
```bash
docker-compose build
docker-compose up -d --force-recreate
```
## Запуск на локальной машине в исследовательских целях
Для нашей версии (3.4) нужно доп. средства:
* [pipenv](https://docs.pipenv.org/en/latest/)
* [docker-compose addons](https://github.com/dnephin/compose-addons#docker-compose-addons)
```bash
pipenv install
dcao-merge -o docker-compose.yml prod.yml local.yml
```
и запускаем. Подробнее [тут](https://stackoverflow.com/a/55033027).
## Разные нюансы 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) Нельзя использовать ```_``` или ```-``` в названии сервисов! [Docker Compose DNS issues with Team City Agent](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)
## Запуск на локальной машине в исследовательских целях Агенты должны делить сеть с хост-машиной, на которой стоит докер-демон, чтобы было возможно
Для этого можно глянуть в [Multiple Compose files](https://docs.docker.com/compose/extends/#understanding-multiple-compose-files) или просто сделать: обращаться к сервисам по 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)
```bash
docker-compose -f docker-compose.yml -f docker-compose.local.yml up -d При этом сеть 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).
```

View File

@ -1,4 +0,0 @@
services:
server:
ports:
- '88:8111'

14
local.yml Normal file
View File

@ -0,0 +1,14 @@
version: '3.4'
services:
server:
ports:
- '88:8111'
agent-white:
environment:
SERVER_URL: http://127.0.0.1:88
agent-black:
environment:
SERVER_URL: http://127.0.0.1:88

View File

@ -1,4 +1,4 @@
version: '3' version: '3.4'
services: services:
server: server:
@ -8,48 +8,43 @@ services:
- '/var/log/teamcity/server:/opt/teamcity/logs' - '/var/log/teamcity/server:/opt/teamcity/logs'
ports: ports:
- '80:8111' - '80:8111'
# container_name: 'teamcity-server-instance'
restart: always restart: always
networks: networks:
- net - server
agent-white: agent-white:
build: . build:
context: .
network: host
volumes: volumes:
- '/var/data/teamcity/agent-white:/data/teamcity_agent/conf' - '/var/data/teamcity/agent-white:/data/teamcity_agent/conf'
- '/var/run/docker.sock:/var/run/docker.sock' - '/var/run/docker.sock:/var/run/docker.sock'
- '/opt/buildagent/work:/opt/buildagent/work' - '/opt/buildagent/work:/opt/buildagent/work'
- '/opt/buildagent/temp:/opt/buildagent/temp' - '/opt/buildagent/temp:/opt/buildagent/temp'
environment: environment:
SERVER_URL: http://server:8111 SERVER_URL: http://127.0.0.1:80
AGENT_NAME: 'White' AGENT_NAME: 'White'
#container_name: 'teamcity-agent-white'
restart: always restart: always
depends_on: depends_on:
- server - server
links: network_mode: host
- server
networks:
- net
agent-black: agent-black:
build: . build:
context: .
network: host
volumes: volumes:
- '/var/data/teamcity/agent-black:/data/teamcity_agent/conf' - '/var/data/teamcity/agent-black:/data/teamcity_agent/conf'
- '/var/run/docker.sock:/var/run/docker.sock' - '/var/run/docker.sock:/var/run/docker.sock'
- '/opt/buildagent/work:/opt/buildagent/work' - '/opt/buildagent/work:/opt/buildagent/work'
- '/opt/buildagent/temp:/opt/buildagent/temp' - '/opt/buildagent/temp:/opt/buildagent/temp'
environment: environment:
SERVER_URL: http://server:8111 SERVER_URL: http://127.0.0.1:80
AGENT_NAME: 'Black' AGENT_NAME: 'Black'
#container_name: 'teamcity-agent-black'
restart: always restart: always
depends_on: depends_on:
- server - server
links: network_mode: host
- server
networks:
- net
networks: networks:
net: server: