Контейнери у GitHub Actions дозволяють виконувати 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. Це дозволяє уникнути проблем сумісності між різними версіями програмного забезпечення, які можуть бути на хості.
Сервісні контейнери (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 без необхідності налаштовувати інфраструктуру вручну.