diff --git a/.gitignore b/.gitignore index 485dee6..04db76a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .idea +docker-compose.yml \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index a3dc863..30649f9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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 diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..1ea3ae3 --- /dev/null +++ b/Pipfile @@ -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" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 0000000..488263a --- /dev/null +++ b/Pipfile.lock @@ -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": {} +} diff --git a/REAME.md b/README.md similarity index 55% rename from REAME.md rename to README.md index 38b4b77..3b0a2a2 100644 --- a/REAME.md +++ b/README.md @@ -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 -``` \ No newline at end of file +Агенты должны делить сеть с хост-машиной, на которой стоит докер-демон, чтобы было возможно +обращаться к сервисам по 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). diff --git a/docker-compose.local.yml b/docker-compose.local.yml deleted file mode 100644 index c6092bd..0000000 --- a/docker-compose.local.yml +++ /dev/null @@ -1,4 +0,0 @@ -services: - server: - ports: - - '88:8111' \ No newline at end of file diff --git a/local.yml b/local.yml new file mode 100644 index 0000000..998723e --- /dev/null +++ b/local.yml @@ -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 diff --git a/docker-compose.yml b/prod.yml similarity index 73% rename from docker-compose.yml rename to prod.yml index d50cf24..144c8c4 100644 --- a/docker-compose.yml +++ b/prod.yml @@ -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: