Больше отличных статей.
«Микросервисы — это не все, а лишь подмножество определенного домена».
С таким количеством компонентов мониторинга всегда найдется подходящий для вас
«С Нетти, что мы разрабатываем? 》
«Вероятно, это наиболее подходящая спецификация Redis».
«Портрет программиста, десять лет взлетов и падений»
Самая полезная серия:
«Наиболее часто используемый набор навыков «vim» в производственной среде Linux.
«Наиболее часто используемый набор навыков «Sed» в производственной среде Linux.
«Наиболее часто используемый набор навыков «AWK» в производственной среде Linux.
необходимость
Если у компании определенного масштаба есть система, над которой стоит поработать ее технической команде, то система релизов — одна из них.jenkins
Это работает хорошо, почему вы хотите сделать это сами? Подводя итог, причин несколько:
1,Процессы и технологии каждой компании разные, и это так же негладко, как запор.
2,Стоимость разработки технологии издательской системы невелика, и это легко сделать. Если вам это трудно, вы должны застрять в сложной кадровой среде и процессах компании.
3. jenkins
Сделать такой инструмент усовершенствованием не так просто, как разработать его самостоятельно. Например, добавить ссылку для утверждения, внедрить форму или что-то в этом роде.
Словом, сделать упаковку своими руками не сложнее, чем переделать уже имеющуюся.
резюме
Разработка системы публикации проста, хотя требуется полное знание стека (интерфейс, серверная часть, сценарии). Насколько это просто? Мы предоставили двух человек, и на все это ушло всего 10 рабочих дней. После прочтения этой статьи, если вы думаете, что это непросто, то мы слишком хороши (囧), ведь мы видели семь или восемь роскошных составов, которые делают то же самое.
Процесс не может вам сильно помочь, но технически я представлю набор реализаций, которые я лично считаю очень хорошими. Если ваша архитектура основана наSpringCloud
Да, вы найдете это очень милым. Издательская система в основном имеет следующие функции: модуль построения, модуль развертывания, модуль управления правами, модуль аудита.
строительные блоки
После того, как пользователи войдут в систему, они увидят список всех проектов, у которых есть разрешения. Нажмите, чтобы перейти на страницу сборки. Создание модулей на самом деле довольно просто. используете ли выmaven
,все ещеgradle
Илиcnpm
,g++
и т. д., выполняются путем передачи набора параметров в скрипт. Рекомендуется здесьpython
Скрипт для большего контроля.
Строитель может выбрать любую фиксацию для сборки. После успешной сборки отправка будет автоматически помечена тегом (вы также можете настроить тег). Один и тот же предмет не допускаетсяупаковать заодно. Если сборка завершится ошибкой, ее можно будет восстановить, и сборщик увидит скользящий журнал в реальном времени. Здесь есть два технических момента:
1)Как получить запись представления для Git и Shuta?
2)Как отобразить журнал прокрутки?
Получить запись коммита gitlab
Возьмем, к примеру, gitlab (потому что он используется чаще всего). Присоединяйтесь к maven gitlab, чтобы использовать.
<dependency>
<groupId>org.gitlab</groupId>
<artifactId>java-gitlab-api</artifactId>
<version>4.1.0</version>
</dependency>
Получите самые последние коммиты.
api.getAllCommits(projectId,page, branch)
тег
api.addTag(projectId, tagName, hash, tagTitle, tagContent);
Реализация скользящего журнала
См. Статью официальной учетной записи «Реализация Rolling Logs».
Модуль развертывания
Неприятность многих систем публикации заключается в том, что они не поддерживают одиночную или множественную публикацию, что неудобно и рискованно.
На странице развертывания отображаются только успешно упакованные записи в порядке, обратном времени отправки. Повторное развертывание поддерживается независимо от того, было ли последнее развертывание успешным или неудачным. Интерфейс развертывания выглядит следующим образом:
Нажмите кнопку развертывания, чтобы отобразить список компьютеров развертывания, вы можете выбрать один или несколько для развертывания.Записи о развертывании группируются по записям об упаковке и отображаются в столбце журнала. В том же развертывании, если происходит сбой одного из развертываний, по умолчанию происходит сбой всего развертывания, и о текущем состоянии развертывания можно судить по журналу развертывания.Видно, что в системе на самом деле нет понятия отката, есть только понятие какую версию разворачивать. Служба может иметь сотни машин, как более элегантно отображать отношения сосуществования нескольких версий, квалифицированная команда не упустит это улучшение.
SpringCloudпроцесс развертывания
управление полномочиями
На github есть много реализаций с открытым исходным кодом, вы можете просто поиграться с набором интеграций. В основном мы говорим о понятии авторитета.
Дизайн разрешений имеет два основных момента. Во-первых, не препятствовать эффективности развития НИОКР, а во-вторых, строго контролировать онлайн-безопасность. Таким образом, онлайн- и офлайн-среды разрабатываются отдельно.
1)Системный пользователь — это либо суперадминистратор (то есть тот, кто может это сделать), либо пользователь с логотипом онлайн-разрешения, а затем — обычный пользователь.
2)пользователь, либо участник проекта, либо нет
Схема разрешений выглядит следующим образом:
Операция записывается в историю операций и передает сообщение (или другой хук):
1)Измените проект и отправьте его всем участникам проекта
2)Соберите проект и отправьте результат сборки застройщику
3)Разверните проект и отправьте его всем участникам проекта
Все записи операций можно проверить в проекте.
сценарий
Веб-часть издательской системы — не что иное, как оболочка. Настоящая вещь, которую нужно выполнить, — это наш скрипт.
использоватьpython
Скрипты для сборки и публикации очень удобны. немногоjava
Разработчики не очень хорошо знакомы со скриптами, поэтому я выберу более важные моменты для объяснения.
отображение процесса выполнения
Рекомендуется использоватьlogging
Модуль управления. Эффект показан ниже.
import logging
def setup_logging():
root = logging.getLogger()
root.setLevel(logging.DEBUG)
ch = logging.StreamHandler(sys.stdout)
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
root.addHandler(ch)
Запись об исключении скрипта
Исключение выполнения Python по умолчанию не выводится на стандартный вывод, нам нужно его принудительно выполнить.
import sys
import traceback
try:
setup_logging()
#...
except Exception as e:
exc_type, exc_value, exc_traceback_obj = sys.exc_info()
traceback.print_exception(exc_type, exc_value, exc_traceback_obj, limit=2, file=sys.stdout)
Удаленное исполнение
Все машины, которые публикуют систему, должны иметь вход без пароля. пройти черезssh -t "su - sth"
Вы можете переключиться на любого пользователя для удаленного выполнения программы.
Но практика показала, что через питонаsubprocess
Есть много проблем с выполнением модуля. Поэтому мы просто использовалиparamiko
Библиотека удаленных звонков.
s = paramiko.SSHClient()
s.load_system_host_keys()
s.connect(srv, 22 )
(stdin, stdout, stderr) = s.exec_command(cmd)
last_line = ""
for line in stdout.readlines():
last_line = line
print( line)
s.close()
Безопасно убить процесс
все должны знатьkill -15
иkill -9
разница. Следующий скрипт заставляет программу ждать 10 секунд, а затем используетkill -9
убей ее.
Примечание. В следующем скрипте есть огромные ямы~, обязательно передайте параметры
n=0
while [[ $n -lt 10 ]]
do
let "n++"
ex=`ps aux|grep \/${flag}|grep -v grep | grep -v sc. | awk '{print $2}' `
echo $ex
if [[ $ex == "" ]]
then
echo "program not exist"
break
else
echo "send kill -15 to below:"
echo $ex
ps aux|grep \/${flag}|grep -v grep | grep -v sc. | awk '{print $2}' | xargs kill -15
sleep 1
fi
if [[ $n -eq 10 ]]
then
# after 10s , try to send kill -9
ps aux|grep \/${flag}|grep -v grep | grep -v sc. | awk '{print $2}' | xargs kill -9
fi
done
##start jar
echo "start jar"
nohup -jar $jar >/dev/null 2>&1 &
echo "restart ${flag} !!!"
sleep 2
ex=`ps aux|grep \/${flag}|grep -v grep | grep -v sc. | awk '{print $2}' `
if [[ $ex == "" ]]
then
echo "Fail"
else
echo "new PID is "
echo $ex
echo "OK"
fi
exit
внешний интерфейс
vue
Сделайте это сверх меры. Мы выбрали все знакомые с фономbootstrap
, с более древним и красивымAdminLTE
Рамка.
Но это также пустая трата времени, чтобы написать так много страниц, поэтому мы также интегрировалиejs
шаблонный движок.
Совет технической команде
1)Чтобы доверять своей команде, доверяйте себе.Если среда компании сложная. Меньше встреч для обсуждения и меньше споров. Сначала закрыть страну, потом реформировать и открыть. Давайте сначала построим что-нибудь за закрытыми дверями, а потом пусть дяди обсудят и внесут изменения. В конце концов, это не займет много времени, и привод прототипа не может быть лучше, и вы не делаете проект на 100% сразу.
2)При проектировании необходимо учитывать разнообразие и распределение типов проектов. Не ждите, пока придет требование, придет мера и выкорчует вас.
3)Хотя автоматизация — это хорошо, будьте готовы к экстренным ручным методам. Если технический директор звонит вам лично, это не всегда хорошо.