GitLab Shell Runner. Fifaninanana fandefasana serivisy voasedra mampiasa Docker Compose

GitLab Shell Runner. Fifaninanana fandefasana serivisy voasedra mampiasa Docker Compose

Ity lahatsoratra ity dia hahaliana ny mpanandrana sy ny mpamorona, fa natao indrindra ho an'ireo manam-pahaizana manokana momba ny automatique izay miatrika olana amin'ny fametrahana GitLab CI/CD ho an'ny fitiliana fampidirana ao anatin'ny toe-javatra tsy ampy fotodrafitrasa sy/na ny tsy fisian'ny orkestra kaontenera. sehatra. Holazaiko aminao ny fomba fametrahana ny fametrahana tontolo fitsapana amin'ny fampiasana docker compose amin'ny mpihazakazaka GitLab shell tokana ary amin'ny fametrahana tontolo maromaro dia tsy manelingelina ny serivisy natomboka.


afa-po

zavatra takiana alohan'ny

  1. Amin'ny fanazaran-tenako, matetika no nitranga fa ny fitsapana fampidirana dia "nokarakaraina" amin'ny tetikasa. Ary matetika ny olana voalohany sy manan-danja indrindra dia ny fantsona CI, izay ny fitiliana fampidirana mivoatra serivisy (s) dia tanterahina ao amin'ny tontolo dev/stage. Niteraka olana vitsivitsy izany:

    • Noho ny lesoka amin'ny serivisy manokana mandritra ny fitsapana fampidirana, dia mety ho simban'ny angon-drakitra tapaka ny faritra fitsapana. Nisy tranga rehefa nandefa fangatahana tamin'ny endrika JSON tapaka ny serivisy, izay nahatonga ny fijoroana ho tsy azo ampiasaina tanteraka.
    • Ny fihenan'ny fizaran-tsarimihetsika rehefa mitombo ny angona fitsapana. Heveriko fa tsy misy dikany ny mamaritra ohatra amin'ny fanadiovana/famerenana ny angon-drakitra. Tamin'ny fanazaran-tenako dia tsy nahita tetikasa izay nandehanan'ity fomba fiasa ity aho.
    • Atahorana hanelingelina ny fiasan'ny fizaran-tany fitsapana rehefa mitsapa ny firafitry ny rafitra ankapobeny. Ohatra, mpampiasa / vondrona / tenimiafina / politika fampiharana.
    • Ny angona andrana avy amin'ny andrana mandeha ho azy dia manasarotra ny fiainana ho an'ireo mpanandrana tanana.

    Ny sasany dia hilaza fa ny autotest tsara dia tokony hanadio ny angon-drakitra aorian'ny tenany. Manana hevitra manohitra aho:

    • Tena mora ampiasaina ny fijoroana dynamic.
    • Tsy ny zavatra rehetra no azo esorina amin'ny rafitra amin'ny alΓ lan'ny API. Ohatra, tsy nampiharina ny antso hamafa zavatra iray satria mifanohitra amin'ny lojikan'ny fandraharahana izany.
    • Rehefa mamorona zavatra amin'ny alΓ lan'ny API, dia misy metadata be dia be azo noforonina, izay manahirana ny mamafa.
    • Raha misy fiankinan-doha amin'izy ireo ny fitsapana, dia lasa aretin'andoha ny dingan'ny fanadiovana ny angon-drakitra aorian'ny fanaovana fitiliana.
    • Fanampiny (ary, raha ny hevitro, tsy voamarina) dia miantso ny API.
    • Ary ny hevitra fototra: rehefa manomboka voafafa mivantana avy amin'ny angon-drakitra ny angona fitsapana. Mivadika ho cirque PK/FK tena izy! Henonay avy amin'ny mpamorona hoe: "Vao avy nanampy / nesoriko / nanome anarana famantarana iray aho, nahoana no tratra ny fitsapana fampidirana 100500?"

    Raha ny hevitro, ny vahaolana tsara indrindra dia ny tontolo iainana mavitrika.

  2. Maro ny olona mampiasa docker-compose mba hampandehanana tontolo fitsapana, saingy vitsy ny olona mampiasa docker-compose rehefa manao fitiliana fampidirana amin'ny CI/CD. Ary eto aho dia tsy mihevitra ny kubernetes, swarm ary sehatra orkestra kaontenera hafa. Tsy ny orinasa rehetra no manana azy ireo. Tsara raha toa ny docker-compose.yml ho an'ny rehetra.
  3. Na dia manana mpihazakazaka QA manokana aza isika, ahoana no ahafahantsika mahazo antoka fa tsy mifanalavitra ny serivisy natomboka tamin'ny alΓ lan'ny docker-compose?
  4. Ahoana ny fanangonana ny diarin'ny serivisy voasedra?
  5. Ahoana no hanadiovana ny mpihazakazaka?

