Учебник. Реализация CI/CD с помощью GitOps (Flux версии 2)

В этом руководстве описано, как настроить решение CI/CD с помощью GitOps с Flux версии 2 и кластерами Kubernetes с поддержкой Azure Arc или Служба Azure Kubernetes (AKS). Вы узнаете, как выполнить следующие задачи с помощью примера приложения Azure для голосования.

  • Создайте кластер Kubernetes с поддержкой Azure Arc или AKS.
  • Подключение репозитории приложения и GitOps в Azure Repos или GitHub.
  • Реализуйте поток CI/CD с помощью Azure Pipelines или GitHub.
  • Подключение Реестр контейнеров Azure Azure DevOps и Kubernetes.
  • Создайте группы переменных среды или секреты.
  • Развертывание сред dev и stage.
  • Тестирование сред приложений.

Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.

Azure Cloud Shell

В Azure есть Azure Cloud Shell, интерактивная оболочка среды, с которой можно работать в браузере. Для работы со службами Azure можно использовать Bash или PowerShell с Cloud Shell. Для запуска кода из этой статьи можно использовать предварительно установленные команды Cloud Shell. Ничего дополнительного в локальной среде устанавливать не нужно.

Начало работы с Azure Cloud Shell

Вариант Пример и ссылка
Нажмите кнопку Попробовать в правом верхнем углу блока кода или команд. При нажатии кнопки Попробовать код или команда не копируется в Cloud Shell автоматически. Screenshot that shows an example of Try It for Azure Cloud Shell.
Чтобы открыть Cloud Shell в браузере, перейдите по адресу https://shell.azure.com или нажмите кнопку Запуск Cloud Shell. Button to launch Azure Cloud Shell.
Нажмите кнопку Cloud Shell в строке меню в правом верхнем углу окна портала Azure. Screenshot that shows the Cloud Shell button in the Azure portal

Чтобы использовать Azure Cloud Shell, выполните следующие действия:

  1. Запустите Cloud Shell.

  2. Нажмите кнопку Копировать в блоке кода (или блоке команд), чтобы скопировать код или команду.

  3. Вставьте код или команду в окно сеанса Cloud Shell, нажав клавиши CTRL+SHIFT+V в Windows и Linux или CMD+SHIFT+V в macOS.

  4. Нажмите клавишу ВВОД, чтобы запустить код или команду.

Необходимые компоненты

  • Выполните инструкции из предыдущего учебника, чтобы узнать, как развернуть GitOps для среды CI/CD.

  • Проанализируйте преимущества и архитектуру этого компонента.

  • Убедитесь, что у вас есть следующее:

  • Установите последние версии этих расширений Kubernetes с поддержкой Azure Arc и Kubernetes Configuration CLI:

    az extension add --name connectedk8s
    az extension add --name k8s-configuration
    
    • Чтобы обновить эти расширения до последних версий, выполните следующие команды:

      az extension update --name connectedk8s
      az extension update --name k8s-configuration
      

Подключение Реестр контейнеров Azure в Kubernetes

Включите кластер Kubernetes для извлечения изображений из Реестр контейнеров Azure. Если это закрыто, требуется проверка подлинности.

Подключение Реестр контейнеров Azure к существующим кластерам AKS

Интеграция существующей Реестр контейнеров Azure с существующими кластерами AKS с помощью следующей команды:

az aks update -n arc-cicd-cluster -g myResourceGroup --attach-acr arc-demo-acr

Создание секрета для извлечения образа

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

Создайте секрет извлечения образа с помощью следующей команды kubectl. Повторите эти действия для пространств имен dev и stage.

kubectl create secret docker-registry <secret-name> \
    --namespace <namespace> \
    --docker-server=<container-registry-name>.azurecr.io \
    --docker-username=<service-principal-ID> \
    --docker-password=<service-principal-password>

Чтобы не задавать imagePullSecret для каждого объекта Pod, рекомендуется добавить imagePullSecret в учетную запись службы в пространствах имен dev и stage. Дополнительные сведения см. в руководстве по Kubernetes.

В зависимости от предпочитаемого оркестратора CI/CD можно выполнить инструкции по Azure DevOps или GitHub.

