Рубрики
Uncategorized

Развертывание с помощью Anbible на CI / CD 🇬🇧

В этом посте будет объяснен процесс развертывания приложения с помощью Anisible. Традиционно примыкает … Помечено в блоге, Anisible, DevOps, производительности.

В этом посте будет объяснен процесс развертывания приложения с помощью Anisible. Традиционно приложения могут быть развернуты по-разному, вполне аналогичный подход к развертыванию приложений, таких как в Anbible, выполняет сценарий Bash, который имеет команды SSH. Чтобы привести пример, непрерывная интеграция TRAVIS имеет функцию, когда скрипт Bash может быть определен для развертывания приложения и с помощью приведенных инструкций в скрипте Bash, приложение может быть успешно развернута.

Детали, касающиеся развертывания с использованием сценариев Bash Travis Bash могут быть найдены здесь

Развертывание скрипта TRAVIS

Я хотел бы дать реальный пример случая из одного из проекта, на котором я работаю. Мы использовали развертывание скрипта Travis некоторое время, и он работает довольно хорошо. Сценарий Bash, который я использую в нашем процессе развертывания, приведен ниже:

#!/usr/bin/env bash
f=dist/hknd_linux_amd64/hknd
amigo=./svcs/amigo
user=ntpd
hostname=sec02.lab.es.aau.dk
keyfile=./travis_deploy_key
deploy_path=/data/home/ntpd/daemon/hknd
amigo_path=/data/home/ntpd/daemon/svcs/amigo

if [-f $f]; then
    echo "Deploying '$f' to '$hostname'"
    chmod 600 $keyfile
    ssh -i $keyfile -o StrictHostKeyChecking=no $user@$hostname sudo /bin/systemctl stop hknd.service
    scp -i $keyfile -o StrictHostKeyChecking=no $f $user@$hostname:$deploy_path
    scp -i $keyfile -r -o StrictHostKeyChecking=no $amigo $user@$hostname:$amigo_path
    ssh -i $keyfile -o StrictHostKeyChecking=no $user@$hostname sudo /bin/systemctl start hknd.service
else
    echo "Error: $f does not exist"
    exit 1
fi

Как вы можете наблюдать из скрипта Bash, каждый шаг развертывания приведен в виде команд SSH/SCP. Нет никакого вреда относительно этого, пока он содержит несколько шагов. Однако с течением времени больше конфигураций приложения должны быть развернуты, обновлены, изменены и проверены, затем могут превратиться в головную боль. Следовательно, имея хорошо структурированные шаги развертывания, используя Anisible, поставит нас в безопасную сторону.

Прежде чем прыгать в развертывание с помощью Anisible, я хотел бы отметить некоторые факторы, которые могут быть подсчитаны как недостатки не интегрирующих неизбежных для процесса развертывания.

  • Не распространенный способ использования ресурсов
  • Не хорошо структурированные сценарии развертывания, которые имеют высокий потенциал не очень хорошо работать.
  • Наличие простых команд SSH повышает вероятность возникновения вопросов, касающихся настроек, развертываний и более.

Существует множество недостатков использования чистых сценариев Bash в процессе развертывания, однако эти проблемы могут не применимы для всех них.

Для нашего случая я хотел бы преобразовать наш скрипт Bash, приведенный выше к Anbible, который имеет более элегантную структуру и легко управлять.

Перейти к неизмеренному

Поскольку скрипт Bash не содержит сложных инструкций, было бы очень легко преобразовать его в неибуемые игровые книги. Перед началом преобразования его в неблагоприятной Playbook необходимое SSH-соединение должно быть установлено правильно для разработки и производственных сред. (- Тестовая среда, если требуется, если требуется -).

Установка SSH-соединения между сервером и Anisible — довольно страстя, он содержит следующие шаги;

  • Генерировать клавишу SSH
  • Скопируйте открытый ключ к autorized_keys на стороне сервера
  • Шифровать закрытый ключ
  • Имейте расшифровочный скрипт для использования закрытого ключа на CI без ущерба для него.

Общий упрощенный поток для развертывания приведен ниже:

Как это объявлено с общей картины выше, нам необходимо обеспечить зашифрованный ключ SSH и скрипт для расшифровки вместе, чтобы использовать обычный закрытый ключ для доступа к серверу.

