ืืืืจ ืื ืืขื ืืื ืืืืงืื ืืืคืชืืื ืืืื, ืื ืืืืขื ืืขืืงืจ ืืืืืื ืืืืืืฆืื ืืฉืจ ืืชืืืืืื ืขื ืืขืื ืฉื ืืืืจืช GitLab CI/CD ืืืืืงืืช ืืื ืืืจืฆืื ืืชื ืืื ืฉื ืืฉืืื ืชืฉืชืืช ืื ืืกืคืืงืื ื/ืื ืืืขืืจ ืงืื ืืืื ืจ ืคืืืคืืจืืช ืชืืืืจ. ืื ื ืืืื ืื ืืื ืืืืืืจ ืืช ืืคืจืืกื ืฉื ืกืืืืืช ืืืืงื ืืืืฆืขืืช docker compose ื-Runner ืืขืืคืช GitLab ืืื ืืืื ืฉืืคืจืืกื ืฉื ืืกืคืจ ืกืืืืืช, ืืฉืืจืืชืื ืฉืืืฉืงื ืื ืืคืจืืขื ืื ืืื.
ืชืืื
ะัะตะดะฟะพััะปะบะธ GitLab Shell Runner ืืื ืช docker-compose.yml ืืื ืช ื-Makefile ืืื ืช .gitlab-ci.yml ืชืืฆืื
ะัะตะดะฟะพััะปะบะธ
-
ืืชืจืืื ืฉืื, ืงืจื ืื ืคืขื ืฉืืืืงืืช ืืื ืืืจืฆืื "ืืืคืื" ืืคืจืืืงืืื. ืืืขืชืื ืงืจืืืืช ืืืขืื ืืจืืฉืื ื ืืืืฉืืขืืชืืช ืืืืชืจ ืืื ืฆืื ืืจ ื-CI, ืฉืื ืืืืงืืช ืืื ืืืจืฆืื ืืคืืชืื ืืฉืืจืืช(ืื) ืืชืืฆืข ืืกืืืืช ืคืืชืื/ืฉืื. ืื ืืจื ืื ืืขื ืืขืืืช:
- ืขืงื ืคืืืื ืืฉืืจืืช ืืกืืื ืืืืื ืืืืงืช ืืื ืืืจืฆืื, ืืขืื ืืืืืงื ืขืืื ืืืื ืืง ืขื ืืื ื ืชืื ืื ืฉืืืจืื. ืืื ืืงืจืื ืฉืืื ืฉืืืืช ืืงืฉื ืขื ืคืืจืื JSON ืฉืืืจ ืืจืกื ืืช ืืฉืืจืืช, ืื ืฉืืคื ืืช ืืืขืื ืืืืชื ืคืขืื ืืืืืืื.
- ืืืื ืฉื โโืืขืื ืืืืืงื ืืื ืฉื ืชืื ื ืืืืืงื ืืืืื. ืื ื ืืืฉื ืฉืื ืื ืืืืื ื ืืชืืจ ืืืืื ืขื ื ืืงืื/ืืืืจืช ืืกื ืื ืชืื ืื. ืืชืจืืื ืฉืื, ืื ื ืชืงืืชื ืืคืจืืืงื ืฉืื ืืืื ืื ืขืืจ ืืฆืืจื ืืืงื.
- ืกืืืื ืฉื ืฉืืืืฉ ืืคืื ืงืฆืืื ืืืืช ืฉื ืืขืื ืืืืืงื ืืขืช ืืืืงืช ืืืืจืืช ืืขืจืืช ืืืืืืช. ืืืืืื, ืืืื ืืืช ืืฉืชืืฉ/ืงืืืฆื/ืกืืกืื/ืืืฉืื.
- ื ืชืื ื ืืืืงื ืืืืืงืืช ืืืืืืืืืช ืืงืฉืื ืขื ืืืืงืื ืืื ืืื.
ืืฉ ืฉืืืืื ืฉืืืืงืืช ืืืืืืืืืช ืืืืืช ืฆืจืืืืช ืื ืงืืช ืืช ืื ืชืื ืื ืืืจื ืขืฆืื. ืืฉ ืื ืืืขืื ืื ื ืื:
- ืืขืืืื ืืื ืืืื ื ืืืื ืืืื ืืฉืืืืฉ.
- ืื ืื ืืืืืืงื ื ืืชื ืืืกืืจ ืืืืขืจืืช ืืืืฆืขืืช ื-API. ืืืืืื, ืงืจืืื ืืืืืงืช ืืืืืืงื ืื ืืืฉืื ืืืืืื ืฉืืื ืกืืชืจืช ืืช ืืืืืืื ืืขืกืงื.
- ืืขืช ืืฆืืจืช ืืืืืืงื ืืจื ื-API, ื ืืชื ืืืฆืืจ ืืืืช ืขืฆืืื ืฉื ืืื-ื ืชืื ืื, ืืืจ ืฉืืขืืืชื ืืืืืง.
- ืื ืืืืืงืืช ืืฉ ืชืืืช ืืื ื ืืืื ืขืฆืื, ืื ืชืืืื ื ืืงืื ืื ืชืื ืื ืืืืจ ืืคืขืืช ืืืืืงืืช ืืืคื ืืืื ืจืืฉ.
- ืงืจืืืืช ื ืืกืคืืช (ืืืืขืชื ืื ืืืฆืืงืืช) ื-API.
- ืืืืืขืื ืืืจืืื: ืืืฉืจ ืืชืืืืื ืื ืงืืช ื ืชืื ื ืืืืงื ืืฉืืจืืช ืืืกื ืื ืชืื ืื. ืื ืืืคื ืืงืจืงืก PK/FK ืืืืชื! ืื ื ืฉืืืขืื ืืืคืชืืื: "ืืจืืข ืืืกืคืชื/ืืกืจืชื/ืฉืื ืืชื ืฉืื, ืืื ื ืชืคืกื 100500 ืืืื ื ืืื ืืืจืฆืื?"
ืืืขืชื ืืคืชืจืื ืืืืคืืืืื ืืืืชืจ ืืื ืกืืืื ืืื ืืืืช.
- ืื ืฉืื ืจืืื ืืฉืชืืฉืื ื-docer-compose ืืื ืืืคืขืื ืกืืืืช ืืืืงื, ืื ืืขืืื ืืฉืชืืฉืื ื-docer-compose ืืขืช ืืืฆืืข ืืืืงืืช ืืื ืืืจืฆืื ื-CI/CD. ืืืื ืื ื ืื ืืืงื ืืืฉืืื kubernetes, ื ืืื ืืคืืืคืืจืืืช ืชืืืืจ ืืืืืืช ืืืจืืช. ืื ืืื ืืืจื ืืฉ ืืืชื. ืื ืืืื ื ืืื ืื docker-compose.yml ืืื ืืื ืืืจืกืื.
- ืื ืื ืืฉ ืื ื ืจืฅ QA ืืฉืื ื, ืืื ื ืืื ืืืืื ืฉืฉืืจืืชืื ืฉืืืฉืงื ืืจื docker-compose ืื ืืคืจืืขื ืื ืืื?
- ืืืฆื ืืืกืืฃ ืืืื ืื ืฉื ืฉืืจืืชืื ืฉื ืืืงื?
- ืืื ืื ืงืื ืืช ืืจืื ืจ?
ืืฉ ืื ืจืฅ GitLab ืืฉืื ืขืืืจ ืืคืจืืืงืืื ืฉืื ืื ืชืงืืชื ืืฉืืืืช ืืืื ืืืืื ืืคืืชืื
GitLab Shell Runner
ืขืืืจ ืจืฅ, ืื ื ืืืืืฅ ืขื ืืืื ื ืืืจืืืืืืช ืืื ืืงืก ืขื 4 vCPU, 4 GB RAM, 50 GB HDD.
ืืฉ ืืจืื ืืืืข ืขื ืืืืจืช gitlab-runner ืืืื ืืจื ื, ืื ืืงืฆืจื:
- ืืชืืืจ ืืืืื ื ืืืืฆืขืืช SSH
-
ืื ืืฉ ืื ืคืืืช ื-8 GB RAM, ืื ืื ื ืืืืืฅ
ืืขืฉืืช ืืืืคื 10 GB ืืื ืฉืืจืืฆื OOM ืื ืืืื ืืืืจืื ืืช ืืืฉืืืืช ืฉืื ื ืืืื ืืืกืจ ืืืืจืื RAM. ืื ืืืื ืืงืจืืช ืืืฉืจ ืืืชืจ ื-5 ืืฉืืืืช ืืืคืขืืืช ืื ืืื ืืช. ืืืฉืืืืช ืืชืงืืื ืืื ืืืชืจ, ืื ืืืชืืื.ืืืืื ืขื OOM killer
ืื ืืชื ืจืืื ืืืืื ื ืืืฉืืืืช
bash: line 82: 26474 Killed
, ืืื ืคืฉืื ืืฆืข ืขื ืืจืฅsudo dmesg | grep 26474
[26474] 1002 26474 1061935 123806 339 0 0 java Out of memory: Kill process 26474 (java) score 127 or sacrifice child Killed process 26474 (java) total-vm:4247740kB, anon-rss:495224kB, file-rss:0kB, shmem-rss:0kB
ืืื ืืชืืื ื ื ืจืืืช ืืขืจื ืื, ืื ืืืกืฃ ืืืืคื ืื ืืืกืฃ ืืืืจืื RAM.
- ืืืชืงืื
gitlab-ranner ,ืกึทืึธืจ ,ืืืืงืจ-ืืืื ื , ืขืฉื. - ืืืกืคืช ืืฉืชืืฉ
gitlab-runner
ืืงืืืฆืdocker
sudo groupadd docker sudo usermod -aG docker gitlab-runner
ืืืจืฉื gitlab-ranner.-
ืคืชืื ืืขืจืืื
/etc/gitlab-runner/config.toml
ืืชืืกืืฃconcurrent=20 [[runners]] request_concurrency = 10
ืื ืืืคืฉืจ ืื ืืืจืืฅ ืืฉืืืืช ืืงืืืืืช ืขื ืจืฅ ืืื. ืงืจื ืขืื
ืืื .
ืื ืืฉ ืื ืืืื ื ืืืงื ืืืชืจ, ืืืฉื 8 vCPU, 16 GB RAM, ืื ื ืืชื ืืืืืื ืืช ืืืกืคืจืื ืืืื ืืคืืืช ืคื 2. ืืื ืืื ืชืืื ืื ืืืืืง ืืืฉืง ืขื ืืจืื ืจ ืืื ืืืืืื ืืืืช.
ืื ืืกืคืืง.
ืืื ืช docker-compose.yml
ืืืฉืืื ืืขืืงืจืืช ืืื docker-compose.yml ืืื ืืืจืกืืืช, ืืฉืจ ืืคืชืืื/ืืืืงืื ืืืืืื ืืืฉืชืืฉ ืื ืื ืืงืืืืช ืืื ืืฆื ืจืช ื-CI.
ืงืืื ืื, ืื ื ืืืฆืจืื ืฉืืืช ืฉืืจืืช ืืืืืืืื ืขืืืจ CI. ืืื ืืืฉืชื ืื ืืืืืืืืื ื- GitLab CI ืืื ืืืฉืชื ื CI_JOB_ID
. ืื ืชืคืจื container_name
ืขื ืืฉืืขืืช "service-${CI_JOB_ID:-local}"
, ืื ืืืงืจื:
- ืื
CI_JOB_ID
ืื ืืืืืจ ืืืฉืชื ื ืกืืืื,
ืื ืฉื ืืฉืืจืืช ืืืืservice-local
- ืื
CI_JOB_ID
ืืืืืจ ืืืฉืชื ื ืกืืืื (ืืืืืื 123),
ืื ืฉื ืืฉืืจืืช ืืืืservice-123
ืฉื ืืช, ืื ื ืืืฆืจืื ืจืฉืช ืืฉืืชืคืช ืืฉืืจืืชืื ืฉืืืฉืงื. ืื ื ืืชื ืื ื ืืืืื ืืจืืช ืืจืฉืช ืืขืช ืืคืขืืช ืกืืืืืช ืืืืงื ืืจืืืืช.
networks:
default:
external:
name: service-network-${CI_JOB_ID:-local}
ืืืขืฉื, ืื ืืฆืขื ืืจืืฉืื ืืืฆืืื =)
ืืืืื ืฉื docker-compose.yml ืฉืื ืขื ืืขืจืืช
version: "3"
# ะะปั ะบะพััะตะบัะฝะพะน ัะฐะฑะพัั web (php) ะธ fmt ะฝัะถะฝะพ,
# ััะพะฑั ะบะพะฝัะตะนะฝะตัั ะธะผะตะปะธ ะพะฑัะธะน ะธัะฟะพะปะฝัะตะผัะน ะบะพะฝัะตะฝั.
# ะ ะฝะฐัะตะผ ัะปััะฐะต, ััะพ ะดะธัะตะบัะพัะธั /var/www/testrail
volumes:
static-content:
# ะะทะพะปะธััะตะผ ะพะบััะถะตะฝะธะต ะฝะฐ ัะตัะตะฒะพะผ ััะพะฒะฝะต
networks:
default:
external:
name: testrail-network-${CI_JOB_ID:-local}
services:
db:
image: mysql:5.7.22
# ะะฐะถะดัะน container_name ัะพะดะตัะถะธั ${CI_JOB_ID:-local}
container_name: "testrail-mysql-${CI_JOB_ID:-local}"
environment:
MYSQL_HOST: db
MYSQL_DATABASE: mydb
MYSQL_ROOT_PASSWORD: 1234
SKIP_GRANT_TABLES: 1
SKIP_NETWORKING: 1
SERVICE_TAGS: dev
SERVICE_NAME: mysql
networks:
- default
migration:
image: registry.gitlab.com/touchbit/image/testrail/migration:latest
container_name: "testrail-migration-${CI_JOB_ID:-local}"
links:
- db
depends_on:
- db
networks:
- default
fpm:
image: registry.gitlab.com/touchbit/image/testrail/fpm:latest
container_name: "testrail-fpm-${CI_JOB_ID:-local}"
volumes:
- static-content:/var/www/testrail
links:
- db
networks:
- default
web:
image: registry.gitlab.com/touchbit/image/testrail/web:latest
container_name: "testrail-web-${CI_JOB_ID:-local}"
# ะัะปะธ ะฟะตัะตะผะตะฝะฝัะต TR_HTTP_PORT ะธะปะธ TR_HTTPS_PORTS ะฝะต ะพะฟัะตะดะตะปะตะฝั,
# ัะพ ัะตัะฒะธั ะฟะพะดะฝะธะผะฐะตััั ะฝะฐ 80 ะธ 443 ะฟะพััั ัะพะพัะฒะตัััะฒะตะฝะฝะพ.
ports:
- ${TR_HTTP_PORT:-80}:80
- ${TR_HTTPS_PORT:-443}:443
volumes:
- static-content:/var/www/testrail
links:
- db
- fpm
networks:
- default
ืืืืื ืืจืืฆื ืืงืืืืช
docker-compose -f docker-compose.yml up -d
Starting testrail-mysql-local ... done
Starting testrail-migration-local ... done
Starting testrail-fpm-local ... done
Recreating testrail-web-local ... done
ืืื ืื ืืื ืื ืื ืคืฉืื ืขื ืืฉืงื ื-CI.
ืืื ืช ื-Makefile
ืื ื ืืฉืชืืฉ ื-Makefile ืื ืื ืืืื ื ืื ืื ืื ืืืื ืกืืืื ืืงืืืืช ืืื ื-CI. ืขืื ืชืืืืืช ืืืื ืืจื ื
# ะฃ ะผะตะฝั ะฒ ะฟัะพะตะบัะฐั
ะฒัะต ะฒัะฟะพะผะพะณะฐัะตะปัะฝัะต ะฒะตัะธ ะปะตะถะฐั ะฒ ะดะธัะตะบัะพัะธะธ `.indirect`,
# ะฒ ัะพะผ ัะธัะปะต ะธ `docker-compose.yml`
# ะัะฟะพะปัะทะพะฒะฐัั bash ั ะพะฟัะธะตะน pipefail
# pipefail - ัะตะนะปะธั ะฒัะฟะพะปะฝะตะฝะธะต ะฟะฐะนะฟะฐ, ะตัะปะธ ะบะพะผะฐะฝะดะฐ ะฒัะฟะพะปะฝะธะปะฐัั ั ะพัะธะฑะบะพะน
SHELL=/bin/bash -o pipefail
# ะััะฐะฝะฐะฒะปะธะฒะฐะตะผ ะบะพะฝัะตะนะฝะตัั ะธ ัะดะฐะปัะตะผ ัะตัั
docker-kill:
docker-compose -f $${CI_JOB_ID:-.indirect}/docker-compose.yml kill
docker network rm network-$${CI_JOB_ID:-testrail} || true
# ะัะตะดะฒะฐัะธัะตะปัะฝะพ ะฒัะฟะพะปะฝัะตะผ docker-kill
docker-up: docker-kill
# ะกะพะทะดะฐะตะผ ัะตัั ะดะปั ะพะบััะถะตะฝะธั
docker network create network-$${CI_JOB_ID:-testrail}
# ะะฐะฑะธัะฐะตะผ ะฟะพัะปะตะดะฝะธะต ะพะฑัะฐะทั ะธะท docker-registry
docker-compose -f $${CI_JOB_ID:-.indirect}/docker-compose.yml pull
# ะะฐะฟััะบะฐะตะผ ะพะบััะถะตะฝะธะต
# force-recreate - ะฟัะธะฝัะดะธัะตะปัะฝะพะต ะฟะตัะตัะพะทะดะฐะฝะธะต ะบะพะฝัะตะนะฝะตัะพะฒ
# renew-anon-volumes - ะฝะต ะธัะฟะพะปัะทะพะฒะฐัั volumes ะฟัะตะดัะดััะธั
ะบะพะฝัะตะนะฝะตัะพะฒ
docker-compose -f $${CI_JOB_ID:-.indirect}/docker-compose.yml up --force-recreate --renew-anon-volumes -d
# ะั ะธ, ะฝะฐ ะฒััะบะธะน ัะปััะฐะน, ะฒัะฒะตััะธ ััะพ ัะฐะผ ั ะฝะฐั ะฒ ะฟัะธะฝัะธะฟะต ะทะฐะฟััะตะฝะพ ะฝะฐ ะผะฐัะธะฝะบะต
docker ps
# ะะพะปะปะตะบัะธะผ ะปะพะณะธ ัะตัะฒะธัะพะฒ
docker-logs:
mkdir ./logs || true
docker logs testrail-web-$${CI_JOB_ID:-local} >& logs/testrail-web.log
docker logs testrail-fpm-$${CI_JOB_ID:-local} >& logs/testrail-fpm.log
docker logs testrail-migration-$${CI_JOB_ID:-local} >& logs/testrail-migration.log
docker logs testrail-mysql-$${CI_JOB_ID:-local} >& logs/testrail-mysql.log
# ะัะธััะบะฐ ัะฐะฝะฝะตัะฐ
docker-clean:
@echo ะััะฐะฝะฐะฒะปะธะฒะฐะตะผ ะฒัะต testrail-ะบะพะฝัะตะนะฝะตัั
docker kill $$(docker ps --filter=name=testrail -q) || true
@echo ะัะธััะบะฐ ะดะพะบะตั ะบะพะฝัะตะนะฝะตัะพะฒ
docker rm -f $$(docker ps -a -f --filter=name=testrail status=exited -q) || true
@echo ะัะธััะบะฐ dangling ะพะฑัะฐะทะพะฒ
docker rmi -f $$(docker images -f "dangling=true" -q) || true
@echo ะัะธััะบะฐ testrail ะพะฑัะฐะทะพะฒ
docker rmi -f $$(docker images --filter=reference='registry.gitlab.com/touchbit/image/testrail/*' -q) || true
@echo ะัะธััะบะฐ ะฒัะตั
ะฝะตะธัะฟะพะปัะทัะตะผัั
volume
docker volume rm -f $$(docker volume ls -q) || true
@echo ะัะธััะบะฐ ะฒัะตั
testrail ัะตัะตะน
docker network rm $(docker network ls --filter=name=testrail -q) || true
docker ps
ืืืืง
ืืขืฉืืช ืืืงืจ-ืืค
$ make docker-up
docker-compose -f ${CI_JOB_ID:-.indirect}/docker-compose.yml kill
Killing testrail-web-local ... done
Killing testrail-fpm-local ... done
Killing testrail-mysql-local ... done
docker network rm network-${CI_JOB_ID:-testrail} || true
network-testrail
docker network create network-${CI_JOB_ID:-testrail}
d2ec063324081c8bbc1b08fd92242c2ea59d70cf4025fab8efcbc5c6360f083f
docker-compose -f ${CI_JOB_ID:-.indirect}/docker-compose.yml pull
Pulling db ... done
Pulling migration ... done
Pulling fpm ... done
Pulling web ... done
docker-compose -f ${CI_JOB_ID:-.indirect}/docker-compose.yml up --force-recreate --renew-anon-volumes -d
Recreating testrail-mysql-local ... done
Recreating testrail-fpm-local ... done
Recreating testrail-migration-local ... done
Recreating testrail-web-local ... done
docker ps
CONTAINER ID PORTS NAMES
a845d3cb0e5a 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp testrail-web-local
19d8ef001398 9000/tcp testrail-fpm-local
e28840a2369c 3306/tcp, 33060/tcp testrail-migration-local
0e7900c23f37 3306/tcp testrail-mysql-local
ืืขืฉืืช docker-logs
$ make docker-logs
mkdir ./logs || true
mkdir: cannot create directory โ./logsโ: File exists
docker logs testrail-web-${CI_JOB_ID:-local} >& logs/testrail-web.log
docker logs testrail-fpm-${CI_JOB_ID:-local} >& logs/testrail-fpm.log
docker logs testrail-migration-${CI_JOB_ID:-local} >& logs/testrail-migration.log
docker logs testrail-mysql-${CI_JOB_ID:-local} >& logs/testrail-mysql.log
ืืื ืช .gitlab-ci.yml
ืืคืขืืช ืืืื ื ืืื ืืืจืฆืื
Integration:
stage: test
tags:
- my-shell-runner
before_script:
# ะััะตะฝัะธัะธัะธััะตะผัั ะฒ registry
- docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY}
# ะะตะฝะตัะธััะตะผ ะฟัะตะฒะดะพัะฝะธะบะฐะปัะฝัะต TR_HTTP_PORT ะธ TR_HTTPS_PORT
- export TR_HTTP_PORT=$(shuf -i10000-60000 -n1)
- export TR_HTTPS_PORT=$(shuf -i10000-60000 -n1)
# ัะพะทะดะฐะตะผ ะดะธัะตะบัะพัะธั ั ะธะดะตะฝัะธัะธะบะฐัะพัะพะผ ะทะฐะดะฐัะธ
- mkdir ${CI_JOB_ID}
# ะบะพะฟะธััะตะผ ะฒ ัะพะทะดะฐะฝะฝัั ะดะธัะตะบัะพัะธั ะฝะฐั docker-compose.yml
# ััะพะฑั ะบะพะฝัะตะบัั ะฑัะป ัะฐะทะฝัะน ะดะปั ะบะฐะถะดะพะน ะทะฐะดะฐัะธ
- cp .indirect/docker-compose.yml ${CI_JOB_ID}/docker-compose.yml
script:
# ะฟะพะดะฝะธะผะฐะตะผ ะฝะฐัะต ะพะบััะถะตะฝะธะต
- make docker-up
# ะทะฐะฟััะบะฐะตะผ ัะตััั ะธัะฟะพะปะฝัะตะผัะผ jar (ั ะผะตะฝั ัะฐะบ)
- java -jar itest.jar --http-port ${TR_HTTP_PORT} --https-port ${TR_HTTPS_PORT}
# ะธะปะธ ะฒ ะบะพะฝัะตะนะฝะตัะต
- docker run --network=testrail-network-${CI_JOB_ID:-local} --rm itest
after_script:
# ัะพะฑะธัะฐะตะผ ะปะพะณะธ
- make docker-logs
# ะพััะฐะฝะฐะฒะปะธะฒะฐะตะผ ะพะบััะถะตะฝะธะต
- make docker-kill
artifacts:
# ัะพั
ัะฐะฝัะตะผ ะปะพะณะธ
when: always
paths:
- logs
expire_in: 30 days
ืืชืืฆืื ืืืคืขืืช ืืฉืืื ืืื, ืกืคืจืืืช ืืืืื ืื ื-artifacts ืชืืื ืืืื ื ืฉืืจืืช ืืืืืงืืช. ืืื ืืืื ื ืื ืืืงืจื ืฉื ืฉืืืืืช. ืื ืืืื ืืืงืืื ืืืชื ืืืื ืืฉืื, ืืื ืื ื ืืืืจ ืขื ืื ืื ืคืจื.
ื ืืงืื ืืจืฅ
ืืืฉืืื ืชืืคืขื ืจืง ืืคื ืืื ืืื ืื.
stages:
- clean
- build
- test
Clean runner:
stage: clean
only:
- schedules
tags:
- my-shell-runner
script:
- make docker-clean
ืืืืจ ืืื, ืขืืืจ ืืคืจืืืงื GitLab ืฉืื ื -> CI/CD -> ืืืืืช ืืื ืื -> ืืื ืืื ืื ืืืฉ ืืืืกืฃ ืืื ืืื ืื ืืืฉ
ืชืืฆืื
ืืฉืงืช 4 ืืฉืืืืช ื- GitLab CI
ืืืืื ืื ืฉื ืืืฉืืื ืืืืจืื ื ืขื ืืืื ื ืืื ืืืจืฆืื ืื ื ืจืืืื ืงืื ืืืื ืจืื ืืืฉืืืืช ืฉืื ืืช
CONTAINER ID NAMES
c6b76f9135ed testrail-web-204645172
01d303262d8e testrail-fpm-204645172
2cdab1edbf6a testrail-migration-204645172
826aaf7c0a29 testrail-mysql-204645172
6dbb3fae0322 testrail-web-204645084
3540f8d448ce testrail-fpm-204645084
70fea72aa10d testrail-mysql-204645084
d8aa24b2892d testrail-web-204644881
6d4ccd910fad testrail-fpm-204644881
685d8023a3ec testrail-mysql-204644881
1cdfc692003a testrail-web-204644793
6f26dfb2683e testrail-fpm-204644793
029e16b26201 testrail-mysql-204644793
c10443222ac6 testrail-web-204567103
04339229397e testrail-fpm-204567103
6ae0accab28d testrail-mysql-204567103
b66b60d79e43 testrail-web-204553690
033b1f46afa9 testrail-fpm-204553690
a8879c5ef941 testrail-mysql-204553690
069954ba6010 testrail-web-204553539
ed6b17d911a5 testrail-fpm-204553539
1a1eed057ea0 testrail-mysql-204553539
ืืืื ืืคืืจื ืืืชืจ
$ docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY}
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /home/gitlab-runner/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
$ export TR_HTTP_PORT=$(shuf -i10000-60000 -n1)
$ export TR_HTTPS_PORT=$(shuf -i10000-60000 -n1)
$ mkdir ${CI_JOB_ID}
$ cp .indirect/docker-compose.yml ${CI_JOB_ID}/docker-compose.yml
$ make docker-up
docker-compose -f ${CI_JOB_ID:-.indirect}/docker-compose.yml kill
docker network rm testrail-network-${CI_JOB_ID:-local} || true
Error: No such network: testrail-network-204645172
docker network create testrail-network-${CI_JOB_ID:-local}
0a59552b4464b8ab484de6ae5054f3d5752902910bacb0a7b5eca698766d0331
docker-compose -f ${CI_JOB_ID:-.indirect}/docker-compose.yml pull
Pulling web ... done
Pulling fpm ... done
Pulling migration ... done
Pulling db ... done
docker-compose -f ${CI_JOB_ID:-.indirect}/docker-compose.yml up --force-recreate --renew-anon-volumes -d
Creating volume "204645172_static-content" with default driver
Creating testrail-mysql-204645172 ...
Creating testrail-mysql-204645172 ... done
Creating testrail-migration-204645172 ... done
Creating testrail-fpm-204645172 ... done
Creating testrail-web-204645172 ... done
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6b76f9135ed registry.gitlab.com/touchbit/image/testrail/web:latest "nginx -g 'daemon ofโฆ" 13 seconds ago Up 1 second 0.0.0.0:51148->80/tcp, 0.0.0.0:25426->443/tcp testrail-web-204645172
01d303262d8e registry.gitlab.com/touchbit/image/testrail/fpm:latest "docker-php-entrypoiโฆ" 16 seconds ago Up 13 seconds 9000/tcp testrail-fpm-204645172
2cdab1edbf6a registry.gitlab.com/touchbit/image/testrail/migration:latest "docker-entrypoint.sโฆ" 16 seconds ago Up 13 seconds 3306/tcp, 33060/tcp testrail-migration-204645172
826aaf7c0a29 mysql:5.7.22 "docker-entrypoint.sโฆ" 18 seconds ago Up 16 seconds 3306/tcp testrail-mysql-204645172
6dbb3fae0322 registry.gitlab.com/touchbit/image/testrail/web:latest "nginx -g 'daemon ofโฆ" 36 seconds ago Up 22 seconds 0.0.0.0:44202->80/tcp, 0.0.0.0:20151->443/tcp testrail-web-204645084
3540f8d448ce registry.gitlab.com/touchbit/image/testrail/fpm:latest "docker-php-entrypoiโฆ" 38 seconds ago Up 35 seconds 9000/tcp testrail-fpm-204645084
70fea72aa10d mysql:5.7.22 "docker-entrypoint.sโฆ" 40 seconds ago Up 37 seconds 3306/tcp testrail-mysql-204645084
d8aa24b2892d registry.gitlab.com/touchbit/image/testrail/web:latest "nginx -g 'daemon ofโฆ" About a minute ago Up 53 seconds 0.0.0.0:31103->80/tcp, 0.0.0.0:43872->443/tcp testrail-web-204644881
6d4ccd910fad registry.gitlab.com/touchbit/image/testrail/fpm:latest "docker-php-entrypoiโฆ" About a minute ago Up About a minute 9000/tcp testrail-fpm-204644881
685d8023a3ec mysql:5.7.22 "docker-entrypoint.sโฆ" About a minute ago Up About a minute 3306/tcp testrail-mysql-204644881
1cdfc692003a registry.gitlab.com/touchbit/image/testrail/web:latest "nginx -g 'daemon ofโฆ" About a minute ago Up About a minute 0.0.0.0:44752->80/tcp, 0.0.0.0:23540->443/tcp testrail-web-204644793
6f26dfb2683e registry.gitlab.com/touchbit/image/testrail/fpm:latest "docker-php-entrypoiโฆ" About a minute ago Up About a minute 9000/tcp testrail-fpm-204644793
029e16b26201 mysql:5.7.22 "docker-entrypoint.sโฆ" About a minute ago Up About a minute 3306/tcp testrail-mysql-204644793
c10443222ac6 registry.gitlab.com/touchbit/image/testrail/web:latest "nginx -g 'daemon ofโฆ" 5 hours ago Up 5 hours 0.0.0.0:57123->80/tcp, 0.0.0.0:31657->443/tcp testrail-web-204567103
04339229397e registry.gitlab.com/touchbit/image/testrail/fpm:latest "docker-php-entrypoiโฆ" 5 hours ago Up 5 hours 9000/tcp testrail-fpm-204567103
6ae0accab28d mysql:5.7.22 "docker-entrypoint.sโฆ" 5 hours ago Up 5 hours 3306/tcp testrail-mysql-204567103
b66b60d79e43 registry.gitlab.com/touchbit/image/testrail/web:latest "nginx -g 'daemon ofโฆ" 5 hours ago Up 5 hours 0.0.0.0:56321->80/tcp, 0.0.0.0:58749->443/tcp testrail-web-204553690
033b1f46afa9 registry.gitlab.com/touchbit/image/testrail/fpm:latest "docker-php-entrypoiโฆ" 5 hours ago Up 5 hours 9000/tcp testrail-fpm-204553690
a8879c5ef941 mysql:5.7.22 "docker-entrypoint.sโฆ" 5 hours ago Up 5 hours 3306/tcp testrail-mysql-204553690
069954ba6010 registry.gitlab.com/touchbit/image/testrail/web:latest "nginx -g 'daemon ofโฆ" 5 hours ago Up 5 hours 0.0.0.0:32869->80/tcp, 0.0.0.0:16066->443/tcp testrail-web-204553539
ed6b17d911a5 registry.gitlab.com/touchbit/image/testrail/fpm:latest "docker-php-entrypoiโฆ" 5 hours ago Up 5 hours 9000/tcp testrail-fpm-204553539
1a1eed057ea0 mysql:5.7.22 "docker-entrypoint.sโฆ" 5 hours ago Up 5 hours 3306/tcp testrail-mysql-204553539
ืื ืืืฉืืืืช ืืืฉืืื ืืืฆืืื
ืืคืฆื ืืฉืืื ืืืืืื ืืืื ื ืฉืืจืืช ืืืืืงืืช
ืืื ื ืจืื ืืคื, ืืื ืืฉ ื ืืืื ืก. ื ืืชื ืืืื ืืช ืืฆืื ืืจ ืืืื ืืืื ืฉืืืื ื ืืื ืืืจืฆืื ืคืืขืืื, ืืืืงืจื ืื ืื ืืืคืกืงื ืืืืืื ืืคืืขืืื. ืืื ืคืขื ืืชื ืฆืจืื ืื ืงืืช ืืช ืืจืื ืจ. ืืจืืข ืืืื, ืืืฉืืื ืืฉืืคืืจ ื-GitLab CE ืขืืืื ืืกืืืืก
ืืื ืืืกืคื ื ืืฉืงื ืฉื ืืฉืืื ืืคื ืืื ืืื ืื, ืืืฃ ืืื ืื ืืืกืจ ืขืืื ื ืืืคืขืื ืืืชื ืืื ืืช.
ืขืืืจ ืื ืืคืจืืืงื ืฉืื ื -> CI/CD -> ืืืืืช ืืื ืื ืืืคืขื ืืช ืืืฉืืื Clean runner
ืกื ืืื:
- ืืฉ ืื ื ืจืฅ ืคืื ืืื.
- ืืื ืืชื ืืฉืืืืช ืืื ืืฉืืืืช ืืกืืืื.
- ืื ื ืืคืขืืืื ืืฉืืืืช ืขื ืืืื ื ืืื ืืืจืฆืื ืืืงืืื.
- ืืชื ืืืื ืืืจืืฅ ืืืื ื ืืื ืืืจืฆืื ืืืืคื ืืงืืื ืื ืืงืื ืืืื ืจ.
- ืืืื ื ืฉืืจืืช ืืืืืงืืช ื ืืกืคืื ืืืฆืืจืคืื ืืืฉืืืช ืืฆืื ืืจ.
- ืืคืฉืจ ืื ืงืืช ืืช ืืจืื ืจ ืืชืืื ืืช Docker ืืฉื ืืช.
ืืื ืืืชืงื ื ืืื ~2 ืฉืขืืช.
ืื ืืื, ืืขืฆื. ืืฉืื ืืงืื ืืฉืื.
ืืงืืจ: www.habr.com