Реализация CI/CD с помощью Azure DevOps

В этом учебнике предполагается, что вы знакомы с Azure DevOps, Azure Repos, Azure Pipelines и Azure CLI.

Сначала выполните следующие действия:

Импорт репозиториев приложений и GitOps в Azure Repos

Импортируйте репозиторий приложений и репозиторий GitOps в Azure Repos. В этом руководстве используйте следующие репозитории:

  • репозиторий приложений arc-cicd-demo-src

    • URL-адрес: https://github.com/Azure/arc-cicd-demo-src
    • Содержит пример приложения для голосования Azure, которое вы развернете с помощью GitOps.
    • Импорт репозитория с именем arc-cicd-demo-src
  • репозиторий arc-cicd-demo-gitops GitOps

    • URL-адрес: https://github.com/Azure/arc-cicd-demo-gitops
    • Используется в качестве основы для ресурсов кластера, в которых размещено приложение Azure для голосования.
    • Импорт репозитория с именем arc-cicd-demo-gitops

Дополнительные сведения об импорте репозиториев Git.

Примечание.

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

Подключение репозиторий GitOps

Чтобы непрерывно развернуть приложение, подключите репозиторий приложений к кластеру с помощью GitOps. Репозиторий GitOps arc-cicd-demo-gitops содержит базовые ресурсы для получения и запуска приложения в кластере arc-cicd-cluster .

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

Созданное подключение GitOps будет автоматически выполнять следующие действия:

  • синхронизация манифестов в каталоге манифестов;
  • обновление состояния кластера.

Рабочий процесс CI/CD заполняет каталог манифеста дополнительными манифестами для развертывания приложения.

  1. Создайте новое подключение GitOps к недавно импортированному репозиторию arc-cicd-demo-gitops в Azure Repos.

    az k8s-configuration flux create \
       --name cluster-config \
       --cluster-name arc-cicd-cluster \
       --namespace flux-system \
       --resource-group myResourceGroup \
       -u https://dev.azure.com/<Your organization>/<Your project>/_git/arc-cicd-demo-gitops \
       --https-user <Azure Repos username> \
       --https-key <Azure Repos PAT token> \
       --scope cluster \
       --cluster-type connectedClusters \
       --branch master \
       --kustomization name=cluster-config prune=true path=arc-cicd-cluster/manifests
    

    Совет

    Для кластера AKS (а не кластера с поддержкой Arc), используйте -cluster-type managedClusters.

  2. Проверить состояние развертывания можно на портале Azure.

    • В случае успеха в кластере будут созданы пространства имен dev и stage.
    • Вы также можете подтвердить, что на странице портал Azure кластера на вкладке fGitOps создается конфигурацияcluster-config.

Импорт конвейеров CI/CD

Теперь, когда вы синхронизировали подключение GitOps, необходимо импортировать конвейеры CI/CD, создающие манифесты.

Репозиторий приложений содержит папку .pipeline с конвейерами, используемыми для PR, CI и CD. Импортируйте и переименуйте три конвейера, предоставленные в примере репозитория:

Имя файла конвейера Description
.pipelines/az-vote-pr-pipeline.yaml Конвейер PR для приложения с именем arc-cicd-demo-src PR
.pipelines/az-vote-ci-pipeline.yaml Конвейер CI для приложения с именем arc-cicd-demo-src CI
.pipelines/az-vote-cd-pipeline.yaml Конвейер CD для приложения с именем arc-cicd-demo-src CD

Подключение Реестр контейнеров Azure в Azure DevOps

Во время процесса CI вы развертываете контейнеры приложений в реестре. Для начала создайте подключение к службе Azure.

  1. В Azure DevOps перейдите на страницу настроек проекта и откройте страницу Подключения службы. На TFS откройте страницу Службы, воспользовавшись значком Параметры в верхней строке меню.
  2. Выберите + Новое подключение службы и выберите необходимый тип подключения службы.
  3. Заполните поля параметров для подключения службы. Для работы с этим руководством:
    • Присвойте подключению службы имя arc-demo-acr.
    • Выберите myResourceGroup в качестве группы ресурсов.
  4. Выберите Предоставить разрешение на доступ для всех конвейеров.
    • Этот параметр позволяет авторизовать файлы конвейера YAML для подключений служб.
  5. Нажмите кнопку ОК, чтобы создать подключение.