Manana mpihazakazaka GitLab manokana ho an'ny tetikasako aho ary nifanena tamin'ireo fanontaniana ireo nandritra ny fampandrosoana mpanjifa Java ho an'ny TestRail. Ny marimarina kokoa, rehefa manao fitsapana fampidirana. Eto ambany isika dia hamaha ireo olana ireo amin'ny fampiasana ohatra avy amin'ity tetikasa ity.

Ho an'ny atiny

GitLab Shell Runner

Ho an'ny mpihazakazaka dia manoro milina virtoaly Linux misy 4 vCPU, 4 GB RAM, 50 GB HDD aho.
Betsaka ny fampahalalana momba ny fametrahana gitlab-runner amin'ny Internet, ka vetivety dia:

  • Midira amin'ny milina amin'ny SSH
  • Raha manana RAM latsaky ny 8 GB ianao dia manoro hevitra aho manaova swap 10 GBmba tsy ho avy ny mpamono OOM hamono ny asanay noho ny tsy fahampian'ny RAM. Mety hitranga izany rehefa asa mihoatra ny 5 no atomboka miaraka. Hivoatra miadana kokoa ny asa, fa tsy mitsaha-mitombo.

    Ohatra amin'ny mpamono OOM

    Raha hitanao ao amin'ny diarin'ny asa bash: line 82: 26474 Killed, dia tanteraho fotsiny amin'ny mpihazakazaka sudo dmesg | grep 26474

    [26474]  1002 26474  1061935   123806     339        0             0 java
    Out of memory: Kill process 26474 (java) score 127 or sacrifice child
    Killed process 26474 (java) total-vm:4247740kB, anon-rss:495224kB, file-rss:0kB, shmem-rss:0kB

    Ary raha toa ka toy izao ny sary, dia ampio swap na ampio RAM.

  • hametraka gitlab-runner, docker, docker-Mamboatra, manao.
  • Manampy mpampiasa gitlab-runner amin'ny vondrona docker
    sudo groupadd docker
    sudo usermod -aG docker gitlab-runner
  • hisoratra anarana gitlab-runner.
  • Misokatra ho an'ny fanitsiana /etc/gitlab-runner/config.toml ary ampio

    concurrent=20
    [[runners]]
      request_concurrency = 10

    Izany dia ahafahanao manao asa mitovy amin'ny mpihazakazaka iray. Hamaky bebe kokoa eto.
    Raha manana milina matanjaka kokoa ianao, ohatra 8 vCPU, 16 GB RAM, dia azo atao avo roa heny fara-fahakeliny ireo isa ireo. Saingy miankina amin'ny inona marina no havoaka amin'ity mpihazakazaka ity sy amin'ny habetsahana.

Izany dia ampy.

Ho an'ny atiny

Manomana docker-compose.yml

Ny tena asa dia docker-compose.yml universal, izay azon'ny developer/testers ampiasaina eo an-toerana sy amin'ny fantsona CI.

Voalohany indrindra, manao anarana serivisy tokana ho an'ny CI izahay. Ny iray amin'ireo fari-piainana tsy manam-paharoa ao amin'ny GitLab CI dia ny variable CI_JOB_ID. Raha mamaritra ianao container_name misy dikany "service-${CI_JOB_ID:-local}", avy eo amin'ny tranga:

  • raha CI_JOB_ID tsy voafaritra amin'ny faribolan'ny tontolo iainana,
    dia ho ny anaran'ny serivisy service-local
  • raha CI_JOB_ID voafaritra amin'ny fari-piainan'ny tontolo iainana (ohatra 123),
    dia ho ny anaran'ny serivisy service-123

Faharoa, mamorona tambajotra iraisana izahay ho an'ny serivisy natomboka. Izany dia manome antsika fitokanana amin'ny ambaratongan'ny tambajotra rehefa manao tontolo fitsapana maro.

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

Raha ny marina, ity no dingana voalohany amin'ny fahombiazana =)

Ohatra amin'ny docker-compose.yml misy fanehoan-kevitra

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

Ohatra mihazakazaka eo an-toerana

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

Saingy tsy ny zava-drehetra dia tsotra amin'ny fandefasana amin'ny CI.

Ho an'ny atiny

Manomana ny Makefile

Mampiasa Makefile aho satria tena mety amin'ny fitantanana ny tontolo iainana eo an-toerana na amin'ny CI. Hevitra misimisy kokoa amin'ny Internet

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

fanamarinana

manao 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

manao 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. Fifaninanana fandefasana serivisy voasedra mampiasa Docker Compose

Ho an'ny atiny

Manomana .gitlab-ci.yml

Manatanteraka andrana fampidirana

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

