Рубрики
Uncategorized

Непрерывная интеграция с действиями GitHub

Непрерывная интеграция дешевая, но не интегрируя непрерывно может быть очень дорогим. Noaddays, … с меткой dotnet, devops, github, docker.

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

Понимание Действия GitHub

Действия GitHub — это рабочие процессы, управляемые событиями, которые приходят прямо в вашем репозитории кода. По словам, приводимым в действие, это означает, что вы можете выполнить серию команд, когда происходит определенное событие. Например, каждый раз, когда кто-то создает запрос на тягу на репозиторий, вы можете автоматически запустить команду, которая выполняет скрипт тестирования программного обеспечения. Помимо триггера событий, процедура также может быть запланирована.

Процедуры определены в файле yaml под названием рабочий процесс . Рабочий процесс состоит из одного или нескольких Работа которые могут быть выполнены одновременно или хронологически. Каждая работа затем использует Шаги контролировать заказ, в котором Действия запускаются. Эти действия являются командами, которые автоматизируют тестирование программного обеспечения, создания и т. Д.

Событие является отправной точкой в этом цикле. Это действие, которое вызывает рабочие процессы, и он может возникнуть из GitHub, когда кто-то создает проблему, запросить запрос или объединить изменения в конкретную ветку. Кроме того, можно использовать Repository Dispatch WebHook и запускает рабочий процесс, когда происходит внешнее событие.

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

Каждый шаг в работе представляет собой индивидуальную задачу, которая может быть командой Shell или действием. Поскольку каждая работа выполнена на том же беге, он позволяет шагам для обмена данными друг с другом. Например, первый шаг задания может создавать контейнерное изображение, а затем на втором этапе то, что изображение можно нажать в реестр контейнера. Данные также могут быть разделены между заданиями, сохраняя данные рабочего процесса в качестве артефактов. Артефакты позволяют сохранять данные после завершения работы, и поделиться этим данным с другой работой в том же рабочем процессе. Чтобы использовать данные в другом задании, вам просто нужно скачать артефакты. Некоторые из общих артефактов являются выходы журнала, результаты теста, двоичные или сжатые файлы и результаты охвата кода.

За официальную документацию, действия являются автономными командами, которые объединены на шаги для создания задания. Действия — самый маленький портативный строительный блок рабочего процесса, и вы можете создавать свои собственные действия или использовать действия, созданные сообществом GitHub. Чтобы использовать действие в рабочем процессе, вы должны включить его в качестве шага.

Еще одна важная концепция, которую мы должны упомянуть, являются бегуны Отказ По сути, бегун — это сервер с помощью Github Actions Runner приложение, установленное на нем. Бегун прослушивает доступные задания, запускает одну работу одновременно и сообщает о прогрессе, журналах и результаты обратно в GitHub. Хостеренные бегуны, предоставляемые GitHub, основаны на Ubuntu, Windows и MacOS, а каждая работа в рабочем процессе работает в свежей виртуальной среде. Король рабочего процесса Вы можете установить дополнительные инструменты и двоичные файлы на бегун. Если по какой-то причине вам нужна другая операционная система или требуется определенная конфигурация, вы можете использовать самостоятельные бегуны, где у вас есть полный контроль над всей окружающей средой. Тем не менее, GitHub не рекомендует самих размещенных бегунов для публичных репозиторий. Бегуны Windows и Ubuntu размещаются в Azure и впоследствии имеют одинаковые диапазоны IP-адресов, что и лазурные центры. Бегуны MacOS размещены в собственном облаке MacOS Github. Каждый бегун Windows или Ubuntu имеет 2-ядер CPU, 7 ГБ оперативной памяти и 14 ГБ дискового пространства SSD. У MacOS Runners имеют 3-ядерный процессор, 14 ГБ памяти RAM и 14 ГБ SSD дискового пространства. С точки зрения ценообразования, в свободном плане вы имеете 2000 минут автоматизации в месяц, которые достаточно для обучения и некоторые меньшие проекты. Вы можете найти больше о ценах на планы по ценам на следующем ссылка Отказ