Настройка подключения службы PR

Конвейер CD управляет PR в репозитории GitOps. Для этого требуется подключение к службе. Чтобы настроить это подключение, выполните указанные ниже действия.

  1. В Azure DevOps перейдите на страницу настроек проекта и откройте страницу Подключения службы. На TFS откройте страницу Службы, воспользовавшись значком Параметры в верхней строке меню.
  2. Выберите +Создать подключение к службе и выберите Generic тип.
  3. Заполните поля параметров для подключения службы. Для работы с этим руководством:
    • URL-адрес сервера https://dev.azure.com/<Your organization>/<Your project>/_apis/git/repositories/arc-cicd-demo-gitops
    • Оставьте имя пользователя и пароль пустым.
    • Назовите подключение службы azdo-pr-connection.
  4. Выберите Предоставить разрешение на доступ для всех конвейеров.
    • Этот параметр позволяет авторизовать файлы конвейера YAML для подключений служб.
  5. Нажмите кнопку ОК, чтобы создать подключение.

Установка Подключение GitOps

  1. Добавьте репозиторий GitOps Подключение or в репозитории Helm:

       helm repo add gitops-connector https://azure.github.io/gitops-connector/
    
  2. Установите соединитель в кластер:

       helm upgrade -i gitops-connector gitops-connector/gitops-connector \
          --namespace flux-system \
          --set gitRepositoryType=AZDO \
          --set ciCdOrchestratorType=AZDO \
          --set gitOpsOperatorType=FLUX \
          --set azdoGitOpsRepoName=arc-cicd-demo-gitops \
          --set azdoOrgUrl=https://dev.azure.com/<Your organization>/<Your project> \
          --set gitOpsAppURL=https://dev.azure.com/<Your organization>/<Your project>/_git/arc-cicd-demo-gitops \
          --set orchestratorPAT=<Azure Repos PAT token>
    

    Примечание.

    Azure Repos PAT token должны иметь Build: Read & execute и Code: Full разрешения.

  3. Настройте Flux для отправки уведомлений в соединитель GitOps:

    cat <<EOF | kubectl apply -f -
    apiVersion: notification.toolkit.fluxcd.io/v1beta1
    kind: Alert
    metadata:
      name: gitops-connector
      namespace: flux-system
    spec:
      eventSeverity: info
      eventSources:
      - kind: GitRepository
        name: cluster-config
      - kind: Kustomization
        name: cluster-config-cluster-config 
      providerRef:
        name: gitops-connector
    ---
    apiVersion: notification.toolkit.fluxcd.io/v1beta1
    kind: Provider
    metadata:
      name: gitops-connector
      namespace: flux-system
    spec:
      type: generic
      address: http://gitops-connector:8080/gitopsphase
    EOF
    

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

Создание групп переменных среды

Группа переменных репозитория приложений

Создайте группу переменных с именем az-vote-app-dev. Задайте следующие значения:

Переменная Значение
AZURE_SUBSCRIPTION (ваше подключение к службе Azure, у которого, согласно предыдущим инструкциям в учебнике, должно быть имя arc-demo-acr)
AZ_ACR_NAME Имя Azure ACR, например arc-demo-acr
ENVIRONMENT_NAME Разработка
MANIFESTS_BRANCH master
MANIFESTS_REPO arc-cicd-demo-gitops
ORGANIZATION_NAME Имя организации Azure DevOps
PROJECT_NAME Имя проекта GitOps в Azure DevOps
REPO_URL Полный URL-адрес для репозитория GitOps
SRC_FOLDER azure-vote
TARGET_CLUSTER arc-cicd-cluster
TARGET_NAMESPACE dev
VOTE_APP_TITLE Приложение для голосования
AKS_RESOURCE_GROUP Группа ресурсов AKS. Требуется для автоматического тестирования.
AKS_NAME Имя AKS. Требуется для автоматического тестирования.

