Администратор или разработчик Code Stream могут использовать Code Stream и решение VMware Tanzu Kubernetes Grid Integrated Edition (ранее известное как VMware Enterprise PKS) для автоматизации развертывания программных приложений в кластере Kubernetes. В этом примере упоминаются другие методы, которые также можно использовать для автоматизации выпуска приложения.

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

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

При использовании конечной точки API-интерфейса Kubernetes в рабочей области конвейера Code Stream создает необходимые для выполнения задачи непрерывной интеграции или настраиваемой задачи ресурсы Kubernetes, такие как ConfigMap, Secret и Pod. Code Stream обменивается данными с контейнером с помощью порта узла.

Чтобы предоставить общий доступ к данным для всех циклов выполнения конвейера, необходимо указать запрос постоянного тома. Code Stream подключит запрос постоянного тома к контейнеру, чтобы обеспечить хранение данных и его использование для последующих циклов выполнения конвейера.

Рабочая область конвейера Code Stream поддерживает Docker и Kubernetes для выполнения задач непрерывной интеграции и настраиваемых задач.

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

В рабочем процессе, который развертывает приложение в кластере Kubernetes, используются возможности Jenkins, Code Stream, GitHub, триггера Git и Kubernetes.

Чтобы конвейер мог выполнить сборку, тестирование, публикацию и развертывание приложения, должны быть доступны средства разработки, экземпляры развертывания и файл YAML. Конвейер выполнит развертывание приложения в экземплярах разработки и производства кластеров Kubernetes.

Данный рабочий процесс помогает управлять публикацией приложения в кластере Kubernetes.

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

  • Вместо сборки приложения с помощью Jenkins можно использовать встроенные возможности сборки Code Stream и узел сборки Docker.
  • Вместо развертывания приложения в кластере Kubernetes можно развернуть его в кластере Amazon Web Services (AWS).

Дополнительные сведения об использовании встроенных средств сборки Code Stream и узла Docker см. в разделе

Необходимые условия

  • Убедитесь, что развертываемый код приложения находится в работоспособном репозитории GitHub.
  • Убедитесь в наличии работоспособного экземпляра Jenkins.
  • Убедитесь в наличии работоспособного почтового сервера.
  • В Code Stream создайте конечную точку службы электронной почты для подключения к почтовому серверу.
  • Настройте два кластера Kubernetes (для разработки и производственной среды) в службе Amazon Web Services (AWS), в которые конвейер будет развертывать приложение.
  • Убедитесь, что репозиторий GitHub содержит либо код YAML для конвейера, либо файл YAML, в котором определены метаданные и характеристики среды.