Демонстрация

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

Исходный код можно найти здесь Отказ Как видите, рабочий процесс помещен внутри .Github/Workflows каталог как файл yaml.

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

name: CI master

on:
  push:
    branches: [master]
  pull_request:
    branches: [master]

Далее workflow_dispatch Раздел позволяет нам запустить рабочий процесс вручную, используя вкладку Действия на GitHub или CLI CLI.

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

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - name: Test the solution 
        run: dotnet test

Первый атрибут — это имя задания, а затем бежит на Параметр, который указывает инфраструктурную среду, в этом случае Ubuntu-Neighle. Под Шаги Сегмент мы определяем фактические задачи. Dotnet Test Команда используется для выполнения модульных тестов в данном решении. Dotnet Test Команда создает решение и запускает приложение для тестового хоста для каждого тестового проекта в решении. Тестовый хост выполняет тесты в данном проекте с использованием тестовой структуры, например: MSTEST, NUNIT или XUNIT и сообщает об успехе или сбое каждого теста. Если все тесты успешны, тестовый бегун возвращается 0 в качестве кода выхода. В противном случае, если какой-либо тест не удается, он возвращается 1, и рабочий процесс будет остановлен.

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

  build:
    needs: test
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - name: Build container image
        run: |
          docker build -f ./dotnet-ci/Dockerfile -t ${{secrets.registry}}/${{github.repository}}:${{ github.run_number }} .
      - name: Container registry login
        uses: docker/login-action@v1.10.0
        with:
          registry: ${{secrets.registry}}
          username: ${{secrets.username}}
          password: ${{secrets.password}}

      - name: Push image to container registry
        run: |
          docker push ${{secrets.registry}}/${{github.repository}}:${{ github.run_number }}

Атрибут нужно сделаю эту работу, чтобы ждать Тест закончить и только если Тест Добиться успеха, рабочий процесс начнет построить Работа на новом бегуне.

Рабочий процесс нуждается в доступе к некоторым конфиденциальным информациям, таких как учетные данные входа в систему, и мы определенно не хотим хранить его как простой текст. Вот где находятся секреты, они определяются на уровне репозитория и могут быть созданы только владельцем репозитория. Секретное значение не видна, они могут быть изменены только или удалены. Для реестра контейнеров мы будем использовать Пакеты GitHub и аутентифицироваться с именем пользователя и PAT (личный токен доступа) в качестве пароля. Таким образом, у нас будут все активы в одном месте, наш код репозитория.

Каждое изображение контейнера необходимо иметь тег, и мы хотим, чтобы это значение было уникальным. К счастью, GitHub предоставляет нам количество переменных среды, и мы решили пометить изображение с Run_Number Отказ Это уникальный номер для каждого пробега определенного рабочего процесса в репозитории. Этот номер начинается в 1 для первого запуска рабочего процесса, а также приращения с каждым новым запуском. Этот номер не изменяется, если вы повторно запустите работу рабочего процесса. Альтернативные варианты будут помещать изображение с фиксацией SHA, run_id. или использовать семантическую версию, но для простоты мы выбрали Run_Number Отказ

Теперь мы можем взглянуть на веб-консоль GitHub под действиями действий.

Как видите, под резюме у нас есть хороший обзор всех рабочих мест в нашем рабочим процессе и и их взаимосвязью.

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

Вывод

С тех пор, как Microsoft приобрел GitHub, они добавляли новые функции и функциональные возможности, которые сделали GitHub не только отличным инструментом управления исходным управлением, но и очень зрелой платформой DevOps. Действия GitHub очень практичны и просты в использовании, что делает их отличным выбором для меньших проектов и начать работу с непрерывной интеграцией. Однако для проектов в крупном масштабе они все еще не такие мощные, как лазурные трубопроводы или некоторые другие корпоративные решения от облачных провайдеров.

Оригинал: «https://dev.to/cvitaa11/continuous-integration-with-github-actions-2mo5»