CI/CD (непрерывная интеграция / непрерывное развертывание) – это основная концепция мира DevOps.
Она помогает нам автоматизировать процессы разработки программного обеспечения: создание, тестирование и развертывание исходных кодов.
📜 Введение в GitLab CI / CD для начинающих
Среди многих инструментов CI/CD Jenkins – один из самых известных инструментов с открытым исходным кодом, который помогает настроить пайплайны для непрерывной интеграции и непрерывного развертывания.
Это руководство покажет вам, как установить Jenkins в кластере Kubernetes.
📜 Как создать свой первый пайплайн CI/CD в Jenkins?
Подготовка кластера Kubernetes
Есть много способов настроить кластер Kubernetes.
Вы можете использовать общедоступные облачные сервисы для создания собственного кластера на AWS, GCP, Linode и т. д.
Кроме того, самый простой способ – установить minikube на локальном компьютере.
☸️ Локальные Kubernetes для Linux — MiniKube или MicroK8s
Здесь у меня есть кластер Kubernetes с 5 нодами, подготовленными с помощью kubespray.
☸️ Разверните готовый кластер Kubernetes с помощью Ansible & Kubespray
$ kubectl get node
Установка Jenkins
Во-первых, мы создадим новое пространство имен, чтобы обеспечить механизм изоляции для управления средой CI:
$ kubectl create namespace jenkins namespace/jenkins created
Убедитесь, что пространство имен jenkins было успешно создано, выполнив следующую команду:
$ kubectl get namespaces
Затем давайте создадим deployment Jenkins.
Вы можете использовать следующий файл манифеста для создания единого экземпляра Jenkins.
Создание файла `jenkins-deployment.yaml`:
apiVersion: apps/v1 kind: Deployment metadata: name: jenkins-deployment spec: replicas: 1 selector: matchLabels: app: jenkins template: metadata: labels: app: jenkins spec: containers: - name: jenkins image: jenkins/jenkins:lts ports: - name: http-port containerPort: 8080 - name: jnlp-port containerPort: 50000 volumeMounts: - name: jenkins-vol mountPath: /var/jenkins_vol volumes: - name: jenkins-vol emptyDir: {}
Развертывание с использованием образа Docker `jenkins/jenkins:lts` предоставляет порты` 8080` и `50000`.
Примените приведенный выше манифест:
$ kubectl create -f jenkins-deployment.yaml --namespace jenkins
$ kubectl get pod -n jenkins NAME READY STATUS RESTARTS AGE jenkins-deployment-794699f9bc-rln7x 1/1 Running 0 66s
Развертывание службы Jenkins
После создания деплоймента Jenkins и запуска пода Jenkins вам необходимо предоставить соединение с работающим подом с помощью службы.
В этом руководстве мы будем использовать службы NodePort и ClusterIP.
Создадим файл jenkins-svc.yaml следующим образом:
apiVersion: v1 kind: Service metadata: name: jenkins spec: type: NodePort ports: - port: 8080 targetPort: 8080 nodePort: 30000 selector: app: jenkins --- apiVersion: v1 kind: Service metadata: name: jenkins-jnlp spec: type: ClusterIP ports: - port: 50000 targetPort: 50000 selector: app: jenkins
Теперь примените указанный выше манифест и создайте службу в пространстве имен jenkins:
$ kubectl create -f jenkins-svc.yaml --namespace jenkins
Убедитесь, что служба запущена:
$ kubectl get svc --namespace jenkins NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE jenkins NodePort 10.233.2.81 8080:30000/TCP 30s jenkins-jnlp ClusterIP 10.233.53.44 50000/TCP 30s
С этого момента мы можем получить доступ к панели управления Jenkins с помощью службы NodePort.
Доступ к панели управления Jenkins
Служба NodePort доступна через порт 30000 на любой воркер ноды кластера Kubernetes:
$ kubectl get node -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME node1 Ready master 149m v1.19.2 192.168.0.111 Ubuntu 18.04.5 LTS 4.15.0-121-generic docker://19.3.13 node2 Ready master 148m v1.19.2 192.168.0.112 Ubuntu 18.04.5 LTS 4.15.0-121-generic docker://19.3.13 node3 Ready master 148m v1.19.2 192.168.0.113 Ubuntu 18.04.5 LTS 4.15.0-121-generic docker://19.3.13 node4 Ready 147m v1.19.2 192.168.0.114 Ubuntu 18.04.5 LTS 4.15.0-121-generic docker://19.3.13 node5 Ready 147m v1.19.2 192.168.0.115 Ubuntu 18.04.5 LTS 4.15.0-121-generic docker://19.3.13
$ kubectl logs jenkins-deployment-794699f9bc-rln7x --namespace jenkins
Заключение
Jenkins – действительно мощный инструмент CI/CD для любого разработчика DevOps, а также разработчика программного обеспечения.
В этом руководстве описаны все этапы развертывания Jenkins в кластере Kubernetes.
Благодаря Дженкинсу мы будем более продуктивными, и это поможет нам сократить время на сборку, тестирование и развертывание кода.
Спасибо за чтение и оставьте свое предложение в разделе комментариев ниже.