Подготовка группы переменных среды

  1. Клонируйте группу переменных az-vote-app-dev.
  2. Измените имя на az-vote-app-stage.
  3. Убедитесь, что для соответствующих переменных имеются следующие значения:
Переменная Значение
ENVIRONMENT_NAME Этап
TARGET_NAMESPACE stage

Теперь все готово для развертывания в средах dev и stage.

Создание сред

В проекте Azure DevOps создайте Dev и Stage среды. Дополнительные сведения см. в разделе "Создание и назначение среды".

Предоставление дополнительных разрешений службе сборки

Конвейер CD использует маркер безопасности работающей сборки для проверки подлинности в репозитории GitOps. Для создания новой ветви, отправки изменений и создания запросов на вытягивание требуются дополнительные разрешения для конвейера.

  1. На главной странице проекта в Azure DevOps перейдите в раздел Project settings.
  2. Выберите Repos/Repositories.
  3. Выберите Security.
  4. <Project Name> Build Service (<Organization Name>) Для и для Project Collection Build Service (<Organization Name>) поля поиска (введите в поле поиска, если оно не отображается), разрешите Contribute, Contribute to pull requestsи Create branch.
  5. Перейдите по адресу Pipelines/Settings.
  6. Параметр выключения Protect access to repositories in YAML pipelines

Дополнительные сведения см. в разделе:

Первое развертывание среды разработки

После создания конвейеров CI и CD запустите конвейер CI, чтобы развернуть приложение в первый раз.

Конвейер CI

Во время первоначального выполнения конвейера CI может произойти ошибка авторизации ресурсов при чтении имени подключения службы.

  1. Убедитесь, что доступ осуществляется именно к переменной AZURE_SUBSCRIPTION.
  2. Авторизуйте использование.
  3. Перезапустите конвейер.

Конвейер CI выполняет следующие действия:

  • Убеждается, что изменение в приложении проходит все автоматические проверки качества для развертывания.
  • Выполняет все дополнительные проверки, которые невозможно выполнить в конвейере PR.
    • В GitOps конвейер публикует также артефакты для фиксации, которая будет развернута конвейером CD.
  • Убеждается, что образ Docker изменен и отправлен новый образ.

Конвейер CD

Во время начального запуска конвейера CD необходимо предоставить конвейеру доступ к репозиторию GitOps. При появлении запроса на получение доступа к ресурсу конвейеру требуется разрешение на просмотр . Затем выберите "Разрешить предоставить разрешение на использование репозитория GitOps" для текущих и будущих запусков конвейера.

При успешном запуске конвейера CI активирует конвейер CD для завершения процесса развертывания. Развертывание в каждой среде выполняется с приращением.

Совет

Если конвейер CD не активируется автоматически, выполните следующие действия.

  1. Убедитесь, что имя соответствует триггеру ветви в .pipelines/az-vote-cd-pipeline.yaml.
    • Оно должно иметь значение arc-cicd-demo-src CI.
  2. Перезапустите конвейер CI.

После создания шаблона и манифеста репозитория GitOps конвейер CD создает фиксацию, отправляет его и создает pr для утверждения.

  1. Найдите pr, созданный конвейером в репозиторий GitOps.

  2. Проверьте изменения в репозитории GitOps. Должно отображаться следующее:

    • Изменение шаблона Helm верхнего уровня.
    • Низкоуровневые манифесты Kubernetes, отражающие базовые изменения в требуемом состоянии. Эти манифесты развертывает Flux.
  3. Если все верно, утвердите и завершите PR.

  4. Через несколько минут Flux подхватит изменения и начнет развертывание.

  5. Отслеживайте состояние фиксации Git на вкладке "Журнал фиксации". После этого succeededконвейер CD запускает автоматическое тестирование.

  6. Перенаправьте порт локально с помощью kubectl и убедитесь, что приложение работает правильно, с помощью этой команды:

    kubectl port-forward -n dev svc/azure-vote-front 8080:80
    
  7. Просмотрите приложение Azure для голосования в браузере по адресу http://localhost:8080/.

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

