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

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

1
.gitignore vendored
View File

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

View File

@ -1,4 +1,4 @@
FROM jetbrains/teamcity-agent
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
Запискаем докер, когда запускаем докер!
Внутренний ТС. Подробнее в (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)
2. монтируем агентские рабочие папки из агентов на хост, чтобы демон (см. 1) мог увидеть файлы по относительным путям
## Траблшутинг
Нельзя использовать ```_``` или ```-``` в названии сервисов! [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)
* [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) или просто сделать:
```bash
docker-compose -f docker-compose.yml -f docker-compose.local.yml up -d
```
Агенты должны делить сеть с хост-машиной, на которой стоит докер-демон, чтобы было возможно
обращаться к сервисам по 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)
При этом сеть 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:
server:
@ -8,48 +8,43 @@ services:
- '/var/log/teamcity/server:/opt/teamcity/logs'
ports:
- '80:8111'
# container_name: 'teamcity-server-instance'
restart: always
networks:
- net
- server
agent-white:
build: .
build:
context: .
network: host
volumes:
- '/var/data/teamcity/agent-white:/data/teamcity_agent/conf'
- '/var/run/docker.sock:/var/run/docker.sock'
- '/opt/buildagent/work:/opt/buildagent/work'
- '/opt/buildagent/temp:/opt/buildagent/temp'
environment:
SERVER_URL: http://server:8111
SERVER_URL: http://127.0.0.1:80
AGENT_NAME: 'White'
#container_name: 'teamcity-agent-white'
restart: always
depends_on:
- server
links:
- server
networks:
- net
network_mode: host
agent-black:
build: .
build:
context: .
network: host
volumes:
- '/var/data/teamcity/agent-black:/data/teamcity_agent/conf'
- '/var/run/docker.sock:/var/run/docker.sock'
- '/opt/buildagent/work:/opt/buildagent/work'
- '/opt/buildagent/temp:/opt/buildagent/temp'
environment:
SERVER_URL: http://server:8111
SERVER_URL: http://127.0.0.1:80
AGENT_NAME: 'Black'
#container_name: 'teamcity-agent-black'
restart: always
depends_on:
- server
links:
- server
networks:
- net
network_mode: host
networks:
net:
server: