Pelari Shell GitLab. Pelancaran kompetitif perkhidmatan yang diuji menggunakan Docker Compose

Pelari Shell GitLab. Pelancaran kompetitif perkhidmatan yang diuji menggunakan Docker Compose

Artikel ini akan menarik minat kedua-dua penguji dan pembangun, tetapi ditujukan terutamanya untuk pakar automasi yang menghadapi masalah menyediakan GitLab CI/CD untuk ujian integrasi dalam keadaan sumber infrastruktur yang tidak mencukupi dan/atau ketiadaan bekas. platform orkestrasi. Saya akan memberitahu anda cara untuk menyediakan penggunaan persekitaran ujian menggunakan docker compose pada satu pelari shell GitLab tunggal dan supaya apabila menggunakan beberapa persekitaran, perkhidmatan yang dilancarkan tidak mengganggu antara satu sama lain.


Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Prasyarat

  1. Dalam amalan saya, sering berlaku bahawa ujian integrasi "dirawat" pada projek. Dan selalunya masalah pertama dan paling ketara ialah saluran paip CI, di mana ujian integrasi sedang dibangunkan perkhidmatan dijalankan dalam persekitaran pembangun/peringkat. Ini menyebabkan beberapa masalah:

    • Disebabkan oleh kecacatan dalam perkhidmatan tertentu semasa ujian penyepaduan, litar ujian mungkin rosak oleh data yang rosak. Terdapat kes apabila menghantar permintaan dengan format JSON yang rosak telah menyebabkan perkhidmatan tersebut ranap, yang menyebabkan pendirian tidak boleh beroperasi sepenuhnya.
    • Perlahan litar ujian apabila data ujian meningkat. Saya rasa tidak masuk akal untuk menerangkan contoh dengan membersihkan/mengembalikan pangkalan data. Dalam amalan saya, saya tidak menemui projek di mana prosedur ini berjalan lancar.
    • Risiko mengganggu kefungsian litar ujian apabila menguji tetapan sistem umum. Contohnya, dasar pengguna/kumpulan/kata laluan/aplikasi.
    • Data ujian daripada ujian automatik menyukarkan kehidupan penguji manual.

    Sesetengah akan mengatakan bahawa autotest yang baik harus membersihkan data selepas diri mereka sendiri. Saya mempunyai hujah menentang:

    • Dirian dinamik sangat mudah digunakan.
    • Tidak semua objek boleh dialih keluar daripada sistem melalui API. Sebagai contoh, panggilan untuk memadam objek tidak dilaksanakan kerana ia bercanggah dengan logik perniagaan.
    • Apabila mencipta objek melalui API, sejumlah besar metadata boleh dibuat, yang bermasalah untuk dipadamkan.
    • Jika ujian mempunyai pergantungan antara mereka sendiri, maka proses pembersihan data selepas menjalankan ujian bertukar menjadi sakit kepala.
    • Panggilan tambahan (dan, pada pendapat saya, tidak wajar) kepada API.
    • Dan hujah utama: apabila data ujian mula dibersihkan terus dari pangkalan data. Ini bertukar menjadi sarkas PK/FK sebenar! Kami mendengar daripada pembangun: "Saya baru sahaja menambah/mengalih keluar/menamakan semula tanda, mengapakah 100500 ujian penyepaduan ditangkap?"

    Pada pendapat saya, penyelesaian yang paling optimum ialah persekitaran yang dinamik.

  2. Ramai orang menggunakan docker-compose untuk menjalankan persekitaran ujian, tetapi beberapa orang menggunakan docker-compose semasa menjalankan ujian integrasi dalam CI/CD. Dan di sini saya tidak mengambil kira kubernetes, swarm dan platform orkestrasi kontena lain. Tidak setiap syarikat mempunyainya. Alangkah baiknya jika docker-compose.yml bersifat universal.
  3. Walaupun kita mempunyai pelari QA sendiri, bagaimana kita boleh memastikan bahawa perkhidmatan yang dilancarkan melalui karang docker tidak mengganggu satu sama lain?
  4. Bagaimana untuk mengumpul log perkhidmatan yang diuji?
  5. Bagaimana untuk membersihkan pelari?

Saya mempunyai pelari GitLab saya sendiri untuk projek saya dan saya menemui soalan ini semasa pembangunan pelanggan Java untuk UjianRail. Lebih tepat lagi, semasa menjalankan ujian integrasi. Di bawah ini kami akan menyelesaikan isu ini menggunakan contoh daripada projek ini.

Kepada kandungan

Pelari Shell GitLab

Untuk pelari, saya mengesyorkan mesin maya Linux dengan 4 vCPU, 4 GB RAM, 50 GB HDD.
Terdapat banyak maklumat tentang menyediakan gitlab-runner di Internet, jadi secara ringkas:

  • Log masuk ke mesin melalui SSH
  • Jika anda mempunyai kurang daripada 8 GB RAM, maka saya syorkan buat swap 10 GBsupaya pembunuh OOM tidak datang dan membunuh tugas kami kerana kekurangan RAM. Ini boleh berlaku apabila lebih daripada 5 tugasan dilancarkan serentak. Tugasan akan berjalan dengan lebih perlahan, tetapi secara berterusan.

    Contoh dengan pembunuh OOM

    Jika anda lihat dalam log tugasan bash: line 82: 26474 Killed, kemudian laksanakan sahaja pada pelari 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

    Dan jika gambar kelihatan seperti ini, maka sama ada tambah swap atau tambah RAM.

  • Tetapkan gitlab-runner, docker, compiler-compose, buat.
  • Menambah pengguna gitlab-runner kepada kumpulan docker
    sudo groupadd docker
    sudo usermod -aG docker gitlab-runner
  • Daftar gitlab-runner.
  • Terbuka untuk diedit /etc/gitlab-runner/config.toml dan tambah

    concurrent=20
    [[runners]]
      request_concurrency = 10

    Ini akan membolehkan anda menjalankan tugasan selari pada satu pelari. Baca lagi di sini.
    Jika anda mempunyai mesin yang lebih berkuasa, contohnya 8 vCPU, 16 GB RAM, maka nombor ini boleh dibuat sekurang-kurangnya 2 kali lebih besar. Tetapi semuanya bergantung pada apa sebenarnya yang akan dilancarkan pada pelari ini dan dalam kuantiti berapa.

