Как создать облачные нативные конвейеры CI/CD с помощью Tekton

Для современных приложений, требующих CI/CD (непрерывной интеграции и непрерывной доставки/непрерывного развертывания), как непрерывно доставлять изменения кода из исходного кода в продакшн на Kubernetes? В этом руководстве вы узнаете, как использовать Tekton для клонирования репозитория, создания образа и отправки его в Docker Hub. Давайте начнем работу с Tekton, облачным CI/CD-решением с открытым исходным кодом, с создания реального CI/CD-конвейера.

Введение

Процесс CI/CD является основополагающим для объединения всех частей вашего кода для проверки, тестирования и сборки перед выпуском в производство или на любой другой стадии. Tekton, первоначально созданный разработчиками Google из проекта Knative, привносит в вашу облачную нативную среду многократно используемые и декларативные компоненты CI/CD через Kubernetes CRD. Это поможет вам больше сосредоточиться на разработке, не беспокоясь о сложностях базовых деталей реализации.

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

-Step: Самый базовый компонент Tekton, шаг — это образ контейнера Kubernetes, который выполняется на определенном инструменте или входе (например, запись или чтение файла).

-Задача: Последовательность шагов для выполнения одной функции, которую можно использовать повторно (например, клонирование хранилища).

-Трубопровод: Серия задач, выполняемых последовательно или параллельно (например, клонирование хранилища, сборка образа и отправка его в реестр контейнеров).

Поскольку эти компоненты настраиваются как Custom Resource Definitions на Kubernetes, вы можете создавать конвейеры многократного использования, а Tekton также совместим с Jenkins, Skaffold, Knative и другими инструментами CI/CD. Давайте рассмотрим, как начать работу с Tekton, и приступим к созданию нашего конвейера.

Начало работы с Tekton

Для начала давайте установим Tekton и все дополнительные компоненты. Мы будем использовать Tekton для классического процесса сборки контейнеров, где конвейер обычно выглядит так, как показано на рисунке ниже. Конечно, всегда есть дополнительные шаги, такие как тестирование, упаковка и развертывание на нашем кластере, но для простоты наш конвейер будет клонировать, собирать образ и отправлять образ в реестр контейнеров, такой как Docker Hub или Quay.io.

Мы будем работать с задачами из Tekton Hub, создавать конфигурации для нашего Docker Hub и ServiceAccount, а также использовать PipelineRun для инстанцирования нашего конечного конвейера. Давайте начнем!

Установка Tekton

Просто используйте одну команду kubectl для установки последней версии Tekton Pipelines.

$ kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
Вход в полноэкранный режим Выйти из полноэкранного режима

Вам также потребуется установить tkn CLI для взаимодействия с Tekton; инструкции можно найти в документации.

Кроме того, установите приборную панель Tekton, чтобы визуализировать наш трубопровод в графическом интерфейсе с помощью Tekton Dashboard.

$ kubectl apply --filename https://storage.googleapis.com/tekton-releases/dashboard/latest/tekton-dashboard-release.yaml
Вход в полноэкранный режим Выход из полноэкранного режима

Приборная панель Tekton по умолчанию не открыта за пределами кластера, но вы можете перенаправить ее с помощью следующей команды и получить доступ к ней по адресу localhost:9097.

$ kubectl port-forward -n tekton-pipelines service/tekton-dashboard 9097:9097
Вход в полноэкранный режим Выход из полноэкранного режима

Создание задач Tekton

Задачи, которые нам понадобятся для создания нашего конкретного трубопровода, уже доступны в Tekton Hub, центральном портале для поиска и совместного использования ресурсов, задач и трубопроводов Tekton. Мы будем использовать задачи git-clone и buildah для клонирования нашего репозитория, создания образа и отправки образа в реестр контейнеров. Не стесняйтесь ознакомиться с деталями этих задач и их исходным кодом.

Сначала установим эти задачи с помощью tkn hub install.

$ tkn hub install task git-clone && tkn hub install task buildah

Task git-clone(0.7) installed in default namespace
Task buildah(0.4) installed in default namespace
Вход в полноэкранный режим Выйдите из полноэкранного режима

Теперь давайте подтвердим, что задачи были успешно установлены с помощью tkn task list.

$ tkn task list

NAME                 DESCRIPTION              AGE
git-clone            These Tasks are Git...   2 minutes ago
buildah              Buildah task builds...   2 minutes ago
Войти в полноэкранный режим Выйти из полноэкранного режима

Секреты проталкивания образа

Чтобы отправить образ в Docker Hub, вам необходимо предоставить свои учетные данные, что мы можем сделать, создав файл secret.yaml со следующим содержимым. Обязательно замените имя пользователя и пароль на ваши учетные данные Docker Hub.

apiVersion: v1
kind: Secret
metadata:
  name: docker-secret
  annotations:
    tekton.dev/docker-0: https://index.docker.io/
type: kubernetes.io/basic-auth
stringData:
    username: username
    password: password
--- 
apiVersion: v1
kind: ServiceAccount
metadata:
  name: docker-login
secrets:
  - name: docker-secret
Вход в полноэкранный режим Выйти из полноэкранного режима

