В этом посте будет объяснен процесс развертывания приложения с помощью 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»