Процедура

  1. В Code Stream нажмите Конечные точки > Создать конечную точку и создайте конечную точку Jenkins, которая будет использоваться в конвейере для извлечения кода из репозитория GitHub.
  2. Для создания конечных точек Kubernetes нажмите Новая конечная точка.
    1. а. Создайте конечную точку для кластера разработки Kubernetes.
    2. б. Создайте конечную точку для производственного кластера Kubernetes.
      URL-адрес кластера Kubernetes может включать или не включать в себя номер порта.
      Например:
      https://10.111.222.333:6443
      https://api.kubernetesserver.fa2c1d78-9f00-4e30-8268-4ab81862080d.k8s-user.com
  3. Создайте конвейер, выполняющий развертывание контейнера приложения, например Wordpress, в кластере разработки Kubernetes и задайте входные свойства конвейера.
    1. а. Чтобы конвейер мог определять события отправки кода в GitHub, которые будут запускать его работу, щелкните вкладку Входные данные в конвейере и выберите Автоматически вставлять свойства.
    2. б. Добавьте свойство с именем GIT_COMMIT_ID и щелкните звездочку рядом с ним.
      При выполнении конвейера будет отображаться идентификатор отправки кода, возвращенный триггером Git.
    В конвейере, использующем Jenkins и Kubernetes, на вкладке Входные данные отображаются входные свойства Git.
  4. Добавьте уведомления, чтобы настроить отправку сообщений электронной почты при успешном или неудачном завершении работы конвейера.
    1. а. В конвейере щелкните вкладку Уведомления и нажмите Добавить.
    2. б. Чтобы настроить отправку уведомления по электронной почте при завершении работы конвейера, выберите пункт Электронная почта, а затем Завершение. Затем выберите почтовый сервер, введите адреса электронной почты и нажмите Сохранить.
    3. в. Чтобы настроить отправку уведомления по электронной почте при сбое конвейера, выберите пункт Сбой и нажмите Сохранить.
    При добавлении уведомления по электронной почте необходимо выбрать одно из состояний конвейера, почтовый сервер и получателей.
  5. Добавьте в конвейер этап разработки, а затем задачи по сборке, тестированию и публикации приложения. Затем проверьте каждую задачу.
    1. а. Чтобы выполнить сборку приложения, добавьте задачу Jenkins, в которой используется конечная точка Jenkins и запускается задание сборки с сервера Jenkins. Затем, чтобы конвейер мог извлечь код, укажите ветвь Git в следующем формате: ${input.GIT_BRANCH_NAME}
    2. б. Чтобы выполнить тестирование приложения, добавьте задачу Jenkins, использующую ту же конечную точку Jenkins и запускающую задание тестирования с сервера Jenkins. Затем введите ту же ветвь Git.
    3. в. Чтобы выполнить публикацию приложения, добавьте задачу Jenkins, использующую ту же конечную точку Jenkins и запускающую задание публикации с сервера Jenkins. Затем введите ту же ветвь Git.
    В конвейере, использующем Jenkins и Kubernetes, в задаче Jenkins, которая выполняет сборку приложения, используется конечная точка Jenkins, задание Jenkins и имя ветви.
  6. Добавьте в конвейер этап развертывания, затем добавьте в этот этап две задачи: запрос на утверждение развертывания приложения и выполнение развертывания в кластере Kubernetes. Затем проверьте каждую задачу.
    1. а. Чтобы настроить отправку запроса на утверждение развертывания приложения, добавьте задачу «Пользовательская операция», укажите адреса электронной почты утверждающих лиц и введите текст сообщения. Затем установите флажок Отправить по электронной почте.
    2. б. Чтобы выполнить развертывание приложения, добавьте задачу Kubernetes. Затем в свойствах задачи Kubernetes выберите кластер разработки Kubernetes, выберите действие Создать и укажите источник полезных данных Локальное определение. Затем выберите локальный файл YAML.
  7. Добавьте веб-перехватчик Git, который позволит Code Stream использовать триггер Git, запускающий работу конвейера после отправки кода разработчиками.
    В веб-перехватчике Git, который запускает конвейер Kubernetes, необходимо указать ветвь и секретный маркер.
  8. Чтобы проверить работу конвейера, перейдите в репозиторий GitHub, обновите файл YAML приложения и сохраните изменения.
    1. а. Убедитесь, что отправка зафиксирована в Code Stream.
    1. а. Щелкните Триггеры > Git > Действие.
    2. б. Найдите триггер конвейера.
    3. в. Выберите параметр Панели управления > Панели управления конвейерами.
    4. г. На панели управления конвейером найдите GIT_COMMIT_ID в области последних успешных изменений.
  9. Проверьте код в конвейере и убедитесь, что изменения отображаются.

Результаты

Поздравляем! Автоматизация развертывания программного приложения в кластере Kubernetes завершена.

Пример: Пример кода YAML конвейера, выполняющего развертывание приложения в кластере Kubernetes

В конвейерах, аналогичных приведенному в данному примере, код YAML выглядит следующим образом:

apiVersion: v1
kind: Namespace
metadata:
  name: ${input.GIT_BRANCH_NAME}
  namespace: ${input.GIT_BRANCH_NAME}
---  
apiVersion: v1
data:
  .dockercfg: eyJzeW1waG9ueS10YW5nby1iZXRhMi5qZnJvZy5pbyI6eyJ1c2VybmFtZSI6InRhbmdvLWJldGEyIiwicGFzc3dvcmQiOiJhRGstcmVOLW1UQi1IejciLCJlbWFpbCI6InRhbmdvLWJldGEyQHZtd2FyZS5jb20iLCJhdXRoIjoiZEdGdVoyOHRZbVYwWVRJNllVUnJMWEpsVGkxdFZFSXRTSG8zIn19
kind: Secret
metadata:
  name: jfrog
  namespace: ${input.GIT_BRANCH_NAME}
type: kubernetes.io/dockercfg
---   
apiVersion: v1
kind: Service
metadata:
  name: codestream
  namespace: ${input.GIT_BRANCH_NAME}
  labels:
    app: codestream
spec:
  ports:
    - port: 80
  selector:
    app: codestream
    tier: frontend
  type: LoadBalancer 
---
apiVersion: extensions/v1
kind: Deployment
metadata:
  name: codestream
  namespace: ${input.GIT_BRANCH_NAME}
  labels:
    app: codestream
spec:
  selector:
    matchLabels:
      app: codestream
      tier: frontend
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: codestream
        tier: frontend
    spec:
      containers:
      - name: codestream
        image: cas.jfrog.io/codestream:${input.GIT_BRANCH_NAME}-${Dev.PublishApp.output.jobId}
        ports:
        - containerPort: 80
          name: codestream
      imagePullSecrets:
      - name: jfrog
      

Дальнейшие действия

Чтобы провести развертывание программного приложения в производственном кластере Kubernetes, выполните приведенные выше шаги снова, на этот раз выбрав производственный кластер.

Дополнительные сведения об интеграции Jenkins и Code Stream см. в разделе Интеграция Jenkins со службой Code Stream.