Работал ли с GitHub Actions

«Работал ли с GitHub Actions» — вопрос из категории CI/CD, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, активно использовал GitHub Actions для построения CI/CD-пайплайнов. Это основной инструмент для проектов, размещенных на GitHub.

Мой опыт включает:

  • Создание комплексных workflow для сборки, тестирования, сканирования кода и безопасности, сборки Docker-образов и деплоя в различные среды (Kubernetes, AWS, VPS).
  • Использование матричных сборок для тестирования на нескольких версиях языка/ОС одновременно.
  • Организацию повторного использования кода через Composite Actions и Reusable Workflows, что значительно упростило поддержку десятков репозиториев.
  • Интеграцию с внешними системами через webhooks и GitHub API.

Пример продвинутого workflow для приложения на Go с деплоем в AWS ECS:

name: Go Build, Test, and Deploy

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        go-version: [ '1.19', '1.20' ]
    steps:
    - uses: actions/checkout@v4
    - name: Set up Go
      uses: actions/setup-go@v4
      with:
        go-version: ${{ matrix.go-version }}
    - run: go mod download
    - run: go test -v ./...

  build-and-push:
    runs-on: ubuntu-latest
    needs: test
    if: github.event_name == 'push' && github.ref == 'refs/heads/main'
    steps:
    - uses: actions/checkout@v4
    - name: Build and push Docker image
      uses: docker/build-push-action@v4
      with:
        context: .
        push: true
        tags: ${{ secrets.ECR_REGISTRY }}/my-app:${{ github.sha }}
    - name: Deploy to ECS
      uses: aws-actions/amazon-ecs-deploy-task-definition@v1
      with:
        task-definition: task-definition.json
        service: my-app-service
        cluster: production-cluster

Преимущества, которые я ценю: глубокая интеграция с экосистемой GitHub, обширный Marketplace, простота старта. Сложности, с которыми сталкивался: управление секретами для сложных сценариев, ограничения на время выполнения для больших монолитов, необходимость тщательной оптимизации кэширования.