Vokatry ny fampandehanana asa toy izany, ny lahatahiry logs ao amin'ny artifacts dia ahitana logs serivisy sy fitsapana. Izay tena mety raha misy fahadisoana. Ny fitsapana tsirairay amin'ny parallèle dia manoratra ny diany manokana, fa hiresaka momba izany aho.

GitLab Shell Runner. Fifaninanana fandefasana serivisy voasedra mampiasa Docker Compose

Ho an'ny atiny

Manadio ny mpihazakazaka

Ny asa dia hatomboka araka ny fandaharam-potoana ihany.

stages:
- clean
- build
- test

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

Manaraka, mandehana any amin'ny tetikasa GitLab -> CI/CD -> Fandaharana -> Fandaharana vaovao ary ampio fandaharam-potoana vaovao

GitLab Shell Runner. Fifaninanana fandefasana serivisy voasedra mampiasa Docker Compose

Ho an'ny atiny

vokatra

Manokatra asa 4 ao amin'ny GitLab CI
GitLab Shell Runner. Fifaninanana fandefasana serivisy voasedra mampiasa Docker Compose

Ao amin'ny diarin'ny asa farany miaraka amin'ny fitsapana fampidirana dia mahita kaontenera avy amin'ny asa samihafa isika

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

Log amin'ny antsipiriany kokoa

$ docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY}
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /home/gitlab-runner/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
$ export TR_HTTP_PORT=$(shuf -i10000-60000 -n1)
$ export TR_HTTPS_PORT=$(shuf -i10000-60000 -n1)
$ mkdir ${CI_JOB_ID}
$ cp .indirect/docker-compose.yml ${CI_JOB_ID}/docker-compose.yml
$ make docker-up
docker-compose -f ${CI_JOB_ID:-.indirect}/docker-compose.yml kill
docker network rm testrail-network-${CI_JOB_ID:-local} || true
Error: No such network: testrail-network-204645172
docker network create testrail-network-${CI_JOB_ID:-local}
0a59552b4464b8ab484de6ae5054f3d5752902910bacb0a7b5eca698766d0331
docker-compose -f ${CI_JOB_ID:-.indirect}/docker-compose.yml pull
Pulling web       ... done
Pulling fpm       ... done
Pulling migration ... done
Pulling db        ... done
docker-compose -f ${CI_JOB_ID:-.indirect}/docker-compose.yml up --force-recreate --renew-anon-volumes -d
Creating volume "204645172_static-content" with default driver
Creating testrail-mysql-204645172 ... 
Creating testrail-mysql-204645172 ... done
Creating testrail-migration-204645172 ... done
Creating testrail-fpm-204645172       ... done
Creating testrail-web-204645172       ... done
docker ps
CONTAINER ID        IMAGE                                                          COMMAND                  CREATED              STATUS              PORTS                                           NAMES
c6b76f9135ed        registry.gitlab.com/touchbit/image/testrail/web:latest         "nginx -g 'daemon of…"   13 seconds ago       Up 1 second         0.0.0.0:51148->80/tcp, 0.0.0.0:25426->443/tcp   testrail-web-204645172
01d303262d8e        registry.gitlab.com/touchbit/image/testrail/fpm:latest         "docker-php-entrypoi…"   16 seconds ago       Up 13 seconds       9000/tcp                                        testrail-fpm-204645172
2cdab1edbf6a        registry.gitlab.com/touchbit/image/testrail/migration:latest   "docker-entrypoint.s…"   16 seconds ago       Up 13 seconds       3306/tcp, 33060/tcp                             testrail-migration-204645172
826aaf7c0a29        mysql:5.7.22                                                   "docker-entrypoint.s…"   18 seconds ago       Up 16 seconds       3306/tcp                                        testrail-mysql-204645172
6dbb3fae0322        registry.gitlab.com/touchbit/image/testrail/web:latest         "nginx -g 'daemon of…"   36 seconds ago       Up 22 seconds       0.0.0.0:44202->80/tcp, 0.0.0.0:20151->443/tcp   testrail-web-204645084
3540f8d448ce        registry.gitlab.com/touchbit/image/testrail/fpm:latest         "docker-php-entrypoi…"   38 seconds ago       Up 35 seconds       9000/tcp                                        testrail-fpm-204645084
70fea72aa10d        mysql:5.7.22                                                   "docker-entrypoint.s…"   40 seconds ago       Up 37 seconds       3306/tcp                                        testrail-mysql-204645084
d8aa24b2892d        registry.gitlab.com/touchbit/image/testrail/web:latest         "nginx -g 'daemon of…"   About a minute ago   Up 53 seconds       0.0.0.0:31103->80/tcp, 0.0.0.0:43872->443/tcp   testrail-web-204644881
6d4ccd910fad        registry.gitlab.com/touchbit/image/testrail/fpm:latest         "docker-php-entrypoi…"   About a minute ago   Up About a minute   9000/tcp                                        testrail-fpm-204644881
685d8023a3ec        mysql:5.7.22                                                   "docker-entrypoint.s…"   About a minute ago   Up About a minute   3306/tcp                                        testrail-mysql-204644881
1cdfc692003a        registry.gitlab.com/touchbit/image/testrail/web:latest         "nginx -g 'daemon of…"   About a minute ago   Up About a minute   0.0.0.0:44752->80/tcp, 0.0.0.0:23540->443/tcp   testrail-web-204644793
6f26dfb2683e        registry.gitlab.com/touchbit/image/testrail/fpm:latest         "docker-php-entrypoi…"   About a minute ago   Up About a minute   9000/tcp                                        testrail-fpm-204644793
029e16b26201        mysql:5.7.22                                                   "docker-entrypoint.s…"   About a minute ago   Up About a minute   3306/tcp                                        testrail-mysql-204644793
c10443222ac6        registry.gitlab.com/touchbit/image/testrail/web:latest         "nginx -g 'daemon of…"   5 hours ago          Up 5 hours          0.0.0.0:57123->80/tcp, 0.0.0.0:31657->443/tcp   testrail-web-204567103
04339229397e        registry.gitlab.com/touchbit/image/testrail/fpm:latest         "docker-php-entrypoi…"   5 hours ago          Up 5 hours          9000/tcp                                        testrail-fpm-204567103
6ae0accab28d        mysql:5.7.22                                                   "docker-entrypoint.s…"   5 hours ago          Up 5 hours          3306/tcp                                        testrail-mysql-204567103
b66b60d79e43        registry.gitlab.com/touchbit/image/testrail/web:latest         "nginx -g 'daemon of…"   5 hours ago          Up 5 hours          0.0.0.0:56321->80/tcp, 0.0.0.0:58749->443/tcp   testrail-web-204553690
033b1f46afa9        registry.gitlab.com/touchbit/image/testrail/fpm:latest         "docker-php-entrypoi…"   5 hours ago          Up 5 hours          9000/tcp                                        testrail-fpm-204553690
a8879c5ef941        mysql:5.7.22                                                   "docker-entrypoint.s…"   5 hours ago          Up 5 hours          3306/tcp                                        testrail-mysql-204553690
069954ba6010        registry.gitlab.com/touchbit/image/testrail/web:latest         "nginx -g 'daemon of…"   5 hours ago          Up 5 hours          0.0.0.0:32869->80/tcp, 0.0.0.0:16066->443/tcp   testrail-web-204553539
ed6b17d911a5        registry.gitlab.com/touchbit/image/testrail/fpm:latest         "docker-php-entrypoi…"   5 hours ago          Up 5 hours          9000/tcp                                        testrail-fpm-204553539
1a1eed057ea0        mysql:5.7.22                                                   "docker-entrypoint.s…"   5 hours ago          Up 5 hours          3306/tcp                                        testrail-mysql-204553539

