អ្នករត់ GitLab Shell ។ ការចាប់ផ្តើមប្រកួតប្រជែងនៃសេវាកម្មសាកល្បងដោយប្រើ Docker Compose

អ្នករត់ GitLab Shell ។ ការចាប់ផ្តើមប្រកួតប្រជែងនៃសេវាកម្មសាកល្បងដោយប្រើ Docker Compose

អត្ថបទនេះនឹងមានការចាប់អារម្មណ៍ចំពោះទាំងអ្នកសាកល្បង និងអ្នកអភិវឌ្ឍន៍ ប៉ុន្តែត្រូវបានបម្រុងទុកជាចម្បងសម្រាប់អ្នកជំនាញផ្នែកស្វ័យប្រវត្តិកម្មដែលប្រឈមនឹងបញ្ហានៃការដំឡើង GitLab CI/CD សម្រាប់ការធ្វើតេស្តរួមបញ្ចូលនៅក្នុងលក្ខខណ្ឌនៃធនធានហេដ្ឋារចនាសម្ព័ន្ធមិនគ្រប់គ្រាន់ និង/ឬអវត្តមាននៃកុងតឺន័រ។ វេទិកា orchestration ។ ខ្ញុំនឹងប្រាប់អ្នកពីរបៀបរៀបចំការដាក់ពង្រាយបរិស្ថានសាកល្បងដោយប្រើ docker compose នៅលើកម្មវិធីរត់សែល GitLab តែមួយ ហើយដូច្នេះនៅពេលដាក់ពង្រាយបរិស្ថានជាច្រើន សេវាកម្មដែលបានបើកដំណើរការមិនរំខានដល់គ្នាទៅវិញទៅមក។


មាតិកា