Настройка утверждений среды

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

Если работа среды разработки прерывается после развертывания, не следует переводить его в последующие среды с помощью утверждений среды.

  1. В проекте Azure DevOps перейдите в среду, которую необходимо защитить.
  2. Перейдите в раздел утверждения и проверки для ресурса.
  3. Нажмите кнопку создания.
  4. Укажите утверждающих и необязательное сообщение.
  5. Щелкните Создать еще раз, чтобы завершить добавление проверки утверждения вручную.

Дополнительные сведения см. в учебнике по определению утверждений и проверок.

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

Внесение изменений в приложение

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

  1. В репозитории arc-cicd-demo-src измените azure-vote/src/azure-vote-front/config_file.cfg файл.

  2. Так как вопрос "Кто вам больше нравится: кошки или собаки?" не получил достаточно голосов, чтобы увеличить их число, измените его на вопрос "Что лучше: вкладки или пространства".

  3. Зафиксируйте изменения в новой ветви, отправьте ее и создайте запрос на вытягивание. Эта последовательность шагов — это типичный поток разработчика, который запускает жизненный цикл CI/CD.

Конвейер проверки PR

Конвейер PR — это первая линия защиты от неисправности при внесении изменений. Обычно проверки качества кода приложения включают анализ кода и статический анализ. С точки зрения GitOps необходимо также обеспечить такой же уровень качества для развертываемой итоговой инфраструктуры.

Файлы Dockerfile и Helm диаграммы Helm приложения могут использовать анализ кода так же, как и приложение.

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

Примечание.

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

Ошибки, обнаруженные во время выполнения конвейера, отображаются в разделе результатов теста среды выполнения. Здесь можно выполнять следующие действия:

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

После завершения выполнения конвейера вы уверены в качестве кода приложения и шаблона, который его развертывает. Теперь можно утвердить и завершить запрос на вытягивание. Перед активацией конвейера CD будет выполнен повторный запуск CI, при котором будут повторно созданы шаблоны и манифесты.

Совет

В реальной среде не забудьте установить политики ветви, которые позволят убедиться, что в PR передаются проверки качества. Дополнительные сведения см. в разделе "Настройка политик ветвей".

Утверждения процессов CD

При успешной активации выполнения конвейера CI запускается конвейер CD для завершения процесса развертывания. В этот раз вам потребуется утвердить конвейер в каждой среде развертывания.

  1. Утвердите развертывание в среде dev.
  2. После создания шаблона и манифеста репозитория GitOps конвейер CD создает фиксацию, отправляет его и создает pr для утверждения.
  3. Проверьте изменения в репозитории GitOps. Должно появиться следующее:
    • Изменение шаблона Helm верхнего уровня.
    • Низкоуровневые манифесты Kubernetes, отражающие базовые изменения в требуемом состоянии.
  4. Если все верно, утвердите и завершите PR.
  5. Дождитесь завершения развертывания.
  6. В рамках базового теста проверки сборки перейдите на страницу приложения и убедитесь, что в приложении для голосования теперь отображается вопрос о том, что лучше: вкладки или пространства.
    • Перенаправьте порт локально с помощью kubectl и убедитесь, что приложение работает правильно, с помощью этой команды: kubectl port-forward -n dev svc/azure-vote-front 8080:80.
    • Просмотрите приложение Azure для голосования в браузере по адресу http://localhost:8080/ и убедитесь, что варианты голосования изменились на вкладки и пространства.
  7. Повторите шаги 1–7 для среды stage.

Развертывание завершено.

Подробный обзор всех шагов и методов, реализованных в рабочих процессах CI/CD, используемых в этом руководстве, см . на схеме потоков Azure DevOps GitOps.

Реализация CI/CD с помощью GitHub

В этом руководстве предполагается знакомство с GitHub, GitHub Actions.

Репозитории приложений и GitOps