Itu sudah cukup.

Kepada kandungan

Menyediakan docker-compose.yml

Tugas utama ialah docker-compose.yml universal, yang boleh digunakan oleh pembangun/penguji secara tempatan dan dalam saluran paip CI.

Pertama sekali, kami membuat nama perkhidmatan unik untuk CI. Salah satu pembolehubah unik dalam GitLab CI ialah pembolehubah CI_JOB_ID. Jika anda nyatakan container_name dengan makna "service-${CI_JOB_ID:-local}", maka dalam kes:

  • jika CI_JOB_ID tidak ditakrifkan dalam pembolehubah persekitaran,
    maka nama perkhidmatan akan menjadi service-local
  • jika CI_JOB_ID ditakrifkan dalam pembolehubah persekitaran (contohnya 123),
    maka nama perkhidmatan akan menjadi service-123

Kedua, kami mencipta rangkaian biasa untuk perkhidmatan yang dilancarkan. Ini memberi kami pengasingan peringkat rangkaian apabila menjalankan berbilang persekitaran ujian.

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

Sebenarnya ini adalah langkah pertama untuk berjaya =)

Contoh docker-compose.yml saya dengan ulasan

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

Contoh larian tempatan

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

Tetapi tidak semuanya begitu mudah dengan pelancaran dalam CI.

Kepada kandungan

Menyediakan Makefile

Saya menggunakan Makefile kerana ia sangat mudah untuk pengurusan persekitaran tempatan dan dalam CI. Lagi komen dalam talian

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

Memeriksa

buat 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

buat 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

Pelari Shell GitLab. Pelancaran kompetitif perkhidmatan yang diuji menggunakan Docker Compose

Kepada kandungan

Menyediakan .gitlab-ci.yml

Menjalankan ujian integrasi

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

Hasil daripada menjalankan tugas sedemikian, direktori log dalam artifak akan mengandungi log perkhidmatan dan ujian. Yang sangat mudah sekiranya berlaku kesilapan. Setiap ujian secara selari menulis lognya sendiri, tetapi saya akan membincangkannya secara berasingan.

Pelari Shell GitLab. Pelancaran kompetitif perkhidmatan yang diuji menggunakan Docker Compose

Kepada kandungan

Membersihkan pelari

Tugasan akan dilancarkan hanya mengikut jadual.

stages:
- clean
- build
- test

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

Seterusnya, pergi ke projek GitLab kami -> CI/CD -> Jadual -> Jadual Baharu dan tambah jadual baharu

Pelari Shell GitLab. Pelancaran kompetitif perkhidmatan yang diuji menggunakan Docker Compose

Kepada kandungan

Keputusan

Melancarkan 4 tugasan dalam GitLab CI
Pelari Shell GitLab. Pelancaran kompetitif perkhidmatan yang diuji menggunakan Docker Compose

Dalam log tugasan terakhir dengan ujian penyepaduan kita melihat bekas daripada tugasan yang berbeza

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 lebih terperinci

$ 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

Semua tugasan berjaya diselesaikan

Artifak tugas mengandungi log perkhidmatan dan ujian
Pelari Shell GitLab. Pelancaran kompetitif perkhidmatan yang diuji menggunakan Docker Compose

Pelari Shell GitLab. Pelancaran kompetitif perkhidmatan yang diuji menggunakan Docker Compose

Segala-galanya kelihatan cantik, tetapi ada nuansa. Saluran paip boleh dibatalkan secara paksa semasa ujian penyepaduan sedang dijalankan, dalam kes ini, bekas yang berjalan tidak akan dihentikan. Dari semasa ke semasa anda perlu membersihkan pelari. Malangnya, tugas untuk penambahbaikan dalam GitLab CE masih dalam status Buka

Tetapi kami telah menambah pelancaran tugas mengikut jadual, dan tiada siapa yang melarang kami menjalankannya secara manual.
Pergi ke projek kami -> CI/CD -> Jadual dan jalankan tugas Clean runner

Pelari Shell GitLab. Pelancaran kompetitif perkhidmatan yang diuji menggunakan Docker Compose

Jumlah:

  • Kami mempunyai satu pelari cengkerang.
  • Tiada konflik antara tugas dan persekitaran.
  • Kami menjalankan tugas dengan ujian integrasi secara selari.
  • Anda boleh menjalankan ujian integrasi sama ada secara tempatan atau dalam bekas.
  • Log perkhidmatan dan ujian dikumpulkan dan dilampirkan pada tugas saluran paip.
  • Adalah mungkin untuk membersihkan pelari daripada imej Docker lama.

Masa persediaan ialah ~2 jam.
Itu sahaja, sebenarnya. Saya akan gembira menerima maklum balas.

Kepada kandungan

Sumber: www.habr.com

Tambah komen