តម្រូវការជាមុន។

  1. នៅក្នុងការអនុវត្តរបស់ខ្ញុំ វាជារឿយៗបានកើតឡើងដែលការធ្វើតេស្តសមាហរណកម្មត្រូវបាន "ព្យាបាល" លើគម្រោង។ ហើយជារឿយៗបញ្ហាដំបូង និងសំខាន់បំផុតគឺបំពង់ CI ដែលក្នុងនោះ ការធ្វើតេស្តរួមបញ្ចូល កំពុងត្រូវបានអភិវឌ្ឍ សេវាកម្មត្រូវបានអនុវត្តនៅក្នុងបរិយាកាសអភិវឌ្ឍន៍/ដំណាក់កាល។ នេះបណ្តាលឱ្យមានបញ្ហាមួយចំនួន:

    • ដោយសារតែមានពិការភាពនៅក្នុងសេវាកម្មជាក់លាក់មួយកំឡុងពេលធ្វើតេស្តរួមបញ្ចូល សៀគ្វីសាកល្បងអាចនឹងត្រូវខូចខាតដោយសារទិន្នន័យដែលខូច។ មានករណីជាច្រើននៅពេលដែលការផ្ញើសំណើជាមួយនឹងទម្រង់ JSON ដែលខូចបានធ្វើឱ្យសេវាកម្មគាំង ដែលធ្វើឱ្យការឈរមិនអាចដំណើរការបានទាំងស្រុង។
    • ការថយចុះនៃសៀគ្វីសាកល្បងនៅពេលដែលទិន្នន័យតេស្តកើនឡើង។ ខ្ញុំ​គិត​ថា​វា​គ្មាន​ន័យ​ទេ​ក្នុង​ការ​ពិពណ៌នា​អំពី​ឧទាហរណ៍​មួយ​ជាមួយ​នឹង​ការ​សម្អាត / រមៀល​ត្រឡប់​មក​វិញ​មូលដ្ឋាន​ទិន្នន័យ។ នៅក្នុងការអនុវត្តរបស់ខ្ញុំ ខ្ញុំមិនជួបគម្រោងដែលនីតិវិធីនេះដំណើរការដោយរលូននោះទេ។
    • ហានិភ័យនៃការរំខានដល់មុខងារនៃសៀគ្វីសាកល្បងនៅពេលសាកល្បងការកំណត់ប្រព័ន្ធទូទៅ។ ឧទាហរណ៍ គោលការណ៍អ្នកប្រើប្រាស់/ក្រុម/ពាក្យសម្ងាត់/កម្មវិធី។
    • ទិន្នន័យសាកល្បងពីការធ្វើតេស្តស្វ័យប្រវត្តិធ្វើឱ្យជីវិតលំបាកសម្រាប់អ្នកសាកល្បងដោយដៃ។

    អ្នកខ្លះនឹងនិយាយថា ការធ្វើតេស្តស្វ័យប្រវត្តិល្អគួរតែសម្អាតទិន្នន័យបន្ទាប់ពីខ្លួនគេ។ ខ្ញុំមានអំណះអំណាងប្រឆាំងនឹង៖

    • ជំហរថាមវន្តគឺងាយស្រួលប្រើណាស់។
    • មិនមែនគ្រប់វត្ថុទាំងអស់អាចត្រូវបានយកចេញពីប្រព័ន្ធតាមរយៈ API នោះទេ។ ឧទាហរណ៍ ការហៅឱ្យលុបវត្ថុមិនត្រូវបានអនុវត្តទេ ព្រោះវាផ្ទុយនឹងតក្កវិជ្ជាអាជីវកម្ម។
    • នៅពេលបង្កើតវត្ថុតាមរយៈ API ទិន្នន័យមេតាជាច្រើនអាចត្រូវបានបង្កើត ដែលជាបញ្ហាក្នុងការលុប។
    • ប្រសិនបើការធ្វើតេស្តមានភាពអាស្រ័យក្នុងចំណោមពួកគេ នោះដំណើរការនៃការសម្អាតទិន្នន័យបន្ទាប់ពីការដំណើរការការធ្វើតេស្តប្រែទៅជាឈឺក្បាល។
    • បន្ថែម (ហើយតាមគំនិតរបស់ខ្ញុំ មិនសមហេតុផល) ហៅទៅ API ។
    • ហើយអាគុយម៉ង់ចម្បង: នៅពេលដែលទិន្នន័យសាកល្បងចាប់ផ្តើមត្រូវបានជម្រះដោយផ្ទាល់ពីមូលដ្ឋានទិន្នន័យ។ នេះប្រែទៅជាសៀក PK/FK ពិតប្រាកដ! យើងឮពីអ្នកអភិវឌ្ឍន៍៖ "ខ្ញុំទើបតែបានបន្ថែម/ដកចេញ/ប្តូរឈ្មោះសញ្ញា ហេតុអ្វីបានជាការធ្វើតេស្តរួមបញ្ចូល 100500 ចាប់បាន?"

    តាមគំនិតរបស់ខ្ញុំ ដំណោះស្រាយដ៏ប្រសើរបំផុតគឺបរិយាកាសថាមវន្ត។

  2. មនុស្សជាច្រើនប្រើ docker-compose ដើម្បីដំណើរការបរិយាកាសសាកល្បង ប៉ុន្តែមានមនុស្សតិចណាស់ដែលប្រើ docker-compose នៅពេលធ្វើតេស្តការរួមបញ្ចូលនៅក្នុង CI/CD ។ ហើយនៅទីនេះខ្ញុំមិនយកទៅក្នុងគណនី kubernetes, swarm និងវេទិកា orchestration កុងតឺន័រផ្សេងទៀតទេ។ មិនមែនគ្រប់ក្រុមហ៊ុនទាំងអស់សុទ្ធតែមានពួកគេទេ។ វាល្អប្រសិនបើ docker-compose.yml ជាសកល។
  3. ទោះបីជាយើងមានកម្មវិធីរត់ QA ផ្ទាល់របស់យើងក៏ដោយ តើយើងអាចប្រាកដថាសេវាកម្មដែលបានដំណើរការតាមរយៈ docker-compose មិនជ្រៀតជ្រែកគ្នាទៅវិញទៅមកដោយរបៀបណា?
  4. តើធ្វើដូចម្តេចដើម្បីប្រមូលកំណត់ហេតុនៃសេវាកម្មដែលបានសាកល្បង?
  5. តើធ្វើដូចម្តេចដើម្បីសម្អាតអ្នករត់?