В этой настройке Github CI будет контрольным узлом, который будет иметь доступ к серверу, где мы хотели бы развернуть приложение.

Давайте начнем выполнять шаги,

Генерировать клавишу SSH

  $ ssh-keygen 

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

Шифровать закрытый ключ

Чтобы использовать ключ SSH, который генерируется ранее, нам нужно шифровать ключ, я предпочел использовать GPG Инструмент, есть много примеров об этом в Интернете, вы можете проверить его, если хотите.

  $ gpg --symmetric --cipher-algo AES256 

Команда предложит вам предоставить парольную фразу за шифрование и расшифровать закрытый ключ при необходимости. Выберите сильную и длинную парольную фразу. Как только это будет сделано, включите зашифрованный файл в Git. (- Что значит совершать его как и)

После того, как они закончили, остальные структурируют ассибильный PlayBook, чтобы развернуть файл на сервер.

Пример репо

Я собираюсь создать репозиторий на Github, чтобы продемонстрировать то, что я описал ранее в действии.

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

Anisible Playbook будет содержать следующие;

  • Остановка уже бега
  • Изменение двоичного файла сервиса
  • Начать его снова

Задачи могут быть расширены в соответствии с потребностями пользователя, однако, чтобы сохранить его короткое и показать, насколько непрерывно может использоваться непрерывная интеграция, я буду продолжать иметь минимальный Playbook.

Ссылка на примерный репозиторий: https://github.com/mrturkmenhub/ansible-deploy

Структура хранилища следующего:

Поскольку его можно наблюдать с рисунка выше, у меня есть только три задания, которые объединены под Main.yml Отказ

Некоторая конфигурация, касающаяся некоторого, такого как закрытый ключ, объявление местоположения файла инвентаризации сохраняется в файл Ansible.cfg Среди конфигурации соединения SSH.

Инвентарь Файл содержит сервер (ы) для развертывания приложения.

Этот пост не о том, как писать неблагоприятные игровые книги, следовательно, я собираюсь пропустить, чтобы объяснить это. Если вы хотите проверить и понять его, вы можете проверить следующие репозитории для примеров;

Расшифровывать скрипт Критический файл, который расшифровывает зашифрованный закрытый ключ для доступа к серверу.

Не забудьте установить вашу Secret_Passhrase на секреты репозитория

Файл рабочего процесса

Файл Workflow для этого репозитория довольно стражит для создания, а также для создания, то, что необходимо сделать, это то, что Anisible должен быть установлен в среду. После этого запущенные команды Ansible PlayBook после подключения зашифрованного закрытого ключа завершит задачи.

Сгенерированный рабочий процесс для предоставления демонстрации, в нормальном производственном случае трубопровод должен Не Будьте сломаны, каждый шаг от тестирования на развертывание производства должно быть столько же, сколько автоматизировано.

Завершенный файл рабочего процесса:

# This is a basic workflow to help you get started with Actions

name: CI

# Controls when the action will run. 
on:
  # Triggers the workflow on tagged commits  
  push:
    tags:
      - '*.*.*'

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v2

      - name: Install Ansible
        run: |
          sudo apt update -y
          sudo apt install software-properties-common -y
          sudo apt-add-repository --yes --update ppa:ansible/ansible
          sudo apt install ansible -y

      - name: Set Execute command to bash script
        run: chmod +x ./.github/scripts/decrypt.sh

      # Runs a single command using the runners shell
      - name: Decrypt large secret
        run: ./.github/scripts/decrypt.sh
        env:
          SECRET_PASSPHRASE: $

      - name: Escalate Private Key Permissions
        run: chmod 400 ~/.privkey

      - name: Run ansible command
        run: |
          ansible-playbook -i ./inventory main.yml
        env:
          ANSIBLE_CONFIG: ./ansible.cfg

      - name: Clean Key
        run: rm -rf ~/.privkey

Окончательный результат от действий GitHub:

Имейте в виду, что это всего лишь незначительная часть длинного трубопровода, которая имеет все модульные тесты, проверки, тесты по линту и интеграции. Без надлежащего трубопровода на месте, имея неизбежное, не может быть логично или не требуется. Рассмотрим ваши случаи, когда вы хотите перейти к развертыванию с помощью Anisible.

Ваше здоровье !

Оригинал: «https://dev.to/mrturkmen/deploy-with-ansible-on-ci-cd-3o02»