мета-данные страницы
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| devops_training_in_yandex:devops-trainings-cloud-1 [2023/11/10 09:34] – Администратор | devops_training_in_yandex:devops-trainings-cloud-1 [2023/11/13 11:21] (текущий) – Администратор | ||
|---|---|---|---|
| Строка 113: | Строка 113: | ||
| {{: | {{: | ||
| - | ===== Автосборка с помощью Github CI ===== | + | ===== Автосборка с помощью Github CI и отправка в Яндекс облако |
| Для начала нужно создать ключи доступа к яндекс облаку из Github | Для начала нужно создать ключи доступа к яндекс облаку из Github | ||
| < | < | ||
| Строка 167: | Строка 167: | ||
| {{: | {{: | ||
| + | <note important> | ||
| + | |||
| + | У вас должен лежать Dockerfile в каталоге, | ||
| + | |||
| + | В случае данного задания у меня лежит файл в каталоге **./ | ||
| + | </ | ||
| + | |||
| + | ===== Тестируем автосборку и отправку в Яндекс облако ===== | ||
| + | В консоли переходим в каталог клонированной ветки репозитория гитхаба | ||
| + | < | ||
| + | Выполняем команды | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | Вводим логин и пароль от гитхаба и получаем такой вывод | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Переходим в браузере в данный репозиторий во складку **Actions** | ||
| + | И видим что процесс автосборки пошел | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Буквально через несколько минут там же вы увидите такую картину | ||
| + | |||
| + | Процесс сборки завершился успешно | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Теперь переходим в свое яндекс облако и проверяем действительно ли там появился образ | ||
| + | |||
| + | Вуаля и он действительно там | ||
| + | |||
| + | {{: | ||
| + | |||
| + | ===== Автосборка с помощью Github CI и отправка в Docker Hub ===== | ||
| + | Для начала нужно создать токен авторизации на docker hub: | ||
| + | * Переходим на [[https:// | ||
| + | * Логинимся под своей учеткой | ||
| + | * Переходим в **Account Settings** | ||
| + | * Далее **Security** | ||
| + | * Нажимаем **New Access Token** | ||
| + | * Даем ему имя и права | ||
| + | * Получаем готовый токен | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Токен копируем и не теряем, | ||
| + | Создаем в репозитории на гитхабе файл | ||
| + | < | ||
| + | < | ||
| + | |||
| + | on: | ||
| + | push: | ||
| + | tags: | ||
| + | - ' | ||
| + | |||
| + | jobs: | ||
| + | push_to_registry: | ||
| + | name: Push Docker image to Docker Hub | ||
| + | runs-on: ubuntu-latest | ||
| + | steps: | ||
| + | - name: Check out the repo | ||
| + | uses: actions/ | ||
| + | | ||
| + | - name: Log in to Docker Hub | ||
| + | uses: docker/ | ||
| + | with: | ||
| + | username: ${{ secrets.USERNAME }} | ||
| + | password: ${{ secrets.PASSWORD }} | ||
| + | | ||
| + | - name: Extract metadata (tags, labels) for Docker | ||
| + | id: meta | ||
| + | uses: docker/ | ||
| + | with: | ||
| + | images: ikfellk/ | ||
| + | | ||
| + | - name: Build and push Docker image | ||
| + | uses: docker/ | ||
| + | with: | ||
| + | context: ./catgpt | ||
| + | file: ./ | ||
| + | push: true | ||
| + | tags: ${{ steps.meta.outputs.tags }} | ||
| + | labels: ${{ steps.meta.outputs.labels }}</ | ||
| + | | ||
| + | < | ||
| + | * **USERNAME** - логин от docker hub | ||
| + | * **PASSWORD** - Токен авторизации созданный ранее | ||
| + | </ | ||
| + | Создаем секреты описанные в предыдущем шаге | ||
| + | для создания вы должны находится в своем репозитории и нажать кнопку **Settings** | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Далее перейти в **Secrets and variables** и далее в **Actions** | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Теперь создаем секреты для авторизации | ||
| + | Нужно нажать **New repository secret** | ||
| + | Ввести названия что упоминались выше или можете посмотреть свой файл **docker-publish.yml** и там найти строки с секретами и изменить на ваши названия, | ||
| + | |||
| + | {{: | ||
| + | <note important> | ||
| + | У вас должен лежать Dockerfile в корневом каталоге | ||
| + | </ | ||
| + | |||
| + | ===== Тестируем автосборку и отправку в Docker Hub ===== | ||
| + | В консоли переходим в каталог клонированной ветки репозитория гитхаба | ||
| + | < | ||
| + | Выполняем команды | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | |||
| + | Получаем выполненный процесс как и в предыдущем тестировании | ||
| + | Переходим в свой репозиторий на **Docker hub** и убеждаемся что файлы попали туда | ||
| + | |||
| + | {{: | ||
| + | |||
| + | ===== Разворачиваем инфраструктуру с помощью Terraform ===== | ||
| + | ==== Установка ==== | ||
| + | |||
| + | Для начала нужно установить Terraform, а т.к. мы в России, | ||
| + | Заходим на сайт **https:// | ||
| + | Выполняем команды: | ||
| + | Скачать архив | ||
| + | < | ||
| + | Распаковать архив | ||
| + | < | ||
| + | Переместить файл | ||
| + | < | ||
| + | |||
| + | ==== Проверка работы Terraform ==== | ||
| + | Переходим в заранее клонированный репозиторий с github в папку terraform | ||
| + | И выполняем команду | ||
| + | < | ||
| + | Если получаете ошибку такого рода | ||
| + | |||
| + | {{: | ||
| + | |||
| + | То нужно выполнить следующее: | ||
| + | Создать файл | ||
| + | < | ||
| + | < | ||
| + | network_mirror { | ||
| + | url = " | ||
| + | include = [" | ||
| + | } | ||
| + | direct { | ||
| + | exclude = [" | ||
| + | } | ||
| + | }</ | ||
| + | После этого пробуем еще раз команду | ||
| + | < | ||
| + | И получаем положительный результат | ||
| + | |||
| + | {{: | ||
| + | |||
| + | ==== Запуск ==== | ||
| + | <note important> | ||
| + | Для начала нужно выполнить команду | ||
| + | < | ||
| + | Данная команда покажет ошибки в вашем main.tf если таковы имеются. | ||
| + | В моем случае ошибки есть и их нужно исправить | ||
| + | |||
| + | {{: | ||
| + | |||
| + | === Разбор ошибок и устранение === | ||
| + | 1) Ошибка в названии регистра | ||
| + | < | ||
| + | on output.tf line 2, in output " | ||
| + | 2: value = yandex_container_registry.registry1.id | ||
| + | A managed resource " | ||
| + | |||
| + | Тут все просто, | ||
| + | В моем случае оно называется **ikfellk-registry** Просто меняю на корректное название и ошибка уходит | ||
| + | |||
| + | 2) Отсутствует json файл с данными | ||
| + | < | ||
| + | with provider[" | ||
| + | on main.tf line 11, in provider " | ||
| + | 11: | ||
| + | JSON in " | ||
| + | Error: JSON in " | ||
| + | with provider[" | ||
| + | on main.tf line 11, in provider " | ||
| + | 11: | ||
| + | |||
| + | Для решения нужно сгенерировать json файл с данными для входа | ||
| + | Мы это уже делали ранее [[https:// | ||
| + | Теперь выполняем команду | ||
| + | < | ||
| + | Видим что ошибки ушли, но появилась еще одна | ||
| + | |||
| + | {{: | ||
| + | |||
| + | 3) Отсутствует SSH ключ для авторизации | ||
| + | < | ||
| + | on main.tf line 119, in resource " | ||
| + | 119: | ||
| + | while calling file(path) | ||
| + | Invalid value for " | ||
| + | only with files that are distributed as part of the configuration source code, so if this file will be | ||
| + | created by a resource in this configuration you must instead obtain this result from an attribute of that | ||
| + | resource.</ | ||
| + | Для решения нужно сгенерировать SSH ключ | ||
| + | < | ||
| + | Указываем путь и название как в ошибке **/ | ||
| + | Вводим пароль | ||
| + | Проверяем полученные сертификаты | ||
| + | < | ||
| + | {{: | ||
| + | |||
| + | Теперь выполняем команду | ||
| + | < | ||
| + | И получаем полностью корректный план. | ||
| + | Небольшой пример как это выглядит | ||
| + | |||
| + | {{: | ||
| + | |||
| + | После этого можно запускать команду, | ||
| + | < | ||
| + | В конце, как отработает команда, | ||
| + | |||
| + | {{: | ||
| + | |||
| + | ===== Тестируем отработанный Terraform ===== | ||
| + | Переходим в свой личный кабинет яндекс облака и смотрим что там появились машины, | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Теперь нужно загрузить актуальную версию приложения в контейнер | ||
| + | Для этого выполняем уже знакомые нам команды | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | Вводим логин и пароль от гитхаба | ||
| + | Спустя примерно минуту или полторы, | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Теперь переходим в веб браузер по ip адресам виртуальный машин созданный нашим terraform файлом | ||
| + | и видим там рабочее приложение и метрики | ||
| + | |||
| + | {{: | ||
| + | {{: | ||
| + | {{: | ||
| + | {{: | ||
| + | |||
| + | Для проверки балансировки нужно отключить одну виртуальную машину и со второй ничего не должно произойти и приложение так же останется в рабочем состоянии | ||
| + | |||
| + | Все работает как нужно. | ||
| + | |||
| + | Делаем удаление всех ресурсов | ||
| + | < | ||
| + | |||
| + | Задание выполнено. | ||
| + | |||