Архитектура GitHub Actions, основные компоненты, триггеры и первые шаги.
GitHub Actions — мощная платформа автоматизации прямо в вашем репозитории. Изучите основы для создания первых workflow.
GitHub Actions — встроенная система CI/CD в GitHub, которая позволяет автоматизировать рабочие процессы прямо в репозитории.
Возможности GitHub Actions:
┌─────────────────────────────────────────────────┐
│ Workflow (.yml) │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Job 1 │ │ Job 2 │ │
│ │ ┌───────┐ │ │ ┌───────┐ │ │
│ │ │ Step │ │ │ │ Step │ │ │
│ │ └───────┘ │ │ └───────┘ │ │
│ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────┘
↓
┌───────────────┐
│ Runner │
│ (VM/Container)│
└───────────────┘
Workflow — конфигурация, описывающая весь процесс автоматизации. Хранится в файле .github/workflows/<name>.yml.
name: CI Pipeline
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm testJob — единица выполнения, состоящая из шагов. Jobs могут выполняться последовательно или параллельно.
jobs:
lint:
runs-on: ubuntu-latest
steps:
- run: npm run lint
test:
runs-on: ubuntu-latest
needs: lint # Зависимость от job lint
steps:
- run: npm testStep — отдельная задача в составе job. Бывает двух типов:
Запуск команды:
steps:
- run: npm install
- run: npm testИспользование action:
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'Actions — готовые блоки кода для переиспользования. Публикуются на GitHub Marketplace.
Популярные official actions:
| Action | Описание |
|---|---|
actions/checkout@v4 | Получение кода репозитория |
actions/setup-node@v4 | Установка Node.js |
actions/setup-python@v5 | Установка Python |
actions/upload-artifact@v4 | Сохранение артефактов |
actions/download-artifact@v4 | Загрузка артефактов |
Runner — сервер, на котором выполняется job.
Hosted runners (предоставлены GitHub):
| Runner | Описание |
|---|---|
ubuntu-latest | Последняя Ubuntu (22.04) |
ubuntu-22.04 | Ubuntu 22.04 |
windows-latest | Последняя Windows Server |
macos-latest | Последняя macOS |
Self-hosted runners:
Триггеры определяют, когда запускается workflow.
on:
push:
branches:
- main
- 'release/*'
tags:
- 'v*'
paths:
- 'src/**'on:
pull_request:
branches:
- main
types:
- opened
- synchronize
- reopenedon:
schedule:
# Каждый день в 00:00 UTC
- cron: '0 0 * * *'
# Каждые 15 минут
- cron: '*/15 * * * *'on:
workflow_dispatch:
inputs:
environment:
description: 'Окружение для деплоя'
required: true
default: 'staging'
type: choice
options:
- staging
- productionon:
issue_comment:
types: [created]
release:
types: [published]
workflow_run:
workflows: ['CI']
types: [completed]Создадим простой CI-пайплайн для Node.js проекта.
Создайте файл .github/workflows/ci.yml:
name: Node.js CIname: Node.js CI
on:
push:
branches: [main]
pull_request:
branches: [main]name: Node.js CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm test
- name: Build
run: npm run buildЗапушьте изменения в репозиторий. Workflow запустится автоматически.
Где смотреть результат:
GitHub Actions автоматически устанавливает переменные окружения:
jobs:
test:
runs-on: ubuntu-latest
steps:
- run: echo "Repository: $GITHUB_REPOSITORY"
- run: echo "Branch: $GITHUB_REF"
- run: echo "SHA: $GITHUB_SHA"Полезные переменные:
| Переменная | Описание |
|---|---|
GITHUB_REPOSITORY | Владелец/имя репозитория |
GITHUB_REF | Ветка или тег |
GITHUB_SHA | SHA коммита |
GITHUB_ACTOR | Имя пользователя, запустившего workflow |
GITHUB_WORKSPACE | Путь к рабочей директории |
Для хранения конфиденциальных данных используйте Secrets:
Настройка:
API_KEY)Использование в workflow:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy
run: ./deploy.sh
env:
API_KEY: ${{ secrets.API_KEY }}Артефакты — файлы, созданные в процессе выполнения workflow.
Сохранение артефакта:
steps:
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: build-output
path: dist/Использование артефакта в другом job:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/upload-artifact@v4
with:
name: my-artifact
path: dist/
deploy:
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/download-artifact@v4
with:
name: my-artifact
path: dist/Matrix позволяет запускать job с разными параметрами:
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18, 20, 22]
os: [ubuntu-latest, windows-latest]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- run: npm testЭто создаст 6 комбинаций (3 версии Node.js × 2 ОС).
GitHub Actions — мощная платформа автоматизации:
.github/workflows/В следующей теме вы изучите продвинутые возможности GitHub Actions: зависимости между jobs, контексты и выражения.
Вопросы ещё не добавлены
Вопросы для этой подтемы ещё не добавлены.