เบเบปเบเบเบงเบฒเบกเบเบตเปเบเบฐเบกเบตเบเบงเบฒเบกเบชเบปเบเปเบเบชเปเบฒเบฅเบฑเบเบเบฑเบเบเบนเปเบเบปเบเบชเบญเบเปเบฅเบฐเบเบฑเบเบเบฑเบเบเบฐเบเบฒ, เปเบเปเบกเบตเบเบธเบเบเบฐเบชเบปเบเบเบปเปเบเบเปเบชเปเบฒเบฅเบฑเบเบเบนเปเบเปเบฝเบงเบเบฒเบเบเปเบฒเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบเบเบตเปเบเบฐเปเบเบตเบเบเบฑเบเบเบฑเบเบซเบฒเบเบญเบเบเบฒเบเบเบฑเปเบเบเปเบฒ GitLab CI / CD เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบปเบเบชเบญเบเบเบฐเบชเบปเบกเบเบฐเบชเบฒเบเปเบเปเบเบทเปเบญเบเปเบเบเบญเบเบเบฑเบเบเบฐเบเบฒเบเบญเบเบเบทเปเบเบเบฒเบเปเบเบเบฅเปเบฒเบเบเบตเปเบเปเปเบเบฝเบเบเปเปเบฅเบฐ / เบซเบผเบทเบเบฒเบเบเบฒเบเบเบฑเบ. เปเบงเบเบต orchestration. เบเปเบญเบเบเบฐเบเบญเบเบเปเบฒเบเบเปเบฝเบงเบเบฑเบเบงเบดเบเบตเบเบฒเบเบเบดเบเบเบฑเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบฒเบเบเบปเบเบชเบญเบเปเบเบเปเบเป docker compose เปเบเบเบปเบงเปเบฅเปเบ Shell GitLab เบเบฝเบงเปเบฅเบฐเปเบเบทเปเบญเบงเปเบฒเปเบกเบทเปเบญเบเปเบฒเปเบเปเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบซเบผเบฒเบ, เบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบตเปเปเบเบตเบเบเบปเบงเบเปเปเปเบเบเปเบเบเบเบฑเบเปเบฅเบฐเบเบฑเบ.
เปเบเบทเปเบญเปเบ
เปเบเบทเปเบญเบเปเบเปเบเบทเปเบญเบเบเบปเปเบ GitLab Shell Runner เบเบณเบฅเบฑเบเบเบฐเบเบฝเบก docker-compose.yml เบเบฒเบเบเบฐเบเบฝเบก Makefile เบเบณเบฅเบฑเบเบเบฐเบเบฝเบก .gitlab-ci.yml เบเบปเบ
เปเบเบทเปเบญเบเปเบเปเบเบทเปเบญเบเบเบปเปเบ
-
เปเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบญเบเบเปเบญเบ, เบกเบฑเบเบกเบฑเบเบเบฐเปเบเบตเบเบเบทเปเบเบงเปเบฒเบเบฒเบเบเบปเบเบชเบญเบเบเบฒเบเปเบเบทเปเบญเบกเปเบเบเปเบเปเบเบทเบ "เบเบฐเบเบดเบเบฑเบ" เปเบเปเบเบเบเบฒเบ. เปเบฅเบฐเปเบฅเบทเปเบญเบเปเบเบฑเบเบซเบฒเบเปเบฒเบญเบดเบเปเบฅเบฐเบชเปเบฒเบเบฑเบเบเบตเปเบชเบธเบเปเบกเปเบเบเปเป CI, เปเบเบเบฑเปเบเบเบฒเบเบเบปเบเบชเบญเบเบเบฒเบเปเบเบทเปเบญเบกเปเบเบ เบเปเบฒเบฅเบฑเบเบเบฑเบเบเบฐเบเบฒ เบเบฒเบเบเปเบฅเบดเบเบฒเบเปเบกเปเบเบเปเบฒเปเบเบตเบเบขเบนเปเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก dev/stage. เบเบตเปเปเบฎเบฑเบเปเบซเปเปเบเบตเบเบเบฑเบเบซเบฒเปเบฅเบฑเบเบเปเบญเบ:
- เปเบเบทเปเบญเบเบเบฒเบเบเปเปเบเบปเบเบเปเบญเบเปเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเบชเบฐเปเบเบฒเบฐเปเบเบซเบเบถเปเบเปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบเบปเบเบชเบญเบเบเบฒเบเปเบเบทเปเบญเบกเปเบเบ, เบงเบปเบเบเบญเบเบเบฒเบเบเบปเบเบชเบญเบเบญเบฒเบเบเบฐเปเบเปเบฎเบฑเบเบเบงเบฒเบกเปเบชเบเบซเบฒเบเบเบฒเบเบเปเปเบกเบนเบเบเบตเปเปเบเบเบซเบฑเบ. เบกเบตเบเปเบฅเบฐเบเบตเบเบตเปเบชเบปเปเบเบเปเบฒเบฎเปเบญเบเบเปเบเบตเปเบกเบตเบฎเบนเบเปเบเบ JSON เบเบตเปเปเบเบเบซเบฑเบเปเบฎเบฑเบเปเบซเปเบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบฑเบเบเปเบญเบ, เปเบเบดเปเบเปเบฎเบฑเบเปเบซเปเบเบฒเบเบขเบทเบเบเปเปเบชเบฒเบกเบฒเบเปเบเปเบเบฒเบเปเบเปเบขเปเบฒเบเบชเบปเบกเบเบนเบ.
- เบเบฒเบเบเปเบฒเบฅเบปเบเบเบญเบเบงเบปเบเบเบญเบเบเบฒเบเบเบปเบเบชเบญเบเบเปเบญเบเบงเปเบฒเบเปเปเบกเบนเบเบเบฒเบเบเบปเบเบชเบญเบเปเบเบตเปเบกเบเบถเปเบ. เบเปเบฒโเบเบฐโเปเบเบปเปเบฒโเบเบดเบโเบงเปเบฒโเบกเบฑเบโเบเปเปโเบกเบตโเบเบงเบฒเบกโเบฎเบนเปโเบชเบถเบโเบเบตเปโเบเบฐโเบญเบฐโเบเบดโเบเบฒเบโเบเบปเบงโเบขเปเบฒเบโเบเบตเปโเบกเบตโเบเบฒเบโเบเปเบฒโเบเบงเบฒเบกโเบชเบฐโเบญเบฒเบ / rolling เบเบฑเบโเบเบทเบโเปเบโเบเปเบญเบโเบเบฒเบโเบเปเปโเบกเบนเบ. เปเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบญเบเบเปเบญเบ, เบเปเบญเบเบเปเปเปเบเปเบเบปเบเบเบฑเบเปเบเบเบเบฒเบเบเบตเปเบเบฑเปเบเบเบญเบเบเบตเปเบเปเบฒเปเบเบตเบเปเบเบขเปเบฒเบเบชเบฐเบเบฒเบ.
- เบเบงเบฒเบกเบชเปเบฝเบเบเปเปเบเบฒเบเบเบฑเบเบเบงเบฒเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบญเบเบงเบปเบเบเบญเบเบเบฒเบเบเบปเบเบชเบญเบเปเบเปเบงเบฅเบฒเบเบตเปเบเบฒเบเบเบปเบเบชเบญเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบฅเบฐเบเบปเบเบเบปเปเบงเปเบ. เบเบปเบงเบขเปเบฒเบ, เบเบฐเปเบเบเบฒเบเบเบนเปเปเบเป/เบเบธเปเบก/เบฅเบฐเบซเบฑเบเบเปเบฒเบ/เปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ.
- เบเปเปเบกเบนเบเบเบฒเบเบเบปเบเบชเบญเบเบเบฒเบเบเบฒเบเบเบปเบเบชเบญเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบเปเบฎเบฑเบเปเบซเปเบเบตเบงเบดเบเบกเบตเบเบงเบฒเบกเบซเบเบธเปเบเบเบฒเบเบชเปเบฒเบฅเบฑเบเบเบนเปเบเบปเบเบชเบญเบเบเบนเปเบกเบท.
เบเบฒเบเบเบปเบเบเบฐเปเบงเบปเปเบฒเบงเปเบฒ autotests เบเบตเปเบเบตเบเบงเบเปเบฎเบฑเบเบเบงเบฒเบกเบชเบฐเบญเบฒเบเบเปเปเบกเบนเบเบซเบผเบฑเบเบเบฒเบเบเบปเบงเปเบญเบ. เบเปเบญเบเบกเบตเบเบฒเบเปเบเปเบเบฝเบเบเบฑเบ:
- เบเบฒเบเบฑเปเบเปเบเบเปเบเบเบฒเบกเบดเบเปเบกเปเบเบชเบฐเบเบงเบเบซเบผเบฒเบเบเบตเปเบเบฐเบเปเบฒเปเบเป.
- เบเปเปเปเบกเปเบเบเบธเบเปเบงเบฑเบเบเบธเบชเบฒเบกเบฒเบเบเบทเบเปเบเบเบเปเบฒเบเบญเบญเบเบเบฒเบเบฅเบฐเบเบปเบเบเปเบฒเบ API. เบเบปเบงเบขเปเบฒเบ, เบเบฒเบเปเบเบซเบฒเปเบเบทเปเบญเบฅเบถเบเบงเบฑเบเบเบธเบเปเปเปเบเปเบเบทเบเบเบฐเบเบดเบเบฑเบเปเบเบฒเบฐเบงเปเบฒเบกเบฑเบเบเบฑเบเบเบฑเบเปเบซเบเบเบปเบเบเบฒเบเบเบธเบฅเบฐเบเบดเบ.
- เปเบกเบทเปเบญเบชเปเบฒเบเบงเบฑเบเบเบธเบเปเบฒเบ API, เบเปเบฒเบเบงเบ metadata เบชเบฒเบกเบฒเบเบเบทเบเบชเปเบฒเบเบเบทเปเบ, เปเบเบดเปเบเปเบเบฑเบเบเบฑเบเบซเบฒเบเบตเปเบเบฐเบฅเบถเบ.
- เบเปเบฒเบเบฒเบเบเบปเบเบชเบญเบเบกเบตเบเบงเบฒเบกเปเบเบดเปเบเบเบฒเบญเบฒเปเบชเบฅเบฐเบซเบงเปเบฒเบเบเบปเบงเบกเบฑเบเปเบญเบ, เบเบฐเบเบงเบเบเบฒเบเบเปเบฒเบเบงเบฒเบกเบชเบฐเบญเบฒเบเบเปเปเบกเบนเบเบซเบผเบฑเบเบเบฒเบเบเบฒเบเบเบปเบเบชเบญเบเปเบฅเปเบเบเบฒเบเปเบเบฑเบเบญเบฒเบเบฒเบเปเบเบฑเบเบซเบปเบง.
- เปเบเบตเปเบกเปเบเบตเบก (เปเบฅเบฐ, เปเบเบเบงเบฒเบกเบเบดเบเปเบซเบฑเบเบเบญเบเบเปเบฒเบเบฐเปเบเบปเปเบฒ, เบเปเปเบชเบปเบกเปเบซเบเบชเบปเบกเบเบปเบ) เปเบเบซเบฒ API.
- เปเบฅเบฐเบเบฒเบเปเบเปเบเบฝเบเบเบปเปเบเบเป: เปเบกเบทเปเบญเบเปเปเบกเบนเบเบเบฒเบเบเบปเบเบชเบญเบเปเบฅเบตเปเบกเบเบทเบเบฅเบถเบเบฅเปเบฒเบเปเบเบเบเบปเบเบเบฒเบเบเบฒเบเบเปเปเบกเบนเบ. เบญเบฑเบเบเบตเปเบเบณเบฅเบฑเบเบเปเบฝเบเปเบเบฑเบเบงเบปเบเบงเบฝเบ PK/FK เปเบเปเป! เบเบงเบเปเบฎเบปเบฒเปเบเปเบเบดเบเบเบฒเบเบเบฑเบเบเบฑเบเบเบฐเบเบฒ: "เบเปเบญเบเบซเบฒเบเปเปเปเบเบตเปเบก / เปเบญเบปเบฒเบญเบญเบ / เบเปเบฝเบเบเบทเปเบเปเบฒเบ, เปเบเบฑเบเบซเบเบฑเบ 100500 เบเบฒเบเบเบปเบเบชเบญเบเบเบฒเบเปเบเบทเปเบญเบกเปเบเบเบเบทเบเบเบฑเบ?"
เปเบเบเบงเบฒเบกเบเบดเบเปเบซเบฑเบเบเบญเบเบเปเบญเบ, เบเบฒเบเปเบเปเปเบเบเบตเปเบเบตเบเบตเปเบชเบธเบเปเบกเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเปเบเบเปเบเบทเปเบญเบเปเบซเบง.
- เบซเบผเบฒเบเบเบปเบเปเบเป docker-compose เปเบเบทเปเบญเบเปเบฒเปเบเบตเบเบเบฒเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบฒเบเบเบปเบเบชเบญเบ, เปเบเปเบกเบตเบเปเบฒเบเบงเบเบซเบเปเบญเบเบเบปเบเปเบเป docker-compose เปเบเปเบงเบฅเบฒเบเบตเปเบเปเบฒเปเบเบตเบเบเบฒเบเบเบปเบเบชเบญเบเบเบฒเบเปเบเบทเปเบญเบกเปเบเบเปเบ CI / CD. เปเบฅเบฐเปเบเบเบตเปเบเบตเปเบเปเบฒเบเบฐเปเบเบปเปเบฒเบเปเปเปเบเปเบเปเบฒเบเบถเบเปเบเบดเบ kubernetes, swarm เปเบฅเบฐเปเบงเบเบต orchestration เบเบฑเบเบเบธเบญเบทเปเบเป. เบเปเปเปเบกเปเบเบเบธเบเปเบเปเบฅเบดเบชเบฑเบเบกเบตเบเบงเบเบกเบฑเบ. เบกเบฑเบเบเบฐเบเบตเบเปเบฒ docker-compose.yml เปเบกเปเบเบเบปเปเบงเปเบ.
- เปเบเบดเบเปเบกเปเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบกเบตเบเบปเบงเปเบฅเปเบ QA เบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบญเบ, เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบฎเบฑเบเปเบเบงเปเบเปเบซเปเปเบเปเปเบเบงเปเบฒเบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบตเปเปเบเบตเบเบเบปเบงเบเปเบฒเบ docker-compose เบเปเปเปเบเบเปเบเบเปเบเบดเปเบเบเบฑเบเปเบฅเบฐเบเบฑเบ?
- เบงเบดเบเบตเบเบฒเบเปเบเบฑเบเบเปเบฒเบเปเปเบกเบนเบเบเบฑเบเบเบถเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบปเบเบชเบญเบ?
- เบงเบดเบเบตเบเบฒเบเปเบฎเบฑเบเบเบงเบฒเบกเบชเบฐเบญเบฒเบเบเบฑเบเปเบฅเปเบ?
เบเปเบญเบเบกเบตเบเบฑเบเปเบฅเปเบ GitLab เบเบญเบเบเปเบญเบเปเบญเบเบชเปเบฒเบฅเบฑเบเปเบเบเบเบฒเบเบเบญเบเบเปเบญเบเปเบฅเบฐเบเปเบญเบเปเบเปเบเบปเบเบเบฑเบเบเปเบฒเบเบฒเบกเปเบซเบผเบปเปเบฒเบเบตเปเปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒ
GitLab Shell Runner
เบชเปเบฒเบฅเบฑเบเบเบฑเบเปเบฅเปเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเปเปเบเบฐเบเปเบฒเปเบเบทเปเบญเบ virtual Linux เบเบตเปเบกเบต 4 vCPU, 4 GB RAM, 50 GB HDD.
เบกเบตเบเปเปเบกเบนเบเบซเบผเบฒเบเบขเปเบฒเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒ gitlab-runner เปเบเบญเบดเบเปเบเบตเปเบเบฑเบ, เบเบฑเปเบเบเบฑเปเบเปเบเบเบซเบเปเป:
- เปเบเบปเปเบฒเบชเบนเปเบฅเบฐเบเบปเบเปเบเบทเปเบญเบเบเปเบฒเบ SSH
-
เบเปเบฒเบเปเบฒเบเบกเบต RAM เบซเบเปเบญเบเบเบงเปเบฒ 8 GB, เบเปเบญเบเบเปเปเบเบฐเบเปเบฒ
เปเบฎเบฑเบเปเบซเป swap 10 GB เบเบฑเปเบเบเบฑเปเบเบเบนเปเบเปเบฒ OOM เบเปเปเปเบเปเบกเบฒเปเบฅเบฐเบเปเบฒเบงเบฝเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบเบทเปเบญเบเบเบฒเบเบเบฒเบ RAM. เบชเบดเปเบเบเบตเปเบชเบฒเบกเบฒเบเปเบเบตเบเบเบถเปเบเปเบเปเปเบกเบทเปเบญเบกเบตเบซเบผเบฒเบเบเบงเปเบฒ 5 เบงเบฝเบเบเบทเบเปเบเบตเบเบเบปเบงเบเปเบญเบกเปเบเบฑเบ. เบงเบฝเบโเบเบฒเบโเบเบฐโเบเปเบฒเบงโเปเบโเปเปเบฒโเบเปเบฒโเบเบงเปเบฒโเปเบเบปเปเบฒ, โเปเบเปโเปเบฑเปเบโเบเปเบฝเบ.เบเบปเบงเบขเปเบฒเบเบเบฑเบ killer OOM
เบเปเบฒเปเบเบปเปเบฒเปเบซเบฑเบเปเบเบเบฑเบเบเบถเบเปเปเบฒเบงเบฝเบ
bash: line 82: 26474 Killed
, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบฝเบเปเบเปเบเปเบฒเปเบเบตเบเบเบฒเบเบเปเบฝเบงเบเบฑเบ runner เปเบเป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
เปเบฅเบฐเบเปเบฒเบฎเบนเบเบกเบตเบฅเบฑเบเบชเบฐเบเบฐเบเปเบฒเบเบเบทเบเบตเป, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบญเบฒเบเบเบฐเปเบเบตเปเบก swap เบซเบผเบทเปเบเบตเปเบก RAM.
- เบเบดเบเบเบฑเปเบ
gitlab-runner ,docker ,docker-compose , เปเบฎเบฑเบเปเบซเป. - เปเบเบตเปเบกเบเบนเปเปเบเป
gitlab-runner
เบเบฑเบเบเบธเปเบกdocker
sudo groupadd docker sudo usermod -aG docker gitlab-runner
เบฅเบปเบเบเบฐเบเบฝเบ gitlab-runner.-
เปเบเบตเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฑเบเปเบเป
/etc/gitlab-runner/config.toml
เปเบฅเบฐเปเบเบตเปเบกconcurrent=20 [[runners]] request_concurrency = 10
เบเบตเปเบเบฐเบเปเบงเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเปเบเบตเบเบงเบฝเบเบเบฒเบเบเบฐเบซเบเบฒเบเปเบเบซเบเบถเปเบ runner. เบญเปเบฒเบโเบเบทเปเบก
เบเบตเปเบเบตเป .
เบเปเบฒเบเปเบฒเบเบกเบตเปเบเบทเปเบญเบเบเบตเปเบกเบตเบเบฐเบชเบดเบเบเบดเบเบฒเบเบซเบผเบฒเบ, เบเบปเบงเบขเปเบฒเบ 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
เบเบฒเบเบเบงเบเบเบฒ
เปเบฎเบฑเบเปเบซเป docker-up
$ 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
$ 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
เปเบเบฑเบเบเบปเบเบกเบฒเบเบฒเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเปเบเบเปเบฒเบง, เปเบเปเบฅเบเบฐเบเปเบฅเบตเบเบฑเบเบเบถเบเปเบเบชเบดเปเบเบเบญเบกเบเบฐเบกเบตเบเบฑเบเบเบถเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเปเบฅเบฐเบเบฒเบเบเบปเบเบชเบญเบ. เปเบเบดเปเบเบชเบฐเบเบงเบเบซเบผเบฒเบเปเบเบเปเบฅเบฐเบเบตเบเบญเบเบเบงเบฒเบกเบเบดเบเบเบฒเบ. เปเบเปเบฅเบฐเบเบฒเบเบเบปเบเบชเบญเบเบเบฐเบซเบเบฒเบเบเบฝเบเบเบฑเบเบเบถเบเบเบญเบเบเบปเบเปเบญเบ, เปเบเปเบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเปเบฅเบทเปเบญเบเบเบตเปเปเบเบเบเปเบฒเบเบซเบฒเบ.
เบเปเบฒเบเบงเบฒเบกเบชเบฐเบญเบฒเบเบเบฑเบเปเบฅเปเบ
เบงเบฝเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบงเบเบฐเบเบทเบเปเบเบตเบเบเบปเบงเบเบฝเบเปเบเปเบเบฒเบกเบเบฒเบเบฐเบฅเบฒเบ.
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
เบฅเบงเบก:
- เบเบงเบเปเบฎเบปเบฒเบกเบตเบเบฑเบเปเบฅเปเบเปเบเบฐเบซเบเบถเปเบ.
- เบเปเปเบกเบตเบเปเปเบเบฑเบเปเบเปเบเบฅเบฐเบซเบงเปเบฒเบเบงเบฝเบเบเบฒเบ เปเบฅเบฐ เบชเบดเปเบเปเบงเบเบฅเปเบญเบก.
- เบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบตเบเบงเบฝเบเบเบฒเบเบเบตเปเบกเบตเบเบฒเบเบเบปเบเบชเบญเบเบเบฒเบเปเบเบทเปเบญเบกเปเบเบเปเบเบเบฐเบซเบเบฒเบ.
- เบเปเบฒเบโเบชเบฒโเบกเบฒเบโเบเปเบฒโเปเบเบตเบโเบเบฒเบโเบเบปเบโเบชเบญเบโเบเบฒเบโเปเบเบทเปเบญเบกโเปเบเบโเบเบฑเบโเปเบโเบเปเบญเบโเบเบดเปเบโเบซเบผเบทโเปเบโเบเบฒโเบเบฐโเบเบฐโ.
- เบเบฑเบเบเบถเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเปเบฅเบฐเบเบฒเบเบเบปเบเบชเบญเบเบเบทเบเปเบเบฑเบเบเปเบฒเปเบฅเบฐเบเบดเบเบเบฑเบเบงเบฝเบเบเบฒเบเบเปเป.
- เบกเบฑเบเปเบเบฑเบเปเบเปเบเปเบเบตเปเบเบฐเปเบฎเบฑเบเบเบงเบฒเบกเบชเบฐเบญเบฒเบ runner เบเบฒเบเบฎเบนเบเบเบฒเบ Docker เปเบเบปเปเบฒ.
เปเบงเบฅเบฒเบเบฑเปเบเบเปเบฒเปเบกเปเบ ~2 เบเบปเปเบงเปเบกเบ.
เบเบฑเปเบเปเบกเปเบเบเบฑเบเบซเบกเบปเบ, เบเบปเบงเบเบดเบเปเบฅเปเบง. เบเปเบญเบเบเบฐเบเบตเปเบเบเบตเปเบเบฐเปเบเปเบฎเบฑเบเบเบฒเบเบเบดเบเบปเบก.
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com