×עך ×ַך×××§× ×××¢× ×××× ×€×× ××× ×עךעס ×Š× ×××××¢ ×עס×עךס ××× ××¢×××¢××֞׀֌עךס, ×Öž×עך ××× ×××¢× ×עך ××××€ÖŒ× ×€Ö¿×ַך ×Öž××Ö·×××ש×Ö·× ×¡×€ÖŒ×¢×©×Ö·××ַסץ ×××֞ס ××¢× ×¢× ×€×××¡× ××× ×× ×€ÖŒ×š×Öž×××¢× ×€×× ××ַש××¢×××§× GitLab CI / CD ×€Ö¿×ַך ×× ××Ö·×ך××ש×Ö·× ×עס××× × ××× ×× ×Öž×× ×€×× × ×× ××¢× ×××ק ×× ×€×š×ַס×ך×ַק×שעך ךעס××š×¡× ××× / ×Öž×עך ×עך ×Ö·××עק ×€×× ×Ö· ק×Ö·× ×××× ×¢×š ×֞ךקעס×ך×Ö·×××Öž×. ×€ÖŒ××Ö·××€×֞ך××¢. ××× ×××¢× ××Öž×× ××ך ××× ×Š× ×©××¢×× ×× ×××€ÖŒ×××××Ö·× × ×€×× ×€ÖŒ×š×Öž××¢ ×× ××××ך×Ö·× ××Ö·× ×¥ × ××Š× ××֞קקעך ק×Ö·××€ÖŒ×Öž×× ××××£ ×××× GitLab ש×Öž× ×š×Ö·× ×¢×š ××× ×Ö·××× ×Ö·× ×××¢× ×××€ÖŒ××××× × ×¢×××¢××¢ ×× ××××ך×Ö·× ××Ö·× ×¥, ×× ××Öž× ××©× ××Ö·××× ×× ×ס ××Öž× × ×× ×ַך××Ö·× ×××©× ××× ××× ××¢×עך ×× ×עךעך.
׊×׀ך×××
××× ×עך×ך×× × GitLab Shell Runner ׀֌ך×׀֌עך×× × docker-compose.yml ׀֌ך×׀֌עך×× × ×× Makefile ׀֌ך×׀֌עך×× × .×××××Ö·×-ס×.××× ××Ö·××עס
××× ×עך×ך×× ×
-
××× ×××× ×€×ך, עס ×Öž×€× ××¢×ך××€× ×Ö·× ×× ××Ö·×ך××ש×Ö·× ×עס××× × ××× "××××× ×××" ××××£ ׀֌ך×Ö·××שעקס. ××× ×Öž×€× ×עך עךש×עך ××× ××¢×š×¡× ××Ö·×××Ö·××ק ׀֌ך×Öž×××¢× ××× ×× ×¡× ×š×¢×š× - ××× ××¢, ××× ×××֞ס ×× ××Ö·×ך××ש×Ö·× ×עס××× × ×××Ö·×¢× ××ק ××¢×××¢××Öž×€ÖŒ×¢× ×¡×¢×š×××ס (s) ××× ××ך××עק×Öž×× ××× ×Ö· ××¢×× / ××× ×¢ ס××××××¢. ××֞ס ××Öž× ××¢×€Ö¿××š× ××Ö·× ×¥ ×¢×××¢××¢ ׀ך××××¢××¢×:
- ךע×× ×Š× ×סך×× ×ת ××× ×Ö· ××Ö·××× ×עך ××× ×¡× ×עש×ַס ×× ××Ö·×ך××ש×Ö·× ×עס××× ×, ×× ×€ÖŒ×š××××š× ×§×š××Ö·× ×§×¢× ×××× ××Ö·×××××©× ×××š× ×Š×¢×ך××× ××Ö·××. עס ××¢× ×¢× ×§×ַסעס ×××¢× ×©××§× ×Ö· ××§×©× ××× ×Ö· ׊ע×ך××× JSON ×€Ö¿×֞ך××Ö·× ×§×š×Ö·×©× ×× ××× ×¡×, ×××֞ס ×š×¢× ××¢×š× ×× ×©×××× ××֞ך ×× ×ַ׀֌עך×Ö·××Ö·×.
- ס××Öž×××Ö·×× ×€×× ×× ×€ÖŒ×š××××š× ×§×š××Ö·× ××× ×× ×€ÖŒ×š×Öž××¢ ××Ö·×× ×× ×§×š×ס××. ××× ×ך×Ö·××× ×¢×¡ ×××× ×§××× ××× ×¢× ×Š× ××ַשך××Ö·×× ×Ö· ×××ַש׀֌×× ××× ×š××× ×ק×× × / ך×Öž×××× × ×Š×ך×ק ×× ××Ö·××Ö·×××ס. ××× ×××× ×€×ך, ××× ××Öž×× × ××©× ××¢×€ÖŒ××Öž× ××¢×š× ×Ö· ׀֌ך×××¢×§× ××× ××¢× ×€ÖŒ×š×֞׊ע××ך ××× ×¡×××××.
- ך×××ק××š× ×€×× ××סך×Ö·×€ÖŒ××× × ×× ×€×Ö·× ×קש×Ö·× ×Ö·×××× ×€×× ×× ×€ÖŒ×š××××š× ×§×š××Ö·× ×××¢× ×עס××× × ×Ö·×××¢×××× ×¢ ס×ס××¢× ×¡×¢×××× ×ס. ×€Ö¿×ַך ×××ַש׀֌××, ××Ö·× ×׊עך / ×ך×׀֌ע / ×€ÖŒ×ַך×Öž× / ×Ö·×€ÖŒ××ַק××ש×Ö·× ×€ÖŒ×Öž××××ק.
- ××¢×¡× ××Ö·×× ×€×× ×Öž××Ö·×××××× ×עסץ ×××× ××¢×× ×©××עך ×€Ö¿×ַך ××Ö·× ××Ö·× ×עס×עךס.
×¢×××¢××¢ ×××¢×× ××Öž×× ×Ö·× ××× ×Ö·×××Öž×עס×ס ××Öž× ×š××× ××§× ×× ××Ö·×× × ×Öž× ×××. ××× ××× ××¢× ×ת קע××:
- ××× ×Ö·××ש ס××Ö·× ×× ××¢× ×¢× ×××עך ××ַק×××¢× ×Š× × ×׊×.
- × ×× ××¢×עך ××××€×¢×¥ ×§×¢× ×¢× ×××× ×Ö·××עק××¢× ×××¢× ×€×× ×× ×¡×ס××¢× ×××š× ×× ×Ö·×€ÖŒ×. ×€Ö¿×ַך ×××ַש׀֌××, ×Ö· ך××£ ×Š× ××ס××¢×§× ×Ö· ××××€×¢×¥ ××× × ××©× ×××€ÖŒ××Ö·××¢× ×Ö·× ××××Ö·× ×¢×¡ ק×Ö·× ×ך×Ö·××קץ ××¢×©×¢×€× ××Öž××ק.
- ×××¢× ×§×š×××××× × ×Ö· ××××€×¢×¥ ×××š× ×× API, ×Ö· ך×××ק ס×××¢ ×€×× ââ××¢××Ö·××Ö·××Ö· ×§×¢× ×¢× ×××× ××ש××€×, ×××֞ס ××× ×€ÖŒ×š×Öž×××¢××Ö·××ק ×Š× ××ס×עק×.
- ×××× ×עסץ ××Öž×× ×××€ÖŒ×¢× ××Ö·× ×¡×× ×Š××××©× ×××, ×עך ׀֌ך×֞׊עס ×€×× ×š××× ×ק×× × ××Ö·×× × ×Öž× ×€×××¡× ××ק ×עסץ ×××š× ×¡ ××× ×Ö· ק×Öž×€ÖŒ××××××ק.
- × ×Öž× (×××, ××× ×××× ×××× ×× ×, × ×× ×עךע×××€×ך××ק×) ך××€× ×Š× ×× ×Ö·×€ÖŒ×.
- ××× ×עך ××××€ÖŒ× ×ַך××××¢× ×: ×××¢× ×€ÖŒ×š××××š× ××Ö·×× ×¡××ַךץ ×Š× ×××× ×§×××š× ××××Ö·× ×€×× ×× ××Ö·××Ö·×××ס. ××֞ס ××× ×××š× ×× × ××× ×Ö· ×€×ַק××ש PK / FK ׊×ךק! ××ך ××¢×š× ×€×× ××¢×××¢××֞׀֌עךס: "××× × ×֞ך ׊×××¢××¢×× / ×Ö·××עק××¢× ×××¢× / ך×× ×××× ×Ö· ׊××××, ×××֞ס 100500 ×× ××Ö·×ך××ש×Ö·× ×עסץ ××¢× ×¢× ××¢×××€×?"
××× ×××× ×××× ×× ×, ×× ××¢×š×¡× ×Öž×€ÖŒ××××Ö·× ×××××× × ××× ×Ö· ××× ×Ö·××ש ס××××××¢.
- ×€×××¢ ××¢× ××©× × ××Š× ××֞קעך-ק×Öž××€ÖŒ×֞סע ×Š× ××××€× ×Ö· ׀֌ך×Öž××¢ ס××××××¢, ×Öž×עך ××××× ×ק ××¢× ××©× × ××Š× ××֞קעך-ק×Öž××€ÖŒ×֞סע ×××¢× ×§×Ö·× ××ַק××× × ×× ×Ö·×ך××ש×Ö·× ×עס××× × ××× ×¡× / ס×. ××× ××Öž ××× ××Öž× × ×× × ×¢××¢× ××× ×ש××× ×§×××¢×š× ×¢×עס, ס×××Öž×š× ××× ×× ×עךע ק×Ö·× ×××× ×¢×š ×֞ךקעס×ך×Ö·×××Öž× ×€ÖŒ××Ö·××€×֞ך×ס. × ×× ××¢×עך ×€×ך××¢ ××× ×××. עס ×××Öž×× ×××× ×€××Ö·× ×××× docker-compose.yml ××× ×× ×××עךס×Ö·×.
- ××€××× ×××× ××ך ××Öž×× ××× ××עך ×××××¢× ×¢ QA ך×Ö·× ×¢×š, ××× ×§×¢× ×¢× ××ך ××Ö·×× ×××עך ×Ö·× ×¡×¢×š×××סעס ××Öž× ××©× ×××š× ××֞קעך-ק×Öž××€ÖŒ×֞סע ××Öž× × ×× ×ַך××Ö·× ×××©× ××× ××× ××¢×עך ×× ×עךעך?
- ××× ×Š× ××Ö·×××¢× ××Öž×ס ×€×× ×עס××¢× ××Ö·××× ×× ×ס?
- ××× ×Š× ×š××× ×× ×š×Ö·× ×¢×š?
××× ××Öž×× ×××× ×××××¢× ×¢ GitLab ך×Ö·× ×¢×š ×€Ö¿×ַך ×××× ×€ÖŒ×š×Ö·××שעקס ××× ××× ××¢×€ÖŒ××Öž× ××¢×š× ×× ×€Ö¿×š××× ×עש×ַס ×Ö·× ××××ק××× ×
GitLab Shell Runner
×€Ö¿×ַך ×Ö· ×××׀עך, ××× ×š×¢×§×Öž××¢× ×××š× ×Ö· ××× ×קס ×××ך×××Ö·× ××ַש×× ××× 4 ××ק׀֌×, 4 ×××××××× ××ַך×Ö·×, 50 ×××××××× ×××.
עס ××× ×Ö· ×€ÖŒ××Ö·×¥ ×€×× ××× ×€Ö¿×֞ך××ַ׊××¢ ×××¢×× ××ַש××¢×××§× ×××××Ö·×-ך×Ö·× ×¢×š ××××£ ×עך ××× ××¢×š× ×¢×¥, ×Ö·××× ×עק×׊עך:
- ××Öž××× ×Š× ×× ××ַש×× ×××š× SSH
-
×××× ××ך ××Öž×× ××××× ×קעך ××× 8 ×××××××× ××ַך×Ö·×, ××× ×š×¢×§×Öž××¢× ××ך×
××Ö·×× ××ס×××Ö·×× 10 ×××××××× ×Ö·××× ×Ö·× ×× OOM ק×××עך ×§×¢× × ××©× ×§×××¢× ××× ××××× ××× ××עך ××ַסקס ××××Ö·× ×€×× ×€×¢×× ×€×× ××ַך×Ö·×. ××֞ס ×§×¢× ×€ÖŒ×ַס××š× ×××¢× ×עך ××× 5 ××ַסקס ××¢× ×¢× ××Öž× ××©× ×¡××××Ö·××××× ××ַס××. ×× ××ַסקס ×××¢× ×€ÖŒ×š×Öž×ךעס ×עך ס××Öž×××, ×Öž×עך ס××¢××Ö·××.×××ַש׀֌×× ××× OOM ק×××עך
×××× ××ך ××¢× ××× ×× ×ַך××¢× ××Öž×ס
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
××× ×××× ×× ×××× ×§××§× ×¢×€ÖŒ×¢×¡ ××× ××֞ס, ×Öž×עך ××××× ××ס×××Ö·×× ×Öž×עך ××××× ××ַך×Ö·×.
- ×× ×¡××Ö·××ך×
×××××Ö·×-ך×Ö·× ×¢×š ,××֞קקעך ,××֞קעך-ק×Ö·××€ÖŒ×Öž×× , ××Ö·××. - ×Ö·××× × ×Ö· ××Ö·× ×׊עך
gitlab-runner
×Š× ×עך ×ך×׀֌עdocker
sudo groupadd docker sudo usermod -aG docker gitlab-runner
ךע××ס×ך××š× ×××××Ö·×-ך×Ö·× ×¢×š.-
×¢×€×¢× ×¢× ×€Ö¿×ַך ×¢××××× ×
/etc/gitlab-runner/config.toml
××× ×××××concurrent=20 [[runners]] request_concurrency = 10
××֞ס ×××¢× ××Öž×× ××ך ×Š× ××××€× ×€ÖŒ×ַך×Ö·××¢× ××ַסקס ××××£ ×××× ×š×Ö·× ×¢×š. ××××¢× ×¢× ×עך
××Öž .
×××× ××ך ××Öž×× ×Ö· ×עך ש××ַךק ××ַש××, ×××©× 8 ××ק׀֌×, 16 ×××××××× ××ַך×Ö·×, ×× × ×××¢×š× ×§×¢× ×¢× ×××× ××¢×××× ×××Ö· ××× ×ס×עך 2 ××× ×ךעסעך. ××עך עס ×Ö·××¢ ××¢×€ÖŒ×¢× ×ס ××××£ ×××֞ס ×€ÖŒ×× ×§× ×××¢× ×××× ××Öž× ××©× ××××£ ××¢× ×š×Ö·× ×¢×š ××× ××× ×××֞ס ק×××Ö·× ××××.
ס'××× ××¢× ××.
׀֌ך×׀֌עך×× × docker-compose.yml
×× ××××€ÖŒ× ×ַך××¢× ××× ×Ö· ×× ×××עךס×Ö·× docker-compose.yml, ×××֞ס ××¢×××¢××֞׀֌עךס / ×עס×עךס ×§×¢× ×¢× × ××Š× ×××××¢ ××Öž×ק×Ö·×× ××× ××× ×× ×¡× ×š×¢×š× - ××× ××¢.
עךש×עך ×€×× ×Ö·××¢, ××ך ××Ö·×× ××× ×Š×ק ××× ×¡× × ×¢××¢× ×€Ö¿×ַך ס×. ×××× ×¢×š ×€×× ×× ××× ×Š×ק ××עך××Ö·××Ö·×× ××× 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
×Öž×עך × ×× ×Ö·××¥ ××× ×Ö·××× ×€ÖŒ×©×× ××× ×§×Ö·×עך ××× ×¡×.
׀֌ך×׀֌עך×× × ×× Makefile
××× × ××Š× Makefile ××××Ö·× ×¢×¡ ××× ×××עך ××ַק×××¢× ×××××¢ ×€Ö¿×ַך ××××¢ ס××××××¢ ×€×ַך×××Ö·×××× × ××× ××× ×¡×. ×עך ×Öž× ×××× ××Ö·×עךק×× ××¢×
# У ÐŒÐµÐœÑ Ð² пÑПекÑаÑ
вÑе вÑпПЌПгаÑелÑÐœÑе веÑО Ð»ÐµÐ¶Ð°Ñ Ð² ЎОÑекÑПÑОО `.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
××Ö·×× ××֞קעך-××Öž×ס
$ 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
׀֌ך×׀֌עך×× × .×××××Ö·×-ס×.×××
×€×××¡× ××ק ×× ××Ö·×ך××ש×Ö·× ×עסץ
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
××× ×Ö· ךע×××××Ö·× ×€×× ×€×××¡× ××ק ×Ö·××Ö· ×Ö· ×ַך××¢×, ×× ××Öž×ס ×××¢×××××Ö·×עך ××× ×× ×ַך××Ö·×€×ַקץ ×××¢× ×Ö·× ×××Ö·××× ×¡×¢×š×××ס ××× ×€ÖŒ×š××××š× ××Öž×ס. ×××֞ס ××× ×××עך ××ַק×××¢× ××× ×€×Ö·× ×€×× ×¢×š×š×֞ךס. ××¢×עך ׀֌ך×Öž××¢ ××× ×€ÖŒ×ַך×Ö·××¢× ×©×š×××× ×××Ö·× ××××× ×§××Öž×¥, ×Öž×עך ××× ×××¢× ×š×¢×× ×××¢×× ××¢× ×¡×¢×€ÖŒ×¢×š×Ö·×××.
ך××× ×ק×× × ×× ×š×Ö·× ×¢×š
×× ×ַך××¢× ×××¢× ×××× ××Öž× ××©× ××××× ×××× ×Ö· ×€ÖŒ××Ö·×.
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 ××× × ×Öž× ××× ×¡××Ö·××ס
×Öž×עך ××ך ××Öž×× ×Š×××¢××××× ×× ×§×Ö·×עך ×€×× ×Ö· ×ַך××¢× ×××× ×Ö· ×€ÖŒ××Ö·×, ××× ×§××× ×××× ×¢×š ×€×ַך×××¢×š× ××× ×× ×Š× ××××€× ×¢×¡ ××Ö·× ×××Ö·××.
×××× ×Š× ××× ××עך ׀֌ך×××¢×§× -> ×¡× / ×¡× -> סקע××ש××× ××× ××××€× ×× ×ַך××¢× Clean runner
××Ö·× ×¥:
- ××ך ××Öž×× ×××× ×©×Öž× ×š×Ö·× ×¢×š.
- עס ××¢× ×¢× ×§××× ×§×Öž× ×€×××§× ×Š××××©× ××ַסקס ××× ×× ×¡××××××¢.
- ××ך ××××€× ××ַסקס ××× ×× ××Ö·×ך××ש×Ö·× ×עסץ ××× ×€ÖŒ×ַך×Ö·××¢×.
- ××ך ×§×¢× ×¢× ××××€× ×× ××Ö·×ך××ש×Ö·× ×עסץ ×Öž×עך ××Öž×ק×Ö·×× ×Öž×עך ××× ×Ö· ק×Ö·× ×××× ×¢×š.
- סעך×××ס ××× ×€ÖŒ×š××××š× ××Öž×ס ××¢× ×¢× ××¢××××× ××× ×Ö·××Ö·××©× ×Š× ×× ×š×¢×š× - ××× ××¢ ×ַך××¢×.
- עס ××× ××¢×××¢× ×Š× ×š××× ×× ×š×Ö·× ×¢×š ×€Ö¿×× ×Ö·×× ××֞קקעך ××××עך.
סע××Ö·×€ÖŒ ׊××× ××× ~ 2 שע×.
×Ö·× ×¡ ×Ö·××¢, ×€×ק××ש. ××× ×××¢× ×××× ×Š×׀ך××× ×Š× ××ַק×××¢× ××Ö·×עךק×× ××¢×.
×ק×ך: www.habr.com