Amin'ny fanazaran-tenako, matetika no nitranga fa ny fitsapana fampidirana dia "nokarakaraina" amin'ny tetikasa. Ary matetika ny olana voalohany sy manan-danja indrindra dia ny fantsona CI, izay ny fitiliana fampidirana mivoatra serivisy (s) dia tanterahina ao amin'ny tontolo dev/stage. Niteraka olana vitsivitsy izany:
Noho ny lesoka amin'ny serivisy manokana mandritra ny fitsapana fampidirana, dia mety ho simban'ny angon-drakitra tapaka ny faritra fitsapana. Nisy tranga rehefa nandefa fangatahana tamin'ny endrika JSON tapaka ny serivisy, izay nahatonga ny fijoroana ho tsy azo ampiasaina tanteraka.
Ny fihenan'ny fizaran-tsarimihetsika rehefa mitombo ny angona fitsapana. Heveriko fa tsy misy dikany ny mamaritra ohatra amin'ny fanadiovana/famerenana ny angon-drakitra. Tamin'ny fanazaran-tenako dia tsy nahita tetikasa izay nandehanan'ity fomba fiasa ity aho.
Atahorana hanelingelina ny fiasan'ny fizaran-tany fitsapana rehefa mitsapa ny firafitry ny rafitra ankapobeny. Ohatra, mpampiasa / vondrona / tenimiafina / politika fampiharana.
Ny angona andrana avy amin'ny andrana mandeha ho azy dia manasarotra ny fiainana ho an'ireo mpanandrana tanana.
Ny sasany dia hilaza fa ny autotest tsara dia tokony hanadio ny angon-drakitra aorian'ny tenany. Manana hevitra manohitra aho:
Tena mora ampiasaina ny fijoroana dynamic.
Tsy ny zavatra rehetra no azo esorina amin'ny rafitra amin'ny alΓ lan'ny API. Ohatra, tsy nampiharina ny antso hamafa zavatra iray satria mifanohitra amin'ny lojikan'ny fandraharahana izany.
Rehefa mamorona zavatra amin'ny alΓ lan'ny API, dia misy metadata be dia be azo noforonina, izay manahirana ny mamafa.
Raha misy fiankinan-doha amin'izy ireo ny fitsapana, dia lasa aretin'andoha ny dingan'ny fanadiovana ny angon-drakitra aorian'ny fanaovana fitiliana.
Fanampiny (ary, raha ny hevitro, tsy voamarina) dia miantso ny API.
Ary ny hevitra fototra: rehefa manomboka voafafa mivantana avy amin'ny angon-drakitra ny angona fitsapana. Mivadika ho cirque PK/FK tena izy! Henonay avy amin'ny mpamorona hoe: "Vao avy nanampy / nesoriko / nanome anarana famantarana iray aho, nahoana no tratra ny fitsapana fampidirana 100500?"
Raha ny hevitro, ny vahaolana tsara indrindra dia ny tontolo iainana mavitrika.
Maro ny olona mampiasa docker-compose mba hampandehanana tontolo fitsapana, saingy vitsy ny olona mampiasa docker-compose rehefa manao fitiliana fampidirana amin'ny CI/CD. Ary eto aho dia tsy mihevitra ny kubernetes, swarm ary sehatra orkestra kaontenera hafa. Tsy ny orinasa rehetra no manana azy ireo. Tsara raha toa ny docker-compose.yml ho an'ny rehetra.
Na dia manana mpihazakazaka QA manokana aza isika, ahoana no ahafahantsika mahazo antoka fa tsy mifanalavitra ny serivisy natomboka tamin'ny alΓ lan'ny docker-compose?
Ahoana ny fanangonana ny diarin'ny serivisy voasedra?
Ahoana no hanadiovana ny mpihazakazaka?
Manana mpihazakazaka GitLab manokana ho an'ny tetikasako aho ary nifanena tamin'ireo fanontaniana ireo nandritra ny fampandrosoana mpanjifa Java ho an'ny TestRail. Ny marimarina kokoa, rehefa manao fitsapana fampidirana. Eto ambany isika dia hamaha ireo olana ireo amin'ny fampiasana ohatra avy amin'ity tetikasa ity.
Ho an'ny mpihazakazaka dia manoro milina virtoaly Linux misy 4 vCPU, 4 GB RAM, 50 GB HDD aho.
Betsaka ny fampahalalana momba ny fametrahana gitlab-runner amin'ny Internet, ka vetivety dia:
Midira amin'ny milina amin'ny SSH
Raha manana RAM latsaky ny 8 GB ianao dia manoro hevitra aho manaova swap 10 GBmba tsy ho avy ny mpamono OOM hamono ny asanay noho ny tsy fahampian'ny RAM. Mety hitranga izany rehefa asa mihoatra ny 5 no atomboka miaraka. Hivoatra miadana kokoa ny asa, fa tsy mitsaha-mitombo.
Ohatra amin'ny mpamono OOM
Raha hitanao ao amin'ny diarin'ny asa bash: line 82: 26474 Killed, dia tanteraho fotsiny amin'ny mpihazakazaka 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
Ary raha toa ka toy izao ny sary, dia ampio swap na ampio RAM.
Ny tena asa dia docker-compose.yml universal, izay azon'ny developer/testers ampiasaina eo an-toerana sy amin'ny fantsona CI.
Voalohany indrindra, manao anarana serivisy tokana ho an'ny CI izahay. Ny iray amin'ireo fari-piainana tsy manam-paharoa ao amin'ny GitLab CI dia ny variable CI_JOB_ID. Raha mamaritra ianao container_name misy dikany "service-${CI_JOB_ID:-local}", avy eo amin'ny tranga:
raha CI_JOB_ID tsy voafaritra amin'ny faribolan'ny tontolo iainana,
dia ho ny anaran'ny serivisy service-local
raha CI_JOB_ID voafaritra amin'ny fari-piainan'ny tontolo iainana (ohatra 123),
dia ho ny anaran'ny serivisy service-123
Vokatry ny fampandehanana asa toy izany, ny lahatahiry logs ao amin'ny artifacts dia ahitana logs serivisy sy fitsapana. Izay tena mety raha misy fahadisoana. Ny fitsapana tsirairay amin'ny parallèle dia manoratra ny diany manokana, fa hiresaka momba izany aho.
$ 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
Vita soa aman-tsara ny asa rehetra
Ny artifacts asa dia misy diarin'ny serivisy sy fitsapana
Toa tsara ny zava-drehetra, saingy misy ny nuance. Mety ho foanana an-keriny ny fantsona fantsona rehefa mandeha ny andrana fampiraisana, ka amin'izay dia tsy hijanona ny kaontenera mandeha. Indraindray mila manadio ny mpihazakazaka ianao. Indrisy anefa fa mbola eo amin'ny toerany ny asa fanatsarana ao amin'ny GitLab CE Open
Saingy nampianay ny fandefasana asa iray araka ny fandaharam-potoana, ary tsy misy mandrara anay amin'ny fampandehanana azy amin'ny tanana.
Mandehana any amin'ny tetikasanay -> CI/CD -> Fandaharana ary tanteraho ny asa Clean runner
Total:
Manana mpihazakazaka akorandriaka iray izahay.
Tsy misy fifanoherana eo amin'ny asa sy ny tontolo iainana.