Вилку репозитория приложений и репозиторий GitOps. В этом руководстве используйте следующие репозитории:

  • репозиторий приложений arc-cicd-demo-src

    • URL-адрес: https://github.com/Azure/arc-cicd-demo-src
    • Содержит пример приложения Azure для голосования, которое будет развернуто с помощью GitOps.
  • репозиторий arc-cicd-demo-gitops GitOps

    • URL-адрес: https://github.com/Azure/arc-cicd-demo-gitops
    • Используется в качестве основы для ресурсов кластера, в которых размещено приложение Azure для голосования.

Подключение репозиторий GitOps

Чтобы непрерывно развернуть приложение, подключите репозиторий приложений к кластеру с помощью GitOps. Репозиторий GitOps arc-cicd-demo-gitops содержит базовые ресурсы для получения и запуска приложения в кластере arc-cicd-cluster .

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

Созданное подключение GitOps будет автоматически выполнять следующие действия:

  • синхронизация манифестов в каталоге манифестов;
  • обновление состояния кластера.

Рабочий процесс CI/CD заполняет каталог манифеста дополнительными манифестами для развертывания приложения.

  1. Создайте новое подключение GitOps к новому репозиторию arc-cicd-demo-gitops в GitHub.

    az k8s-configuration flux create \
       --name cluster-config \
       --cluster-name arc-cicd-cluster \
       --namespace cluster-config \
       --resource-group myResourceGroup \
       -u  https://github.com/<Your organization>/arc-cicd-demo-gitops.git \
       --https-user <Azure Repos username> \
       --https-key <Azure Repos PAT token> \
       --scope cluster \
       --cluster-type connectedClusters \
       --branch master \
       --kustomization name=cluster-config prune=true path=arc-cicd-cluster/manifests
    
  2. Проверить состояние развертывания можно на портале Azure.

    • В случае успеха в кластере будут созданы пространства имен dev и stage.

Установка Подключение GitOps

  1. Добавьте репозиторий GitOps Подключение or в репозитории Helm:

       helm repo add gitops-connector https://azure.github.io/gitops-connector/
    
  2. Установите соединитель в кластер:

       helm upgrade -i gitops-connector gitops-connector/gitops-connector \
          --namespace flux-system \
          --set gitRepositoryType=GITHUB \
          --set ciCdOrchestratorType=GITHUB \
          --set gitOpsOperatorType=FLUX \
          --set gitHubGitOpsRepoName=arc-cicd-demo-src \
          --set gitHubGitOpsManifestsRepoName=arc-cicd-demo-gitops \
          --set gitHubOrgUrl=https://api.github.com/repos/<Your organization> \
          --set gitOpsAppURL=https://github.com/<Your organization>/arc-cicd-demo-gitops/commit \
          --set orchestratorPAT=<GitHub PAT token>
    
  3. Настройте Flux для отправки уведомлений в соединитель GitOps:

    cat <<EOF | kubectl apply -f -
    apiVersion: notification.toolkit.fluxcd.io/v1beta1
    kind: Alert
    metadata:
      name: gitops-connector
      namespace: flux-system
    spec:
      eventSeverity: info
      eventSources:
      - kind: GitRepository
        name: cluster-config
      - kind: Kustomization
        name: cluster-config-cluster-config
      providerRef:
        name: gitops-connector
    ---
    apiVersion: notification.toolkit.fluxcd.io/v1beta1
    kind: Provider
    metadata:
      name: gitops-connector
      namespace: flux-system
    spec:
      type: generic
      address: http://gitops-connector:8080/gitopsphase
    EOF
    

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

Создавайте секреты GitHub

Создание секретов репозитория GitHub

Секретный Значение
AZURE_CREDENTIALS Учетные данные для Azure в следующем формате {"clientId":"GUID","clientSecret":"GUID","subscriptionId":"GUID","GUID","tenantId":"GUID"}
AZ_ACR_NAME Имя Azure ACR, например arc-demo-acr
MANIFESTS_BRANCH master
MANIFESTS_FOLDER arc-cicd-cluster
MANIFESTS_REPO https://github.com/your-organization/arc-cicd-demo-gitops
VOTE_APP_TITLE Приложение для голосования
AKS_RESOURCE_GROUP Группа ресурсов AKS. Требуется для автоматического тестирования.
AKS_NAME Имя AKS. Требуется для автоматического тестирования.
PAT Токен GitHub PAT с разрешением на pr в репозиторий GitOps

