Mkimbiaji wa Shell ya GitLab. Uzinduzi wa ushindani wa huduma zilizojaribiwa kwa kutumia Docker Compose

Mkimbiaji wa Shell ya GitLab. Uzinduzi wa ushindani wa huduma zilizojaribiwa kwa kutumia Docker Compose

Nakala hii itakuwa ya kupendeza kwa wajaribu na watengenezaji, lakini imekusudiwa haswa wataalam wa kiotomatiki ambao wanakabiliwa na shida ya kusanidi GitLab CI/CD kwa majaribio ya ujumuishaji katika hali ya ukosefu wa rasilimali za miundombinu na / au kutokuwepo kwa kontena. jukwaa la orchestration. Nitakuambia jinsi ya kusanidi upelekaji wa mazingira ya majaribio kwa kutumia docker kutunga kwenye kiendesha ganda moja cha GitLab na ili wakati wa kupeleka mazingira kadhaa, huduma zilizozinduliwa zisiingiliane.


yaliyomo

ΠŸΡ€Π΅Π΄ΠΏΠΎΡΡ‹Π»ΠΊΠΈ

  1. Katika mazoezi yangu, mara nyingi ilitokea kwamba upimaji wa ushirikiano "ulitibiwa" kwenye miradi. Na mara nyingi shida ya kwanza na muhimu zaidi ni bomba la CI, ambalo upimaji wa ujumuishaji kuendelezwa huduma inafanywa katika mazingira ya dev/hatua. Hii ilisababisha shida kadhaa:

    • Kwa sababu ya kasoro katika huduma fulani wakati wa majaribio ya ujumuishaji, mzunguko wa jaribio unaweza kuharibiwa na data iliyovunjika. Kulikuwa na matukio wakati kutuma ombi kwa umbizo lililovunjika la JSON kuliharibu huduma, jambo ambalo lilifanya stendi hiyo isifanye kazi kabisa.
    • Kupungua kwa mzunguko wa jaribio data ya jaribio inapoongezeka. Nadhani haina mantiki kuelezea mfano na kusafisha / kurudisha hifadhidata. Katika mazoezi yangu, sijakutana na mradi ambapo utaratibu huu ulikwenda vizuri.
    • Hatari ya kutatiza utendakazi wa mzunguko wa majaribio wakati wa kupima mipangilio ya mfumo wa jumla. Kwa mfano, sera ya mtumiaji/kikundi/nenosiri/maombi.
    • Data ya majaribio kutoka kwa majaribio ya kiotomatiki hufanya maisha kuwa magumu kwa wanaojaribu wenyewe.

    Wengine watasema kwamba ukaguzi mzuri wa kiotomatiki unapaswa kusafisha data baada yao wenyewe. Nina hoja dhidi ya:

    • Stendi zinazobadilika ni rahisi sana kutumia.
    • Sio kila kitu kinaweza kuondolewa kutoka kwa mfumo kupitia API. Kwa mfano, simu ya kufuta kitu haikutekelezwa kwa sababu inakinzana na mantiki ya biashara.
    • Wakati wa kuunda kitu kupitia API, kiasi kikubwa cha metadata kinaweza kuundwa, ambacho ni shida kufuta.
    • Ikiwa vipimo vina utegemezi kati yao wenyewe, basi mchakato wa kusafisha data baada ya kukimbia vipimo hugeuka kuwa maumivu ya kichwa.
    • Ziada (na, kwa maoni yangu, sio haki) simu kwa API.
    • Na hoja kuu: wakati data ya mtihani inapoanza kufutwa moja kwa moja kutoka kwa hifadhidata. Hii inageuka kuwa sarakasi halisi ya PK/FK! Tunasikia kutoka kwa wasanidi programu: "Nimeongeza/kuondoa/kubadilisha ishara, kwa nini majaribio 100500 ya ujumuishaji yalipatikana?"

    Kwa maoni yangu, suluhisho bora zaidi ni mazingira yenye nguvu.

  2. Watu wengi hutumia docker-compose kuendesha mazingira ya majaribio, lakini watu wachache hutumia docker-compose wanapofanya majaribio ya ujumuishaji katika CI/CD. Na hapa sizingatii kubernetes, pumba na majukwaa mengine ya okestration ya vyombo. Sio kila kampuni inayo. Ingekuwa nzuri ikiwa docker-compose.yml itakuwa ya ulimwengu wote.
  3. Hata kama tuna kiendeshaji chetu cha QA, tunawezaje kuhakikisha kuwa huduma zinazozinduliwa kupitia docker-compose haziingiliani?
  4. Jinsi ya kukusanya kumbukumbu za huduma zilizojaribiwa?
  5. Jinsi ya kusafisha mkimbiaji?

