DevOps на Openshift: Автоматизация создания проектов Openshift из Jenkins Pipeline - DevOps на Openshift: Автоматизация создания проектов Openshift из Jenkins Pipeline
Блоги
Навигационные полоски
Эта статья открывает небольшой цикл, посвящённый Openshift Container Platform и его возможностям как инструмента DevOps.
Продукт Openshift Container Platform от компании Red Hat является полноценным PaaS решением, позволяющем запускать и автоматически контролировать жизненный цикл приложений, работающих в контейнерах. Платформа, из коробки, даёт возможность запускать приложения, написанные на различных языках программирования: PHP, Ruby, Python, Java,.NET, использовать различные базы данных: PostgreSQL, MySql, MongoDB и многое другое. Благодаря реализованной сетевой изоляции и модели безопасности, в рамках одного кластера Openshift можно легко реализовать изоляцию сред на dev, test, stage и prod. Автоматическая балансировка нагрузки и отказоустойчивость так же являются ключевыми особенностями решения.
Кроме PaaS, Openshift является полноценным DevOps решением, поддерживающим из коробки:
- Работу с Jenkins
- Возможность реализации Jenkins Pipeline
- Запуск всех необходимых для полноценного ведения разработки инструментов - Gitlab(Gogs), Nexus, Sonarqube, Eclipse Che, Jenkins
- Поддержка модели разворачивания Blue/Green
- Поддержка модели разворачивания A/B
- Автоматическое управление жизненным циклом приложений
Если в вашей компании есть:
- Активная разработка приложений
- Требования к отказоустойчивости приложений
- Требования к балансировке нагрузки
- Требование по автоматическому переключению приложений на новые версии без простоя
- Требования по одновременной работе нескольких команд (в том числе внешних подрядчиков)
тогда вам стоит внимательно посмотреть на продукт Openshift!
В рамках этой статьи я бы хотел описать Pipeline, который мы модернизируем для полноценной демонстрации возможностей DevOps в рамках Openshift и рассказать первые шаги по этому Pipeline.
За основу был взят демонстрационный проект, который достаточно легко разворачивается из шаблона и показывает работу Jenkins Pipeline по переносу между средами простого web-приложения, запускаемого на Wildfly или Red Hat EAP 7. Переде деплоем на stage окружение pipeline останавливается и ждёт ручного ввода - на этом этапе проверяется dev окружение, на основании чего сборка продвигается дальше.
Для начала, администратору кластера или пользователю с необходимыми правами потребуется создать 3 проекта: cicd, dev и stage. В проекте cicd будут развёрнуты все необходимые инструменты:
При работе Jenkins использует сервисный аккаунт в Openshift. Для того, чтобы в рамках Pipeline была возможность разворачивать приложения в других проектах этому пользователю необходимо выдать соответствующие права:
oc policy add-role-to-user edit system:serviceaccount:cicd:jenkins -n dev oc policy add-role-to-user edit system:serviceaccount:cicd:jenkins -n stage
Одна из первых вещей, о котрых нас спросили наши заказчики, просмотрев демо - можно ли автоматизировать создание проектов и делать это прямо из Pipeline? Ответ на этот вопрос - да, это возможно. Так как Pipeline это просто исполняемый код, написанный на языке Groovy из которого можно, в том числе, вызывать shell-команды, то мы это реализовали следующим образом:
script { try { sh "oc new-project ${env.DEV_PROJECT} --display-name='Tasks - ${env.DEV_PROJECT}'" sh "oc policy add-role-to-user edit system:serviceaccount:cicd:jenkins -n ${env.DEV_PROJECT}" sh "oc create quota -n ${env.DEV_PROJECT} compute --scopes=NotTerminating --hard=cpu=2,memory=2G" sh "oc create quota -n ${env.DEV_PROJECT} logical --hard=pods=5,services=2,secrets=20,persistentvolumeclaims=2" sh "oc project ${env.DEV_PROJECT}" } catch(Exception e) { println("Dev project already exists") } }
Прямо в таком виде этот код не заработает, так как сервисному аккаунту jenkins не хватит прав. Это можно решить, назначив нужные роли.
# Grant Jenkins required permissions # Role to create projects oc adm policy add-cluster-role-to-user self-provisioner system:serviceaccount:cicd:jenkins # Role to create quotas inside projects oc create clusterrole quota-editor --verb=create,get,list,update,watch --resource=resourcequotas oc adm policy add-cluster-role-to-user quota-editor system:serviceaccount:cicd:jenkins
Это одно из немногих улучшений к базовому демо-проекту, которое мы внесли. Дальше - больше...
- 6.2 (12)
- 7.0 (12)
- activiti (14)
- apache camel (6)
- camel (11)
- devcon (6)
- devops (5)
- emdev (9)
- emdev limited (9)
- entaxy (13)
- esb (10)
- fuse (5)
- gartner (7)
- google apps (6)
- jboss (5)
- liferay (143)
- liferay 7.1 (11)
- liferay dxp (11)
- liferay7 (12)
- openshift (8)
- osgi (5)
- redhat (15)
- rest (6)
- wso2 (70)
- wso2 api-m (10)
- wso2 ei (8)
- wso2ei (5)
- wso2esb (7)
- wso2is (8)
- емдев (11)
Сайт использует файлы cookie. Они позволяют узнавать вас и получать информацию о вашем пользовательском опыте. Это нужно, чтобы улучшать сайт. Посещая страницы сайта и предоставляя свои данные, вы позволяете нам предоставлять их сторонним партнерам. Если вы согласны, продолжайте пользоваться сайтом. Если нет – установите специальные настройки в браузере или обратитесь в техподдержку.