ខ្ញុំមានអ្នករត់ GitLab ផ្ទាល់ខ្លួនរបស់ខ្ញុំសម្រាប់គម្រោងរបស់ខ្ញុំ ហើយខ្ញុំបានជួបប្រទះសំណួរទាំងនេះក្នុងអំឡុងពេលអភិវឌ្ឍន៍ ម៉ាស៊ីនភ្ញៀវ Java សម្រាប់ TestRail. ច្បាស់ជាងនេះទៅទៀត នៅពេលដំណើរការការធ្វើតេស្តរួមបញ្ចូល។ ខាងក្រោមនេះយើងនឹងដោះស្រាយបញ្ហាទាំងនេះដោយប្រើឧទាហរណ៍ពីគម្រោងនេះ។

ទៅមាតិកា

អ្នករត់ GitLab Shell

សម្រាប់អ្នករត់ប្រណាំង ខ្ញុំសូមណែនាំម៉ាស៊ីននិម្មិត Linux ដែលមាន 4 vCPU, RAM 4 GB, HDD 50 GB ។
មានព័ត៌មានជាច្រើនអំពីការដំឡើង gitlab-runner នៅលើអ៊ីនធឺណិត ដូច្នេះដោយសង្ខេប៖

  • ចូលទៅម៉ាស៊ីនតាមរយៈ SSH
  • ប្រសិនបើអ្នកមាន RAM តិចជាង 8 GB នោះខ្ញុំសូមណែនាំ ធ្វើការផ្លាស់ប្តូរ 10 GBដូច្នេះថាឃាតករ OOM មិនមកសម្លាប់ភារកិច្ចរបស់យើងដោយសារតែខ្វះ RAM ។ វាអាចកើតឡើងនៅពេលដែលកិច្ចការច្រើនជាង 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

    ហើយ​ប្រសិនបើ​រូបភាព​មើលទៅ​ដូច​នេះ នោះ​អាច​បន្ថែម swap ឬ​បន្ថែម RAM។

  • ដំឡើង អ្នករត់ gitlab, docker, docker- តែង, ធ្វើ។
  • ការបន្ថែមអ្នកប្រើប្រាស់ gitlab-runner ទៅក្រុម docker
    sudo groupadd docker
    sudo usermod -aG docker gitlab-runner
  • ចុះឈ្មោះ អ្នករត់ gitlab ។
  • បើកសម្រាប់ការកែសម្រួល /etc/gitlab-runner/config.toml និងបន្ថែម

    concurrent=20
    [[runners]]
      request_concurrency = 10

    វា​នឹង​អនុញ្ញាត​ឱ្យ​អ្នក​ដំណើរការ​កិច្ចការ​ស្រប​គ្នា​លើ​អ្នក​រត់​ម្នាក់។ អាន​បន្ថែម នៅទីនេះ.
    ប្រសិនបើអ្នកមានម៉ាស៊ីនដែលមានថាមពលខ្លាំងជាងឧទាហរណ៍ 8 vCPU, RAM 16 GB នោះលេខទាំងនេះអាចត្រូវបានធ្វើឱ្យធំជាងយ៉ាងហោចណាស់ 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 កំណត់ក្នុងអថេរបរិស្ថាន (ឧទាហរណ៍ ១២៣)
    បន្ទាប់មកឈ្មោះសេវាកម្មនឹងមាន 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-logs

$ 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 Shell ។ ការចាប់ផ្តើមប្រកួតប្រជែងនៃសេវាកម្មសាកល្បងដោយប្រើ Docker Compose

ទៅមាតិកា

កំពុងរៀបចំ .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

ជាលទ្ធផលនៃការដំណើរការកិច្ចការបែបនេះ ថតឯកសារក្នុងវត្ថុបុរាណនឹងមានសេវាកម្ម និងកំណត់ហេតុសាកល្បង។ ដែលមានភាពងាយស្រួលក្នុងករណីមានកំហុស។ ការធ្វើតេស្តនីមួយៗស្របគ្នានឹងសរសេរកំណត់ហេតុផ្ទាល់ខ្លួនរបស់វា ប៉ុន្តែខ្ញុំនឹងនិយាយអំពីរឿងនេះដោយឡែកពីគ្នា។

អ្នករត់ GitLab Shell ។ ការចាប់ផ្តើមប្រកួតប្រជែងនៃសេវាកម្មសាកល្បងដោយប្រើ Docker Compose

ទៅមាតិកា

ការសម្អាតអ្នករត់

កិច្ចការ​នឹង​ត្រូវ​បាន​ដាក់​ឱ្យ​ដំណើរការ​តែ​តាម​កាលវិភាគ​ប៉ុណ្ណោះ។