Nina mkimbiaji wangu wa GitLab kwa miradi yangu na nilikutana na maswali haya wakati wa ukuzaji Mteja wa Java kwa TestRail. Kwa usahihi, wakati wa kufanya majaribio ya ujumuishaji. Hapo chini tutasuluhisha maswala haya kwa kutumia mifano kutoka kwa mradi huu.

Kwa yaliyomo

GitLab Shell Runner

Kwa mkimbiaji, ninapendekeza mashine ya Linux virtual na 4 vCPU, 4 GB RAM, 50 GB HDD.
Kuna habari nyingi juu ya kusanidi gitlab-runner kwenye Mtandao, kwa ufupi:

  • Ingia kwa mashine kupitia SSH
  • Ikiwa una chini ya 8 GB ya RAM, basi ninapendekeza badilisha 10 GBili muuaji wa OOM asije kuua kazi zetu kwa sababu ya ukosefu wa RAM. Hii inaweza kutokea wakati zaidi ya kazi 5 zinazinduliwa kwa wakati mmoja. Kazi zitaendelea polepole zaidi, lakini polepole.

    Mfano na muuaji wa OOM

    Ikiwa utaona kwenye kumbukumbu za kazi bash: line 82: 26474 Killed, kisha utekeleze tu kwenye mkimbiaji 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

    Na ikiwa picha inaonekana kama hii, basi ama ongeza ubadilishaji au ongeza RAM.

  • Weka gitlab-mkimbiaji, docker, mtengenzaji, fanya.
  • Kuongeza mtumiaji gitlab-runner kwa kikundi docker
    sudo groupadd docker
    sudo usermod -aG docker gitlab-runner
  • Sajili gitlab-mkimbiaji.
  • Fungua kwa uhariri /etc/gitlab-runner/config.toml na kuongeza

    concurrent=20
    [[runners]]
      request_concurrency = 10

    Hii itakuruhusu kuendesha kazi sambamba kwenye mkimbiaji mmoja. Soma zaidi hapa.
    Ikiwa una mashine yenye nguvu zaidi, kwa mfano 8 vCPU, 16 GB RAM, basi nambari hizi zinaweza kufanywa angalau mara 2 kubwa. Lakini yote inategemea ni nini hasa kitazinduliwa kwa mkimbiaji huyu na kwa kiasi gani.

Inatosha.

Kwa yaliyomo

Inatayarisha docker-compose.yml

Kazi kuu ni universal docker-compose.yml, ambayo wasanidi programu/wajaribu wanaweza kutumia ndani na katika bomba la CI.

Kwanza kabisa, tunatengeneza majina ya kipekee ya huduma kwa CI. Mojawapo ya anuwai ya kipekee katika GitLab CI ni kutofautisha CI_JOB_ID. Ukibainisha container_name yenye maana "service-${CI_JOB_ID:-local}", basi katika kesi:

  • ikiwa CI_JOB_ID haijafafanuliwa katika anuwai za mazingira,
    basi jina la huduma litakuwa service-local
  • ikiwa CI_JOB_ID hufafanuliwa katika anuwai za mazingira (kwa mfano 123),
    basi jina la huduma litakuwa service-123

Pili, tunaunda mtandao wa kawaida kwa huduma zilizozinduliwa. Hii inatupa kutengwa kwa kiwango cha mtandao tunapoendesha mazingira mengi ya majaribio.

networks:
  default:
    external:
      name: service-network-${CI_JOB_ID:-local}

Kwa kweli, hii ni hatua ya kwanza ya mafanikio =)

Mfano wa docker-compose.yml yangu na maoni

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

Mfano wa kukimbia kwa mitaa

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

Lakini sio kila kitu ni rahisi sana na uzinduzi katika CI.

Kwa yaliyomo

