GitLab Shell Runner. Оғози рақобати хидматҳои озмудашуда бо истифода аз Docker Compose

GitLab Shell Runner. Оғози рақобати хидматҳои озмудашуда бо истифода аз Docker Compose

Ин мақола ҳам барои озмоишгарон ва ҳам таҳиягарон ҷолиб хоҳад буд, аммо асосан барои мутахассисони автоматика, ки бо мушкилоти насб кардани GitLab CI/CD барои санҷиши ҳамгироӣ дар шароити нокифояи захираҳои инфрасохторӣ ва/ё набудани контейнер рӯ ба рӯ мешаванд, пешбинӣ шудааст. платформаи оркестр. Ман ба шумо мегӯям, ки чӣ гуна ҷойгиркунии муҳитҳои санҷиширо бо истифода аз docker compose дар як давандаи ягонаи GitLab насб кардан мумкин аст ва то ҳангоми ҷойгиркунии якчанд муҳитҳо хидматҳои оғозшуда ба ҳамдигар халал нарасонанд.


Мундариҷа

Шарҳҳо

  1. Дар амалияи ман, аксар вақт рӯй дод, ки санҷиши ҳамгироӣ дар лоиҳаҳо "табобат" карда мешавад. Ва аксар вақт мушкилоти аввалин ва муҳимтарин ин лӯлаи CI мебошад, ки дар он санҷиши ҳамгироӣ гузаронида мешавад инкишоф дода мешавад хидмат(ҳо) дар муҳити таҳия/саҳна анҷом дода мешавад. Ин як қатор мушкилотро ба вуҷуд овард:

    • Аз сабаби камбудиҳо дар хидмати мушаххас ҳангоми санҷиши ҳамгироӣ, схемаи санҷиш метавонад аз маълумоти шикаста осеб расонад. Ҳолатҳое буданд, ки ирсоли дархост бо формати вайроншудаи JSON хидматро вайрон кард, ки стендро комилан ғайрифаъол кард.
    • Сустшавии схемаи санҷиш бо зиёд шудани маълумоти санҷиш. Ман фикр мекунам, ки тасвир кардани мисол бо тоза кардан/бозгашти пойгоҳи додаҳо маъно надорад. Дар амалияи худ ман бо лои-хае дучор наомадаам, ки ин тартиб муътадил гузашта бошад.
    • Хавфи вайрон кардани кори схемаи санҷишӣ ҳангоми санҷиши танзимоти умумии система. Масалан, сиёсати корбар/гурӯҳ/парол/барнома.
    • Маълумоти санҷишӣ аз санҷишҳои автоматӣ ҳаёти озмоишгарони дастӣро душвор мегардонад.

    Баъзеҳо мегӯянд, ки автотестҳои хуб бояд маълумотро пас аз худ тоза кунанд. Ман бар зидди ин далелҳо дорам:

    • Стендҳои динамикӣ барои истифода хеле қулай мебошанд.
    • На ҳар як объектро тавассути API аз система хориҷ кардан мумкин аст. Масалан, занг барои нест кардани объект иҷро нашуд, зеро он хилофи мантиқи тиҷорат аст.
    • Ҳангоми сохтани объект тавассути API, миқдори зиёди метамаълумотро эҷод кардан мумкин аст, ки нест кардани онҳо мушкил аст.
    • Агар санҷишҳо байни худ вобастагӣ дошта бошанд, пас раванди тоза кардани маълумот пас аз гузаронидани санҷишҳо ба дарди сар табдил меёбад.
    • Зангҳои иловагӣ (ва ба андешаи ман, асоснок нестанд) ба API.
    • Ва далели асосӣ: вақте ки маълумоти санҷишӣ бевосита аз пойгоҳи додаҳо тоза карда мешавад. Ин ба сирки воқеии PK/FK табдил меёбад! Мо аз таҳиягарон мешунавем: "Ман танҳо як аломатро илова кардам / хориҷ кардам / номашро тағир додам, чаро 100500 санҷиши ҳамгироӣ дастгир карда шуд?"

    Ба назари ман, ҳалли беҳтарин ин муҳити динамикӣ мебошад.

  2. Бисёр одамон барои идоракунии муҳити санҷиш docker-compose -ро истифода мебаранд, аммо шумораи ками одамон ҳангоми гузаронидани санҷиши ҳамгироӣ дар CI/CD docker-compose -ро истифода мебаранд. Ва дар ин ҷо ман кубернетҳо, села ва дигар платформаҳои оркестри контейнериро ба назар намегирам. На ҳама ширкатҳо онҳо доранд. Хуб мешуд, агар docker-compose.yml универсалӣ бошад.
  3. Ҳатто агар мо давандаи QA-и худро дошта бошем, чӣ гуна мо метавонем боварӣ ҳосил кунем, ки хидматҳои тавассути docker-compose оғозшуда ба ҳамдигар халал нарасонанд?
  4. Чӣ тавр ҷамъоварӣ кардани гузоришҳои хидматҳои санҷидашуда?
  5. Давандаро чӣ гуна бояд тоза кард?

