ProHoster > Блог > Maamulka > GitLab Shell Runner. Bilaabidda tartan ee adeegyada la tijaabiyay iyadoo la adeegsanayo Docker Compose
GitLab Shell Runner. Bilaabidda tartan ee adeegyada la tijaabiyay iyadoo la adeegsanayo Docker Compose
Maqaalkani wuxuu noqon doonaa mid xiiso u leh tijaabiyeyaasha iyo horumarinta labadaba, laakiin waxaa loogu talagalay inta badan khabiirada otomatiga ah ee la kulma dhibaatada samaynta GitLab CI/CD ee tijaabinta isdhexgalka ee xaaladaha ilaha kaabayaasha ku filan iyo/ama maqnaanshaha weelka madal orchestration. Waxaan kuu sheegi doonaa sida loo dejiyo geynta deegaanka tijaabada iyadoo la adeegsanayo docker ka kooban hal orodyahan GitLab ah iyo si marka la geeyo dhowr deegaan, adeegyada la bilaabay aysan faragelin midba midka kale.
Dhaqankeyga, inta badan waxay dhacday in tijaabada isdhexgalka lagu daaweeyay mashaariicda. Badana dhibka ugu horreeya uguna muhiimsan waa dhuumaha CI, kaas oo tijaabinta isdhexgalka la horumarinayo adeega(yada) waxaa lagu fuliyaa jawi dev/stage. Tani waxay keentay dhibaatooyin dhowr ah:
Sababo la xiriira cilladaha adeeg gaar ah inta lagu jiro baaritaanka isdhexgalka, wareegga tijaabada waxaa laga yaabaa in ay waxyeelo gaarto xogta jaban. Waxaa jiray kiisas markii la dirayay codsi leh qaab JSON oo jaban ay burburisay adeega, kaas oo ka dhigay istaagga gabi ahaanba mid aan shaqaynayn.
Hoos u dhaca wareegga tijaabada marka xogta imtixaanku korodho. Waxaan u maleynayaa inaysan macno lahayn in lagu qeexo tusaale nadiifinta/dib-u-celinta xogta xogta. Dhaqankayga, lama kulmin mashruuc uu nidaamkani si habsami leh ugu socday.
Khatarta carqaladaynta shaqada wareegga tijaabada marka la tijaabinayo goobaha nidaamka guud. Tusaale ahaan, isticmaale/koox/password/ siyaasada codsiga.
Xogta tijaabada ah ee laga helay imtixaanada iswada ayaa nolosha ka dhigaya mid ku adag tijaabiyaasha gacanta.
Qaarkood waxay dhihi doonaan autotes-yada wanaagsan waa inay nadiifiyaan xogta naftooda ka dib. Waxaan leeyahay doodo ka dhan ah:
Istaarooyinka firfircoon ayaa aad ugu habboon in la isticmaalo.
Shay kasta lagama saari karo nidaamka API-ga. Tusaale ahaan, baaq ah in la tirtiro shay lama hirgelin sababtoo ah waxay ka hor imanaysaa caqligalka ganacsiga.
Markaad shay ku abuurayso API-ga, tiro badan oo xog badan ah ayaa la abuuri karaa, taas oo dhibaato ku ah in la tirtiro.
Haddii imtixaanadu ay dhexdooda ku tiirsan yihiin, markaa habka nadiifinta xogta ka dib imtixaannada socda waxay isu beddelaan madax xanuun.
Wicitaan dheeri ah (iyo, ra'yigeyga, aan qiil loo helin) wicitaannada API.
Iyo doodda ugu weyn: marka xogta tijaabada la bilaabo in si toos ah looga nadiifiyo kaydka xogta. Tani waxay isu beddeshaa goob-wareeg PK/FK dhab ah! Waxaan ka maqalnaa horumariyeyaasha: "Waxaan hadda ku daray/saaray/beddelay calaamad, maxaa 100500 imtixaan is-dhexgal ah loo qabtay?"
Fikradayda, xalka ugu fiican waa jawi firfircoon.
Dad badan ayaa isticmaala docker-compose si ay u socodsiiyaan jawi tijaabo ah, laakiin dad yar ayaa adeegsada docker-compose marka ay samaynayaan tijaabada isdhexgalka CI/CD. Oo halkan anigu kuma xisaabtamayo kubernetes, raxan iyo meelaha kale ee weelka lagu sameeyo. Shirkad kastaa ma haysato iyaga. Way fiicnaan lahayd haddii docker-compose.yml uu ahaa mid caalami ah.
Xataa haddii aan leenahay orodyahankayaga QA-ga, sideen ku hubin karnaa in adeegyada lagu bilaabay docker-compose aysan midba midka kale faragelin?
Sidee loo ururiyaa diiwaannada adeegyada la tijaabiyay?
Sidee loo nadiifiyaa orodyahanka?
Waxaan u leeyahay orodyahan GitLab u gaar ah mashaariicdayda waxaanan la kulmay su'aalahan intii lagu jiray horumarka Macmiilka Java si ay u Tijaabada Tareenka. Si aad u saxan, marka la wado imtixaanada isdhexgalka. Hoos waxaan ku xallin doonaa arrimahan anagoo adeegsanayna tusaalooyin mashruucan.
Orodyahanka, waxaan kula talinayaa mashiinka farsamada gacanta ee Linux oo leh 4 vCPU, 4 GB RAM, 50 GB HDD.
Waxaa jira macluumaad badan oo ku saabsan samaynta gitlab-runner ee internetka, si kooban:
Ka soo gal mashiinka adigoo isticmaalaya SSH
Haddii aad haysato wax ka yar 8 GB RAM, markaa waxaan ku talinayaa samee isdhaafsi 10 GBsi aanu dilaaga OOM u iman oo aanu u dilin hawlaheenna RAM la'aanta awgeed. Tani waxay dhici kartaa marka in ka badan 5 hawlood la bilaabo isku mar. Shaqadu waxay u socon doonaan si tartiib tartiib ah, laakiin si joogto ah.
Tusaale la socda dilaaga OOM
Haddii aad ku aragto diiwaanka hawsha bash: line 82: 26474 Killed, ka dibna kaliya ku fuli orodyahanka 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
Oo haddii sawirku u eg yahay wax sidan oo kale ah, ka dibna ku dar isku beddelasho ama ku dar RAM.
Marka labaad, waxaan abuurnaa shabakad guud oo loogu talagalay adeegyada la bilaabay. Tani waxay ina siinaysaa go'doomin heer-shabakad ah marka aan wadno jawi tijaabo oo badan.
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 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
Wax walba waxay u muuqdaan kuwo qurux badan, laakiin waxaa jira nuance. Dhuumaha waa la tirtiri karaa si xoog ah inta ay socdaan tijaabooyinka isdhexgalka, markaas oo weelasha socda aan la joojin doonin. Waqti ka waqti waxaad u baahan tahay inaad nadiifiso orodyahanka. Nasiib darro, hawsha hagaajinta ee GitLab CE wali waxay ku jirtaa xaalad Open
Laakin waxa aanu ku darnay in hawsha la bilaabayo si jadwal ah, mana jirto cid noo diidaysa in aan gacanta ku wadno.
Tag mashruucayaga -> CI/CD -> Jadwalka oo socodsii hawsha Clean runner
Wadarta:
Waxaan leenahay hal orodyahan qolof ah.
Ma jiraan wax khilaaf ah oo u dhexeeya hawlaha iyo deegaanka.
Waxaanu wadnaa hawlo leh imtixaanada la qabsiga si barbar socda.
Waxaad samayn kartaa imtixaanada la qabsiga gudaha ama weel.
Adeegga iyo diiwaannada tijaabada ayaa la ururiyaa oo lagu dhejiyaa hawsha dhuumaha.
Waa suurtogal in laga nadiifiyo orodyahanka sawiradii hore ee Docker.