stages:
- clean
- build
- test

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

បន្ទាប់មក សូមចូលទៅកាន់គម្រោង GitLab របស់យើង -> CI/CD -> Schedules -> New Schedule ហើយបន្ថែមកាលវិភាគថ្មី

អ្នករត់ GitLab Shell ។ ការចាប់ផ្តើមប្រកួតប្រជែងនៃសេវាកម្មសាកល្បងដោយប្រើ Docker Compose

ទៅមាតិកា

លទ្ធផល

ចាប់ផ្តើមកិច្ចការ 4 នៅក្នុង GitLab CI
អ្នករត់ GitLab Shell ។ ការចាប់ផ្តើមប្រកួតប្រជែងនៃសេវាកម្មសាកល្បងដោយប្រើ Docker Compose

នៅក្នុងកំណត់ហេតុនៃកិច្ចការចុងក្រោយជាមួយនឹងការធ្វើតេស្តរួមបញ្ចូល យើងឃើញកុងតឺន័រពីកិច្ចការផ្សេងៗ

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 Shell ។ ការចាប់ផ្តើមប្រកួតប្រជែងនៃសេវាកម្មសាកល្បងដោយប្រើ Docker Compose

អ្នករត់ GitLab Shell ។ ការចាប់ផ្តើមប្រកួតប្រជែងនៃសេវាកម្មសាកល្បងដោយប្រើ Docker Compose

អ្វីៗហាក់បីដូចជាស្រស់ស្អាត ប៉ុន្តែមានភាពខុសប្លែកគ្នា។ បំពង់អាចត្រូវបានលុបចោលដោយបង្ខំ ខណៈពេលដែលការធ្វើតេស្តរួមបញ្ចូលកំពុងដំណើរការ ក្នុងករណីនេះកុងតឺន័រដែលកំពុងដំណើរការនឹងមិនត្រូវបានបញ្ឈប់ឡើយ។ ពីពេលមួយទៅពេលមួយអ្នកត្រូវសម្អាតអ្នករត់។ ជាអកុសល ភារកិច្ចសម្រាប់ធ្វើឱ្យប្រសើរឡើងនៅក្នុង GitLab CE នៅតែស្ថិតក្នុងស្ថានភាពដដែល បើកទូលាយ

ប៉ុន្តែ​យើង​បាន​បន្ថែម​ការ​ចាប់​ផ្ដើម​កិច្ចការ​មួយ​តាម​កាលវិភាគ ហើយ​គ្មាន​អ្នក​ណា​ហាម​យើង​ឲ្យ​ដំណើរការ​វា​ដោយ​ដៃ​ឡើយ។
ចូលទៅកាន់គម្រោងរបស់យើង -> CI/CD -> Schedules ហើយដំណើរការភារកិច្ច Clean runner

អ្នករត់ GitLab Shell ។ ការចាប់ផ្តើមប្រកួតប្រជែងនៃសេវាកម្មសាកល្បងដោយប្រើ Docker Compose

សរុប:

  • យើងមានអ្នករត់សែលម្នាក់។
  • មិនមានជម្លោះរវាងការងារ និងបរិស្ថានទេ។
  • យើងដំណើរការភារកិច្ចជាមួយការធ្វើតេស្តសមាហរណកម្មស្របគ្នា។
  • អ្នក​អាច​ដំណើរការ​ការ​ធ្វើ​តេស្ត​សមាហរណកម្ម​ទាំង​ក្នុង​មូលដ្ឋាន ឬ​ក្នុង​កុងតឺន័រ។
  • កំណត់ហេតុសេវាកម្ម និងការធ្វើតេស្តត្រូវបានប្រមូល និងភ្ជាប់ទៅនឹងកិច្ចការបំពង់។
  • វាអាចធ្វើទៅបានដើម្បីសម្អាតកម្មវិធីរត់ចេញពីរូបភាព Docker ចាស់។

ពេលវេលារៀបចំគឺ ~ 2 ម៉ោង។
នោះហើយជាទាំងអស់ តាមពិត។ ខ្ញុំនឹងរីករាយក្នុងការទទួលបានមតិកែលម្អ។

ទៅមាតិកា

ប្រភព: www.habr.com

បន្ថែមមតិយោបល់