Создание секретов среды GitHub

  1. Создайте az-vote-app-dev среду со следующими секретами:
Секретный Значение
ENVIRONMENT_NAME Разработка
TARGET_NAMESPACE dev
  1. Создайте az-vote-app-stage среду со следующими секретами:
Секретный Значение
ENVIRONMENT_NAME Этап
TARGET_NAMESPACE stage

Теперь все готово для развертывания в средах dev и stage.

Рабочий процесс разработки CI/CD

Чтобы запустить рабочий процесс разработки CI/CD, измените исходный код. В репозитории приложений обновите значения в .azure-vote/src/azure-vote-front/config_file.cfg файле и отправьте изменения в репозиторий.

Рабочий процесс разработки CI/CD:

  • Убеждается, что изменение в приложении проходит все автоматические проверки качества для развертывания.
  • Выполняет все дополнительные проверки, которые невозможно выполнить в конвейере PR.
  • Убеждается, что образ Docker изменен и отправлен новый образ.
  • Публикует артефакты (теги изображений Docker, шаблоны манифестов, Utils), которые будут использоваться на следующих этапах CD.
  • Развертывает приложение в среде разработки.
    • Создает манифесты в репозитории GitOps.
    • Создает pr в репозиторий GitOps для утверждения.
  1. Найдите pr, созданный конвейером в репозиторий GitOps.

  2. Проверьте изменения в репозитории GitOps. Должно отображаться следующее:

    • Изменение шаблона Helm верхнего уровня.
    • Низкоуровневые манифесты Kubernetes, отражающие базовые изменения в требуемом состоянии. Эти манифесты развертывает Flux.
  3. Если все верно, утвердите и завершите PR.

  4. Через несколько минут Flux подхватит изменения и начнет развертывание.

  5. Отслеживайте состояние фиксации Git на вкладке "Журнал фиксации". После этого succeededрабочий CD Stage процесс начнется.

  6. Перенаправьте порт локально с помощью kubectl и убедитесь, что приложение работает правильно, с помощью этой команды:

    kubectl port-forward -n dev svc/azure-vote-front 8080:80
    
  7. Просмотрите приложение Azure для голосования в браузере по адресу http://localhost:8080/.

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

Рабочий процесс этапа CD

Рабочий процесс этапа CD запускается автоматически после успешного развертывания приложения в среде разработки и уведомляет действия GitHub через GitOps Подключение or.

Рабочий процесс этапа CD:

  • Запуск тестов дыма приложений в среде разработки
  • Развертывает приложение в среде Stage.
    • Создает манифесты в репозитории GitOps
    • Создает pr в репозиторий GitOps для утверждения

После объединения манифестов в среду Stage и Flux успешно применяет все изменения, состояние фиксации Git обновляется в репозитории GitOps. Развертывание завершено.

Подробный обзор всех шагов и методов, реализованных в рабочих процессах CI/CD, используемых в этом руководстве, см. на схеме потока GitHub GitOps.

Очистка ресурсов

Если вы не собираетесь использовать это приложение в дальнейшем, удалите все его ресурсы, выполнив следующие действия.

  1. Удалите подключение в конфигурации GitOps для Azure Arc.

    az k8s-configuration flux delete \
          --name cluster-config \
          --cluster-name arc-cicd-cluster \
          --resource-group myResourceGroup \
          -t connectedClusters --yes
    
  2. Удаление Подключение GitOps:

    helm uninstall gitops-connector -n flux-system
    kubectl delete alerts.notification.toolkit.fluxcd.io gitops-connector -n flux-system
    kubectl delete providers.notification.toolkit.fluxcd.io  gitops-connector -n flux-system
    

Следующие шаги

Из этого учебника вы узнали, как настроить полный рабочий процесс CI/CD, который реализует DevOps от разработки приложений до его развертывания. Изменения в приложении автоматически активируют проверку и развертывание, которые контролируются утверждениями вручную.

Перейдите к нашей концептуальной статье, чтобы узнать больше о GitOps и конфигурациях в Kubernetes с поддержкой Azure Arc.