Публичное облако Oracle охватывает технологии с открытым исходным кодом и сообщества, которые их поддерживают. С сильным переходом на собственные облачные технологии и методологии DevOps мы узнали от многих организаций, что они хотят высокопроизводительного и высоконадежного облака, которое позволяет избежать блокировки в облаке и позволяет им запускать то, что они хотят, независимо от того, построен облачным провайдером. Запуск GitLab в облачной инфраструктуре Oracle дает клиентам возможность выбрать платформу DevOps в качестве одного приложения на весь жизненный цикл DevOps.
GitLab CI / CD и Oracle Cloud
GitLab — это полная платформа DevOps с открытым исходным кодом, поставляемая в виде одного приложения. Это в корне меняет способ совместной работы команд Dev, Security и Ops и создания программного обеспечения. Когда вы объединяете функции автоматического DevOps конвейеров GitLab CI / CD с Oracle Cloud Infrastructure Container Engine для Kubernetes , вы получаете надежную и масштабируемую интегрированную платформу рабочих процессов для создания, тестирования, развертывания и мониторинга вашего кода в облаке.
Контейнерный движок для Kubernetes — это сервис, который помогает развертывать, управлять и масштабировать кластеры Kubernetes в облаке. С его помощью организации могут создавать динамические контейнерные приложения, объединяя Kubernetes со службами, работающими на их облачной инфраструктуре Oracle.
Рабочий процесс CI / CD
Непрерывная интеграция (CI) интегрирует код вашей команды в общий репозиторий. Разработчики используют запрос на извлечение для совместного использования нового кода, и этот запрос запускает конвейер для построения, тестирования и проверки кода до его слияния в хранилище. CI помогает вам обнаруживать ошибки на ранних этапах цикла разработки, уменьшает проблемы интеграции и позволяет избежать сложных проблем.
Непрерывная доставка (CD) гарантирует, что проверенный CI код будет доставлен в ваше приложение через структурированный конвейер развертывания. Компакт-диск гарантирует, что каждое изменение может быть выпущено, снижает риск для каждого выпуска, обеспечивает большую ценность и позволяет быстрее и чаще получать отзывы от клиентов.
Вместе CI и CD позволяют вашей команде строить быстро и эффективно, и они имеют решающее значение для обеспечения оптимизированной практики разработки.
Начиная
Во-первых, давайте рассмотрим компоненты, необходимые для построения и развертывания сервисов GitLab CI / CD в Container Engine для Kubernetes. Чтобы установить GitLab на Container Engine для Kubernetes , у вас должен быть настольный компьютер (облачная виртуальная машина или локальная среда) с установленной и настроенной командной строкой Oracle Cloud Infrastructure (oci) и kubectl .
Затем для продолжения требуются следующие компоненты:
- Kubernetes версия 1.14.8 или более поздняя
- Helm / Tiller версии 2.14 или новее
- CIDR и порты подсетей для модулей Kubernetes и рабочих узлов, открытых в списке безопасности локальной виртуальной облачной сети (VCN)
Процесс развертывания
Чтобы развернуть GitLab в Oracle Container Engine для Kubernetes, ознакомьтесь с Руководством по развертыванию и выполните следующие действия.
-
Запустите следующие команды. Измените example.com на свой собственный DNS. Если вы хотите, чтобы Helm устанавливал ресурсы GitLab в другом пространстве имен, добавьте —namespace NEW_NAME_SPACE после параметра —install.
Оболочка
xxxxxxxxxx
1
1
helm repo add gitlab https://charts.gitlab.io/
2
helm repo update
3
helm upgrade --install gitlab gitlab/gitlab --set externalUrl=http://gitlab.example.com \
4
--timeout 600s \
5
--set global.hosts.domain=example.com \
6
--set certmanager-issuer.email=me@example.com
-
После завершения процесса подготовки выполните следующую команду, чтобы определить внешний IP-адрес, назначенный GitLab:
Оболочка
xxxxxxxxxx
1
1
kubectl get services gitlab-nginx-ingress-controller
-
Укажите запись DNS с шага 1 (например, gitlab.example.com) на GitLab. Используйте собственную службу управления зонами DNS для обновления записи DNS. В противном случае вы получите сообщение об ошибке «default backend — 404» на шаге 5. Если вы получите сообщение об ошибке 404, исправьте запись DNS и заново создайте модуль gitlab-runner.
-
После того, как запись зоны DNS была создана, используйте следующую команду, чтобы получить пароль root64 base64, который вам нужно подключить на панели мониторинга.
Оболочка
xxxxxxxxxx
1
1
kubectl get secret <name>-gitlab-initial-root-password -ojsonpath='{.data.password}' | base64 --decode ; echo "
-
Прежде чем продолжить, подождите, пока все стручки будут в рабочем состоянии. На следующем снимке экрана показан список модулей, которые будут установлены через Helm.
-
Откройте браузер, введите адрес DNS, а затем используйте имя пользователя root с паролем base64.
-
Добавьте свой существующий контейнерный движок для информации о кластере Kubernetes в GitLab. Выберите Kubernetes в меню Admin Area , нажмите Add кластер Kubernetes , нажмите вкладку Add существующий кластер и введите следующую информацию:
-
Имя : имя вашего кластера, доступно в файле ~ / .kube / config.
-
Объем среды : введите *.
-
URL-адрес API : получите URL-адрес API, выполнив следующую команду:
Оболочка
xxxxxxxxxx
1
1
kubectl cluster-info | grep 'Kubernetes master' | awk '/http/ {print $NF}'
-
Сертификат CA : Запустите kubectl, получите секреты. Один из перечисленных секретов должен быть назван аналогично default-token-xxxxx. Скопируйте это имя токена и используйте его в следующей команде. Получите сертификат, выполнив эту команду:
Оболочка
xxxxxxxxxx
1
1
kubectl get secret <secret name> -o jsonpath="{['data']['ca\.crt']}" | base64 --decode
-
Токен : GitLab аутентифицируется против Kubernetes, используя служебные токены, которые находятся в определенном пространстве имен. Используемый токен должен принадлежать учетной записи службы с правами администратора кластера. Выполните следующие действия для создания этой учетной записи службы:
-
Создайте файл с именем gitlab-admin-service-account.yaml со следующим содержимым:
YAML
xxxxxxxxxx
118
1
apiVersion v1
2
kind ServiceAccount
3
metadata
4
name gitlab-admin
5
namespace kube-system
6
---
7
apiVersion rbac.authorization.k8s.io/v1beta1
8
kind ClusterRoleBinding
9
metadata
10
name gitlab-admin
11
roleRef
12
apiGroup rbac.authorization.k8s.io
13
kind ClusterRole
14
name cluster-admin
15
subjects
16
kind ServiceAccount
17
name gitlab-admin
18
namespace kube-system
-
Выполните следующую команду, чтобы применить привязку учетной записи службы и роли кластера к вашему кластеру:
Оболочка
xxxxxxxxxx
1
1
kubectl apply -f gitlab-admin-service-account.yaml
Вывод:
Простой текст
xxxxxxxxxx
1
1
serviceaccount "gitlab-admin" created
2
clusterrolebinding "gitlab-admin" created
-
Получите токен для учетной записи службы gitlab-admin:
Оболочка
xxxxxxxxxx
1
1
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep gitlab-admin | awk '{print $1}')
-
-
-
Нажмите Добавить кластер Kubernetes . Добавлен экземпляр кластера.
-
В кластере экземпляров установите следующие компоненты:
- Хелм Тиллер
- вход
- Cert-менеджер
- Прометей
- GitLab Runner
-
После установки Ingress предоставляется новый общедоступный балансировщик нагрузки Oracle Cloud Infrastructure.
-
Измените базовый домен на общедоступный IP-адрес балансировщика нагрузки, как предлагается в пользовательском интерфейсе (например, OCI_Public_IP.nip.io), а затем нажмите « Сохранить изменения» . Дополнительные подробности доступны в документации GitLab .
Это оно! Завершена установка GitLab CI / CD Pipelines и интеграция с Container Engine для Kubernetes. Теперь пришло время протестировать рабочий процесс GitLab CI / CD.
Использование конвейеров GitLab CI / CD с реестром облачной инфраструктуры Oracle
В этом примере демонстрируется, как использовать рабочий процесс GitLab CI / CD для извлечения образа из частного репозитория реестра Oracle Cloud Infrastructure, его перестройки и отправки обратно в реестр с использованием нового имени сборки.
-
Если у вас есть личное изображение в репозитории реестра, перейдите к следующему шагу. Если у вас нет личного образа, создайте образ Docker, загрузите его в частное хранилище реестра и создайте секрет Kubernetes (используйте имя пользователя и пароль реестра для секретной информации). Следующие руководства объясняют эти шаги.
-
Добавьте следующие переменные в GitLab. Перейдите в « Настройки» > « CI / CD» , разверните « Переменные» и добавьте следующие переменные ключи и значения:
- OKE_REGISTRY: конечная точка региона вашего реестра (например, iad.ocir.io)
- OKE_REGISTRY_IMAGE: образ вашего реестра (например, iad.ocir.io/tenancy_name/imagename:build)
- OKE_REGISTRY_NEW_IMAGE: Ваша новая версия сборки образа реестра, которая будет помещена в реестр после процесса сборки (например, iad.ocir.io/tenancy_name/imagename:new_image)
- OKE_REGISTRY_PASSWORD: ваш токен аутентификации облачной инфраструктуры Oracle. Для получения дополнительной информации см. Документацию .
- OKE_REGISTRY_USER: Oracle_Cloud_Infrastructure_tenancy_name / usernam
-
Создайте внутренний пустой проект (например, gitlab-docker-ocir-oke).
-
Создайте два новых файла, Dockerfile и .gitla-ci.yml. Это только основные примеры того, как GitLab работает с Container Engine для Kubernetes и Registry. Измените их в соответствии с вашими требованиями.
-
.gitlab-ci.yml
YAML
xxxxxxxxxx
139
1
docker-build-master
2
# Official docker image.
3
image docker latest
4
stage build
5
services
6
name docker 19.03.0-dind
7
entrypoint"env" "-u" "DOCKER_HOST"
8
command"dockerd-entrypoint.sh"
9
variables
10
#CI_DEBUG_TRACE: "true"
11
DOCKER_HOST tcp //localhost 2375/
12
DOCKER_DRIVER overlay2
13
DOCKER_TLS_CERTDIR""
14
before_script
15
"$OKE_REGISTRY_USER" -p "$OKE_REGISTRY_PASSWORD" $OKE_REGISTRY docker login -u
16
script
17
docker info
18
"$OKE_REGISTRY_IMAGE" . docker build --pull -t
19
"$OKE_REGISTRY_IMAGE" "$OKE_REGISTRY_NEW_IMAGE" docker tag
20
"$OKE_REGISTRY_NEW_IMAGE" docker push
21
only
22
master
23
24
docker-build
25
# Official docker image.
26
image docker latest
27
stage build
28
services
29
docker:19.03.0-dind
30
before_script
31
"$OKE_REGISTRY_USER" -p "$OKE_REGISTRY_PASSWORD" $OKE_REGISTRY docker login -u
32
script
33
docker info
34
"$OKE_REGISTRY_IMAGE" . docker build --pull -t
35
"$OKE_REGISTRY_IMAGE" "$OKE_REGISTRY_NEW_IMAGE" docker tag
36
"$OKE_REGISTRY_NEW_IMAGE" docker push
37
except
38
master
39
Dockerfile
-
Dockerfile
x
1
FROM nginx
2
VOLUME /usr/share/nginx/html
-
После того, как эти файлы были созданы и сохранены, GitLab Auto DevOps запускает конвейеры. Затем он извлекает ваш образ реестра, создает новый, помечает его, используя имя $ OKE_REGISTRY_NEW_IMAGE, и помещает его в реестр.
5. Обновите панель реестра, и появится новое изображение.
Ваша настройка и тесты завершены! GitLab CI / CD Pipelines была развернута и интегрирована с Container Engine для Kubernetes и Registry.
Заключение
Комбинация Container Engine для Kubernetes с интегрированными возможностями GitLab CI / CD позволяет создать надежную и масштабируемую платформу DevOps, готовую к работе. Для получения дополнительной информации см. Документацию « Контейнерный движок для Kubernetes» и веб-сайт Gitlab . Если вы хотите испытать Gitlab на Container Engine для Kubernetes для себя, зарегистрируйте учетную запись Oracle Cloud Infrastructure и начните тестирование уже сегодня!