Обновить
4K+
6

Писатель-программист

6
Рейтинг
4
Подписчики
Отправить сообщение

Действительно очень хитрая форма. Спасибо!

Это точно, моя главная головная боль на этот месяц. Особенно когда методы max bridge половина не работают на веб версии)

Тут вы правы, мой косяк)

И где же оно противоречит? Вы докапались просто до нюанса в описании того, для чего может пригодиться партишен.
И давайте пожалуйста конструктивную критику, если вам не понравилась моя реализация (а я в начале статьи сказала, что она не самая оптимальная), то предложите свою. Лучше делиться опытом, чем негативом

Учту и постараюсь добавить в ближайшее время, спасибо за комментарий!

Не стали прибегать к коробочным решениям из-за того, что для каждого типа задач есть свои нюансы, которые иной раз коробки или инструменты не могут выполнить. К примеру, разное количество задач в параллели, да разное отправление через http или кафку. Ну и надо отслеживать статус выполнения задач

Я призналась еще в начале, что сама не писала test, но насколько я предполагаю, ответ ии плюс минус верный, учитывая мой небольшой опыт

Скорее всего вы правы, я в этом деле еще профан. А можете чуть более конкретно описать, как это сделать? Или может знаете пару хороших статей на этот счет?

Если использовать чуть более специализированные тесты, то:

Пишем что-то в docker-compose.test.yml:

version: '3'
services:
  app:
    image: myapp
    command: npm run test:integration  # Ваша команда
    depends_on:
      - postgres
  postgres:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: "test"

В пайплайне будет выглядеть так:

test_integration:
  script:
    - docker-compose -f docker-compose.test.yml up --abort-on-container-exit

Параллельный запуск тестов

stages:
  - build
  - test

unit_test:
  stage: test
  script: docker run --rm myapp npm test

integration_test:
  stage: test
  script: docker-compose -f docker-compose.test.yml up --abort-on-container-exit

e2e_test:
  stage: test
  script: docker run --rm myapp npm run test:e2e

Если честно, сама я такое не писала, но если чисто в теории, то в том же файле можно написать этап test.

Для GitLab CI (.gitlab-ci.yml):

stages:
  - build
  - test  # ← Новый этап
  - deploy

build:
  stage: build
  script:
    - docker build -t myapp .
    # Сохраняем образ для следующих этапов
    - docker save myapp > myapp.tar
  artifacts:
    paths:
      - myapp.tar

test:  # ← Вот этот новый блок
  stage: test
  script:
    - docker load < myapp.tar
    # Запускаем тесты внутри контейнера
    - docker run --rm myapp npm test  # Для Node.js
    # Или для других языков:
    # - docker run --rm myapp pytest    # Python
    # - docker run --rm myapp mvn test # Java

deploy:
  stage: deploy
  script:
    - ssh user@vm_ip "docker load < myapp.tar"
    - ssh user@vm_ip "docker run -d -p 3000:3000 --name myapp myapp"
  only:
    - master

Для GitHub Actions (.github/workflows/ci.yml):

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    
    - name: Build and test
      run: |
        docker build -t myapp .
        docker run --rm myapp npm test  # Тесты запускаются здесь
        
    - name: Prepare for deploy
      run: docker save myapp > myapp.tar
      
    - name: Upload artifact
      uses: actions/upload-artifact@v2
      with:
        name: app-image
        path: myapp.tar

  deploy:
    needs: build-and-test
    runs-on: ubuntu-latest
    steps:
    - uses: actions/download-artifact@v2
      with:
        name: app-image
        
    - name: Deploy
      run: |
        scp myapp.tar user@vm_ip:/tmp/
        ssh user@vm_ip "docker load < /tmp/myapp.tar"
        ssh user@vm_ip "docker run -d -p 3000:3000 --name myapp myapp"
  1. Сначала собираем образ

  2. Затем тестируем:

    • Загружаем собранный в билде образ из временного файла myapp.tar

    • Запускаем docker run --rm с командой тестов

    • Если тесты упадут - пайплайн остановится

  3. Деплоим только если тесты прошли (все тот же образ myapp.tar)

Информация

В рейтинге
1 088-й
Зарегистрирован
Активность

Специализация

Бэкенд разработчик
Средний
SQL
C#
ASP.NET
ООП
PostgreSQL