Kuandaa Makefile

Ninatumia Makefile kwa sababu ni rahisi sana kwa usimamizi wa mazingira wa ndani na katika CI. Maoni zaidi mtandaoni

# Π£ мСня Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… всС Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ Π»Π΅ΠΆΠ°Ρ‚ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ `.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

Angalia

tengeneza 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

tengeneza magogo ya 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

Mkimbiaji wa Shell ya GitLab. Uzinduzi wa ushindani wa huduma zilizojaribiwa kwa kutumia Docker Compose

Kwa yaliyomo

Inatayarisha .gitlab-ci.yml

Kuendesha majaribio ya ujumuishaji

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

Kama matokeo ya kuendesha kazi kama hiyo, saraka ya kumbukumbu kwenye mabaki itakuwa na kumbukumbu za huduma na majaribio. Ambayo ni rahisi sana katika kesi ya makosa. Kila mtihani kwa sambamba huandika logi yake mwenyewe, lakini nitazungumza juu ya hili tofauti.

Mkimbiaji wa Shell ya GitLab. Uzinduzi wa ushindani wa huduma zilizojaribiwa kwa kutumia Docker Compose

Kwa yaliyomo

Kusafisha mkimbiaji

Kazi itazinduliwa tu kulingana na ratiba.

stages:
- clean
- build
- test

Clean runner:
  stage: clean
  only:
    - schedules
  tags:
    - my-shell-runner
  script:
    - make docker-clean

Ifuatayo, nenda kwa mradi wetu wa GitLab -> CI/CD -> Ratiba -> Ratiba Mpya na uongeze ratiba mpya.

Mkimbiaji wa Shell ya GitLab. Uzinduzi wa ushindani wa huduma zilizojaribiwa kwa kutumia Docker Compose

Kwa yaliyomo

Matokeo

Kuzindua kazi 4 katika GitLab CI
Mkimbiaji wa Shell ya GitLab. Uzinduzi wa ushindani wa huduma zilizojaribiwa kwa kutumia Docker Compose

Katika magogo ya kazi ya mwisho na vipimo vya ujumuishaji tunaona vyombo kutoka kwa kazi tofauti

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

logi ya kina zaidi

$ 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

Majukumu yote yamekamilika kwa mafanikio

Vizalia vya programu vya kazi vina huduma na kumbukumbu za majaribio
Mkimbiaji wa Shell ya GitLab. Uzinduzi wa ushindani wa huduma zilizojaribiwa kwa kutumia Docker Compose

Mkimbiaji wa Shell ya GitLab. Uzinduzi wa ushindani wa huduma zilizojaribiwa kwa kutumia Docker Compose

Kila kitu kinaonekana kuwa nzuri, lakini kuna nuance. Bomba linaweza kughairiwa kwa nguvu wakati majaribio ya ujumuishaji yanaendelea, katika hali ambayo vyombo vinavyoendesha havitasimamishwa. Mara kwa mara unahitaji kusafisha mkimbiaji. Kwa bahati mbaya, kazi ya uboreshaji katika GitLab CE bado iko katika hali Open

Lakini tumeongeza uzinduzi wa kazi kulingana na ratiba, na hakuna mtu anayetukataza kuiendesha kwa mikono.
Nenda kwa mradi wetu -> CI/CD -> Ratiba na uendeshe kazi hiyo Clean runner

Mkimbiaji wa Shell ya GitLab. Uzinduzi wa ushindani wa huduma zilizojaribiwa kwa kutumia Docker Compose

Jumla:

  • Tunayo mkimbiaji mmoja wa ganda.
  • Hakuna migogoro kati ya kazi na mazingira.
  • Tunaendesha kazi na majaribio ya ujumuishaji kwa sambamba.
  • Unaweza kufanya majaribio ya ujumuishaji ndani au kwenye kontena.
  • Kumbukumbu za huduma na mtihani hukusanywa na kushikamana na kazi ya bomba.
  • Inawezekana kusafisha mkimbiaji kutoka kwa picha za zamani za Docker.

Wakati wa kuweka ni ~ masaa 2.
Hiyo ndiyo yote, kwa kweli. Nitafurahi kupokea maoni.

Kwa yaliyomo

Chanzo: mapenzi.com

Kuongeza maoni