Первая стабильно работающая композиция c возможностью запуска сервисов на агентах
This commit is contained in:
parent
344c7a3dec
commit
ddcce0ec2c
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
||||
.idea
|
||||
docker-compose.yml
|
@ -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
12
Pipfile
Normal 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
88
Pipfile.lock
generated
Normal 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": {}
|
||||
}
|
@ -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).
|
@ -1,4 +0,0 @@
|
||||
services:
|
||||
server:
|
||||
ports:
|
||||
- '88:8111'
|
14
local.yml
Normal file
14
local.yml
Normal 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
|
@ -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:
|
Loading…
Reference in New Issue
Block a user