Виконання jobs у Docker контейнерах для створення контрольованого середовища виконання

Контейнери у GitHub Actions дозволяють виконувати jobs у ізольованому середовищі, створеному за допомогою Docker. Це особливо корисно, коли вам потрібно гарантувати, що код виконується в точно визначеному середовищі з конкретними версіями програмного забезпечення та налаштуваннями.

Як налаштувати виконання jobs у Docker контейнері?

Щоб запустити job у Docker контейнері, вам потрібно визначити контейнер, який буде використовуватися для цього завдання. У GitHub Actions ви можете використати будь-який доступний Docker образ або створити власний.

Приклад:

jobs:
  build:
    runs-on: ubuntu-latest
    container:
      image: node:14
    steps:
      - name: Check out code
        uses: actions/checkout@v2
      - name: Install dependencies
        run: npm install
      - name: Run tests
        run: npm test

У цьому прикладі job build виконується у контейнері, заснованому на образі node:14, що гарантує, що у середовищі виконання встановлена саме 14-та версія Node.js. Це дозволяє уникнути проблем сумісності між різними версіями програмного забезпечення, які можуть бути на хості.

Використання сервісних контейнерів для забезпечення додаткових послуг, таких як бази даних, під час виконання jobs

Сервісні контейнери (service containers) у GitHub Actions дозволяють запускати додаткові сервіси, такі як бази даних або кеші, у якості частини вашого workflow. Це дозволяє забезпечити наявність усіх необхідних для виконання jobs інструментів і послуг без необхідності встановлювати їх на основний контейнер або хост.

Як додати сервісні контейнери?

Ви можете додати сервісні контейнери за допомогою ключа services у вашому workflow. Наприклад, якщо вашому job потрібна база даних MongoDB, ви можете налаштувати відповідний контейнер як сервіс.

Приклад:

jobs:
  test:
    runs-on: ubuntu-latest
    container:
      image: node:14
    services:
      mongodb:
        image: mongo:latest
        ports:
          - 27017:27017
    steps:
      - name: Check out code
        uses: actions/checkout@v2
      - name: Install dependencies
        run: npm install
      - name: Run tests
        run: npm test

У цьому прикладі ми додаємо сервісний контейнер MongoDB, який буде доступний під час виконання job test. Контейнер mongodb буде запущений паралельно з основним контейнером, і всі необхідні порти для взаємодії з ним будуть налаштовані автоматично.

Сервісні контейнери забезпечують можливість виконання інтеграційних тестів та інших завдань, що потребують доступу до зовнішніх сервісів, у межах одного workflow без необхідності налаштовувати інфраструктуру вручну.