Для современных приложений, требующих 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!