Vita soa aman-tsara ny asa rehetra

Ny artifacts asa dia misy diarin'ny serivisy sy fitsapana
GitLab Shell Runner. Fifaninanana fandefasana serivisy voasedra mampiasa Docker Compose

GitLab Shell Runner. Fifaninanana fandefasana serivisy voasedra mampiasa Docker Compose

Toa tsara ny zava-drehetra, saingy misy ny nuance. Mety ho foanana an-keriny ny fantsona fantsona rehefa mandeha ny andrana fampiraisana, ka amin'izay dia tsy hijanona ny kaontenera mandeha. Indraindray mila manadio ny mpihazakazaka ianao. Indrisy anefa fa mbola eo amin'ny toerany ny asa fanatsarana ao amin'ny GitLab CE Open

Saingy nampianay ny fandefasana asa iray araka ny fandaharam-potoana, ary tsy misy mandrara anay amin'ny fampandehanana azy amin'ny tanana.
Mandehana any amin'ny tetikasanay -> CI/CD -> Fandaharana ary tanteraho ny asa Clean runner

GitLab Shell Runner. Fifaninanana fandefasana serivisy voasedra mampiasa Docker Compose

Total:

  • Manana mpihazakazaka akorandriaka iray izahay.
  • Tsy misy fifanoherana eo amin'ny asa sy ny tontolo iainana.
  • Manao asa miaraka amin'ny andrana fampidirana mifanitsy izahay.
  • Azonao atao ny manao fitsapana fampidirana na eo an-toerana na ao anaty container.
  • Angonina sy ampifandraisina amin'ny asa fantson-drano ny diarin'ny serivisy sy ny fitsapana.
  • Azo atao ny manadio ny mpihazakazaka amin'ny sary Docker taloha.

Ny fotoana fametrahana dia ~ 2 ora.
Izay ihany, raha ny marina. Ho faly aho handray valiny.

Ho an'ny atiny

Source: www.habr.com

Add a comment