Как происходит установка и настройка инструментов в DevOps?

«Как происходит установка и настройка инструментов в DevOps?» — вопрос из категории Скриптинг и автоматизация, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Я никогда не устанавливаю и не настраиваю инструменты вручную на каждую машину. Весь процесс автоматизирован и идемпотентен.

Мой подход:

  1. Инфраструктура как код (IaC): Для серверов/виртуалок используем Terraform. Вместе с ресурсом (например, VM в GCP) сразу применяется скрипт начальной загрузки (cloud-init) или шаблон, который устанавливает базовый набор пакетов.
  2. Конфигурация как код: Основная установка и тонкая настройка выполняются системами управления конфигурацией, например, Ansible.
    • Создаются роли (roles) для каждого инструмента (Docker, Prometheus, Nginx).
    • Все переменные (версии, порты, пути) выносятся в отдельные файлы.
    • Плейбук можно запустить много раз, и результат будет одинаковым.

Пример роли Ansible для установки Docker:

# tasks/main.yml
- name: Install prerequisites
  apt:
    name:
      - apt-transport-https
      - ca-certificates
      - curl
      - software-properties-common
    state: present

- name: Add Docker GPG key
  apt_key:
    url: https://download.docker.com/linux/ubuntu/gpg
    state: present

- name: Add Docker repository
  apt_repository:
    repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable
    state: present

- name: Install Docker CE
  apt:
    name: docker-ce
    state: present

- name: Add user to docker group
  user:
    name: "{{ ansible_user }}"
    groups: docker
    append: yes
  1. Контейнеризация: Многие инструменты (например, Jenkins, GitLab Runner) я запускаю в Docker-контейнерах. Настройка в этом случае — это создание Dockerfile и передача конфигов через volumes или environment variables.
  2. Менеджеры версий: Для локальной разработки использую asdf-vm, который позволяет управлять версиями Terraform, kubectl, Helm и других CLI-инструментов через единый интерфейс.