Ман барои лоиҳаҳои худ як давандаи GitLab дорам ва ман ҳангоми таҳия бо ин саволҳо дучор шудам Мизоҷи Java барои TestRail. Аниқтараш, ҳангоми гузаронидани санҷишҳои интегралӣ. Дар зер мо ин масъалаҳоро бо истифода аз мисолҳои ин лоиҳа ҳал хоҳем кард.

Ба мундариҷа

GitLab Shell Runner

Барои даванда ман як мошини виртуалии Linux-ро бо 4 vCPU, 4 ГБ RAM, 50 ГБ HDD тавсия медиҳам.
Дар бораи танзими gitlab-runner дар Интернет маълумоти зиёде мавҷуд аст, ба таври мухтасар:

  • Ба мошин тавассути SSH ворид шавед
  • Агар шумо камтар аз 8 ГБ RAM дошта бошед, ман тавсия медиҳам иваз кардани 10 ГБто ки қотили 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

    Ва агар тасвир ба ин монанд бошад, пас ё своп илова кунед ё RAM илова кунед.

  • Насб кунед gitlab-давон, лутфан, докер-композитор, созед.
  • Илова кардани корбар 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, 16 ГБ 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

Санҷиш

докер сохтан

$ 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 Runner. Оғози рақобати хидматҳои озмудашуда бо истифода аз 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 Runner. Оғози рақобати хидматҳои озмудашуда бо истифода аз Docker Compose

Ба мундариҷа

Тоза кардани даванда

Супориш факат аз руи график ба чо оварда мешавад.

stages:
- clean
- build
- test

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

Баъдан, ба лоиҳаи GitLab мо гузаред -> CI/CD -> Ҷадвалҳо -> Ҷадвали нав ва ҷадвали нав илова кунед

GitLab Shell Runner. Оғози рақобати хидматҳои озмудашуда бо истифода аз Docker Compose

Ба мундариҷа

Дар натиҷа

Оғози 4 вазифа дар GitLab CI
GitLab Shell Runner. Оғози рақобати хидматҳои озмудашуда бо истифода аз 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 Runner. Оғози рақобати хидматҳои озмудашуда бо истифода аз Docker Compose

GitLab Shell Runner. Оғози рақобати хидматҳои озмудашуда бо истифода аз Docker Compose

Ба назар ҳама чиз зебо аст, аммо як нозуки вуҷуд дорад. Ҳангоми гузаронидани санҷишҳои ҳамгироӣ қубурро маҷбуран бекор кардан мумкин аст, дар ин ҳолат контейнерҳои коркунанда қатъ карда намешаванд. Вақт аз вақт ба шумо лозим аст, ки давандаро тоза кунед. Мутаассифона, вазифаи такмил додани GitLab CE то ҳол дар мақоми худ қарор дорад кушодан

Аммо мо аз рӯи ҷадвал ба кор андохтани супоришро илова кардем ва касе ба мо дастӣ иҷро кардани онро манъ намекунад.
Ба лоиҳаи мо -> CI/CD -> Ҷадвалҳо равед ва вазифаро иҷро кунед Clean runner

GitLab Shell Runner. Оғози рақобати хидматҳои озмудашуда бо истифода аз Docker Compose

Њамагї:

  • Мо як снаряддор дорем.
  • Дар байни вазифаҳо ва муҳити зист ихтилоф вуҷуд надорад.
  • Мо дар баробари санҷишҳои ҳамгироӣ вазифаҳоро иҷро мекунем.
  • Шумо метавонед санҷишҳои ҳамгироиро ба таври маҳаллӣ ё дар контейнер иҷро кунед.
  • Гузоришҳои хидматӣ ва санҷишӣ ҷамъоварӣ ва ба вазифаи қубур замима карда мешаванд.
  • Давандаро аз тасвирҳои кӯҳнаи Docker тоза кардан мумкин аст.

Вақти насбкунӣ ~ 2 соат аст.
Дар асл, ҳамааш ҳамин аст. Ман аз гирифтани фикру мулоҳизаҳо шод хоҳам шуд.

Ба мундариҷа

Манбаъ: will.com

Илова Эзоҳ