Создание образа облака CI / CD на Github в реестр AWS
Предварительные требования ✅
- Учетная запись AWS, отвечающая требованиям уровня бесплатного пользования.
- Базовые знания Docker.
- Базовые предварительные знания об экземплярах, удаленной среде и Github
Краткая хронология ⏲
- "Начиная"
- Создание репозитория Github
- Настройка действий Github
- Создание репозитория AWS для хранения изображений
- Создать пользователя AWS с разрешениями, ограниченными только ECR
- Подключение действий Github к AWS ECR
- Мониторинг, построение и продвижение
1️⃣ Начало работы
- Образ Docker приложения, созданный в вашей локальной среде, который готов к отправке в облачный реестр. (Альтернативный вариант: вы также можете использовать это базовое Приложение профиля пользователя для тестирования напрямую с помощью Forking)
2. Подготовка подходящей учетной записи уровня бесплатного пользования AWS для хранения образа.
2️⃣ Создание репозитория Github
- Создайте приложение в своей локальной среде, создав образ Docker.
- После того, как сборка будет завершена и протестирована вами, создайте новый репозиторий или вы можете использовать существующий.
- Если он создан, поместите последний код в репозиторий Github с файлом Docker в корневой каталог.
3️⃣ Настройка действий Github
Для рабочего процесса создания изображений мы используем отличный инструмент от Github под названием Github Actions. Рабочий процесс - это набор определений заданий, которые будут выполняться одновременно, а также последовательно. Задание состоит из нескольких шагов инструкций, которым удаленная система следует для выполнения действия.
В этой службе конвейера всякий раз, когда инициируется действие, для конкретной задачи сборки выделяется временная машинная среда, которая работает в соответствии с инструкцией, указанной в файле рабочего процесса (будет создан позже) .
В нашем случае предполагается, что рабочий процесс в действиях создает образ нашего приложения от нашего имени и отправляет его в Реестр удаленных образов, то есть ECR.
Написание рабочего процесса Github Actions
После настройки репозитория создайте две папки в корне .github / workflow и внутри рабочего процесса, в папке создайте файл TASK_NAME.yml.
Этот TASK_NAME.yml содержит набор инструкций, которые будет выполнять рабочий процесс. Здесь aws.yml - это файл, который нам нужно записать.
Файл .yml должен иметь правильный отступ, форматирование текста и аргументы.
Если вы редактируете или пишете свой собственный .yml, вы должны использовать Онлайн-валидаторы .yml, прежде чем отправлять Код.
Работа команд
- Активировать действие, когда в основной ветке выполняется фиксация.
- Дает имя запуску рабочего процесса.
- JOB-A: создайте удаленную среду / Runner Ubuntu, где рабочий процесс может запускаться и создавать образ. (Подробнее об окружающей среде здесь)
- JOB-B: выполнить действия, указанные на удаленной машине после успешного запуска.
- ЗАДАНИЕ-B / ШАГ-A: войдите на удаленный компьютер через SSH, используя заранее написанный рабочий процесс с помощью официальных действий Github, то есть Оформить заказ.
- JOB-B / STEP-B: настройка AWS CLI / SDK на удаленном хосте и настройка учетных данных для входа в AWS и принятие ролей с использованием предварительно написанного рабочего процесса официальными командами AWS, т. е. Настройка учетных данных AWS. Для доступа к AWS ECR нам необходимо определить пользовательскую роль на более поздних этапах.
ПРИМЕЧАНИЕ ⚠: для доступа к AWS ECR с помощью интерфейса командной строки AWS на удаленном компьютере используется специальная роль, которую мы определим позже. Роль будет иметь KEY ID и ACCESS ID для CLI для входа в систему. Поскольку это учетные данные, мы не можем раскрыть их публично, поэтому необходимо установить их как Переменные среды, которые скрыты и защищены в среде. (Мы настроим переменную среды на более поздних этапах)
7. ЗАДАНИЕ-B / ШАГ-C: Создание образа Docker путем копирования с использованием кода из нашего репозитория (файл Docker), маркировка образа версией и его отправка в реестр эластичных контейнеров (частный ECR). (Будет сделано позже)
Команды для выполнения вышеупомянутых задач записываются в RUN, который будет выполняться в bash удаленной машины.
Уууууу! Очень рад, что ты до сих пор следил. Настройка действия может занять некоторое время, чтобы изучить и попрактиковаться. Для получения дополнительных сведений обратитесь к Официальной документации Github.
4️⃣Создание AWS ECR
- Войдите в свою панель AWS (уровень бесплатного пользования +) и найдите Elastic Container Registry (ECR) в строке поиска службы.
- Выберите "Частный" и нажмите Создать репозиторий.
3. Выберите видимость как частную и дайте имя своему репозиторию после URL-адреса хоста. «Здесь: my-app» и нажмите Создать репозиторий.
5️⃣Создайте пользователя AWS и установите разрешения
Чтобы позволить удаленному компьютеру Github Actions загружать образ сборки в нашу частную ECR, нам необходимо аутентифицировать пользователя, который имеет право на загрузку. Мы всегда должны создавать роль пользователя с ограниченными необходимыми разрешениями, ограниченными только ECR или по мере необходимости.
- В строке поиска службы введите Пользователи, откройте перечисленную Функция IAM и нажмите Добавить роль.
2. Введите имя пользователя: Github-Action-AWL-CLI-Allow-ECR и отметьте Программный доступ, что позволит нам создать пару ключей.
3. Щелкните Далее: Разрешения и на следующем экране выберите «Прикрепить существующие политики напрямую». В политиках поиска найдите «AmazonEC2ContainerRegistryFullAccess» и отметьте его, который даст этой учетной записи пользователя разрешение на запуск частной ECR.
4. Нажмите Далее: Теги, пропустите, нажмите Далее: Обзор и подтвердите Создать пользователя.
5. После создания необходимо сохранить файл учетных данных и скопировать «идентификатор ключа доступа» и «секретный ключ доступа».
6️⃣ Подключение действий Github к AWS ECR
Теперь мы всего в нескольких шагах от тестирования нашей первой сборки CI / CD. Чтобы разрешить доступ к Github нашей новой учетной записи пользователя, мы должны предоставить ей учетные данные.
- Откройте настройки репозитория Github и нажмите «Секреты».
2. Теперь нажмите Новый секрет репозитория, чтобы добавить переменные и их значения.
- Добавьте REPO_NAME в качестве имени и свое имя ECR в качестве значения, my-app
- Аналогичным образом добавьте AWS_ACCESS_KEY_ID в качестве имени и вставьте ранее скопированный идентификатор ключа доступа в качестве значения.
- Аналогичным образом добавьте AWS_SECRET_ACCESS_KEY в качестве имени и вставьте ранее скопированный секретный ключ доступа в качестве значения.
👉 Вы также можете обратиться к ранее загруженному Credentials.csv для получения вышеуказанных значений.
7️⃣ Мониторинг, построение и продвижение
🎉 Мы почти у цели ...
- Зарегистрируйте свой репозиторий, добавив значение IMAGE_TAG в файл AWS.yml.
- После того, как изменения будут внесены в репозиторий, откройте вкладку Действия.
Здесь вы увидите, что новое действие началось, что обозначено желтым цветом, указывающим, что сборка находится в стадии выполнения.
3. Щелкните имя сборки, которая находится в процессе, и откройте текущее развертывание.
4. Здесь вы можете увидеть журналы сборки, где на каждой вкладке отображается текущая задача, а при раскрытии каждой вкладки вы можете увидеть ее журналы.
5. Теперь вам нужно дождаться завершения развертывания и убедиться в отсутствии ошибок. Однако если вы получите ошибку в 5-й задаче, скорее всего, вы допустили ошибку при создании учетной записи пользователя / настройке учетных данных AWS ECR. Убедитесь, что вы проверили журналы заданий, щелкнув по ним.
Если вы получили такое в пятой задаче, возможно, вы ошиблись в настройке создания учетной записи / учетных данных пользователя AWS ECR.
Вот и все! Теперь вы также можете открыть частное репо ECR и проверить финальное изображение с последним тегом внутри него.
Ууууу! Были сделаны! Не стесняйтесь подтолкнуть меня - подтолкнуть меня. Если вы считаете, что это было полезно, подпишитесь на меня на Medium. Если вам понадобится помощь, вы можете связаться со мной через мои страницы в социальных сетях (по ссылке ниже).
Автор: Рохан Гупта
Подробности
- Операции по развитию
- Сборка образа CI / CD S1
Больше контента на plainenglish.io