Это создаст Secret и ServiceAccount, которые теперь можно использовать при выполнении задач Tekton, а применить их мы можем с помощью kubectl.

$ kubectl apply -f secret.yaml

secret/docker-secret created

serviceaccount/docker-login created
Вход в полноэкранный режим Выход из полноэкранного режима

Создание конвейера

Отлично! Вы готовы к созданию конвейера с помощью двух задач git-clone и buildah. Создайте файл с именем pipeline.yaml со следующим содержимым.

apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
  name: example-pipeline
spec:
  params:
    - name: REPO
    - name: IMAGE
    - name: TAG
  workspaces:
    - name: workspace
  tasks:
    - name: fetch-repository
      taskRef:
        name: git-clone
      workspaces:
        - name: output
          workspace: workspace
      params:
        - name: url
          value: $(params.REPO)
        - name: deleteExisting
          value: "true"
    - name: build-push-image
      taskRef:
        name: buildah
      runAfter:
        - fetch-repository
      workspaces:
        - name: source
          workspace: workspace
      params:
        - name: IMAGE
          value: "$(params.IMAGE):$(params.TAG)"
        - name: FORMAT
          value: "docker"
Войти в полноэкранный режим Выход из полноэкранного режима

Этот конвейер включает две задачи, которые мы недавно установили. Во-первых, задача git-clone для клонирования нашего репозитория, используя url, который мы укажем в PipelineRun. Затем мы создаем и проталкиваем образ с помощью задачи buildah, используя образ и тег, которые мы также укажем в PipelineRun для инстанцирования нашего конвейера.

Чтобы применить эту конфигурацию Pipeline к нашему кластеру, достаточно воспользоваться стандартной командой kubectl.

$ kubectl apply -f pipeline.yaml

pipeline.tekton.dev/example-pipeline created
Войти в полноэкранный режим Выход из полноэкранного режима

Создание PipelineRun

Чтобы запустить конвейер, мы можем создать PipelineRun и указать конкретные значения для хранилища, образа и ссылки на конвейер. Создайте файл с именем pipelinerun.yaml со следующим содержанием. Поскольку конвейеры Tekton являются многоразовыми, вы можете использовать любой репозиторий, который вам нравится, и не забудьте изменить имя пользователя Docker Hub.

apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
  name: tutorial-pipeline-run
spec:
  serviceAccountName: docker-login
  pipelineRef:
    name: example-pipeline
  params:
    - name: REPO
      value: "https://github.com/cedricclyburn/tekton-tutorial"
    - name: IMAGE
      value: "docker.io/cedricclyburn/tekton-tutorial"
    - name: TAG
      value: latest
  workspaces:
    - name: workspace
      volumeClaimTemplate:
        spec:
          accessModes:
            - ReadWriteOnce
          resources:
            requests:
              storage: 10Gi
Вход в полноэкранный режим Выход из полноэкранного режима

Теперь давайте применим файл и начнем развертывание с помощью команды kubectl.

$ kubectl apply -f pipelinerun.yaml

pipelinerun.tekton.dev/tutorial-pipeline-run created
Войти в полноэкранный режим Выход из полноэкранного режима

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

$ tkn pipeline logs -f

[1/3] STEP 1/5: FROM node:16-alpine AS deps
Resolved "node" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull docker.io/library/node:16-alpine...
Войти в полноэкранный режим Выйти из полноэкранного режима

Проверка результатов

Фантастика! Мы успешно использовали PipelineRun для запуска нашего трубопровода, поэтому пришло время проверить, все ли сработало должным образом. Сначала давайте воспользуемся панелью Tekton Dashboard, чтобы просмотреть журналы и убедиться, что PipelineRun прошел успешно. На приборной панели перейдите на вкладку _PipelineRuns _ для просмотра запусков трубопроводов и выберите созданный нами tutorial-pipeline-run.

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

Наконец, поскольку все, что мы видели, выглядит хорошо из журналов конвейера с помощью tkn pipeline logs и из Tekton Dashboard, давайте запустим образ с помощью Docker. 

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

$ docker run -p 3000:3000 docker.io/cedricclyburn/tekton-tutorial
Войти в полноэкранный режим Выйти из полноэкранного режима

Зайдя на localhost:3000, вы увидите, что пример приложения Next.js работает следующим образом. Поздравляем!

Заключение

Из этого руководства вы узнали, как работать с Tekton для создания облачных нативных конвейеров CI/CD. Вы также смогли создать свой собственный конвейер для клонирования репозитория, создания образа и отправки этого образа в Docker Hub, используя задачи из Tekton Hub. Там есть еще много многоразовых задач и конвейеров, но я также рекомендую вам узнать о триггерах Tekton Triggers (автоматический запуск конвейера), других проектах Фонда непрерывной доставки и документации Tekton для получения дополнительной информации!

memenetes
@memenetes
Когда CI/CD-конвейер на Tekton наконец-то станет зеленым
16:01 PM — 18 Jul 2022

Не стесняйтесь следовать за мной в Twitter @cedricclyburn для получения новых уроков по cloud-native!

Оцените статью
devanswers.ru
Добавить комментарий