title: Ð Ð°Ð·ÑÐ°Ð±Ð¾ÑÐºÐ° ÑÐµÑÐ²Ð¸ÑÐ° Ð´Ð»Ñ Ð°Ð²ÑÐ¾Ð¼Ð°ÑÐ¸ÑÐµÑÐºÐ¾Ð³Ð¾ ÑÐ°Ð·Ð²ÐµÑÑÑÐ²Ð°Ð½Ð¸Ñ Ð¾ÑÐºÐ°Ð·Ð¾ÑÑÑÐ¾Ð¹ÑÐ¸Ð²Ð¾Ð³Ð¾ GitLab
title: Ð²ÑÐ¿ÑÑÐºÐ½Ð°Ñ ÐºÐ²Ð°Ð»Ð¸ÑÐ¸ÐºÐ°ÑÐ¸Ð¾Ð½Ð½Ð°Ñ ÑÐ°Ð±Ð¾ÑÐ° Ð¼Ð°Ð³Ð¸ÑÑÑÐ°
titleType: Subtitle
title: Development of a service for automated deployment of a high availability Gitlab
Creators: name: ÐÐ°Ñ, ÐÐ°Ð²ÐµÐ»
Publisher: name: Ð¡Ð°Ð½ÐºÑ-ÐÐµÑÐµÑÐ±ÑÑÐ³ÑÐºÐ¸Ð¹ Ð¿Ð¾Ð»Ð¸ÑÐµÑÐ½Ð¸ÑÐµÑÐºÐ¸Ð¹ ÑÐ½Ð¸Ð²ÐµÑÑÐ¸ÑÐµÑ ÐÐµÑÑÐ° ÐÐµÐ»Ð¸ÐºÐ¾Ð³Ð¾
Year: 2024
Subjects: Ð¿ÑÐ¾Ð³ÑÐ°Ð¼Ð¼Ð½Ð¾Ðµ Ð¾Ð±ÐµÑÐ¿ÐµÑÐµÐ½Ð¸Ðµ
Ð°Ð²ÑÐ¾Ð¼Ð°ÑÐ¸ÑÐµÑÐºÐ¾Ðµ ÑÐ°Ð·Ð²ÐµÑÑÑÐ²Ð°Ð½Ð¸Ðµ
Ð²ÑÑÐ¾ÐºÐ°Ñ Ð´Ð¾ÑÑÑÐ¿Ð½Ð¾ÑÑÑ
Ð¾ÑÐºÐ°Ð·Ð¾ÑÑÑÐ¾Ð¹ÑÐ¸Ð²Ð¾ÑÑÑ
software
automated deployment
high availability
fault tolerance

description: ÐÐ°Ð½Ð½Ð°Ñ ÑÐ°Ð±Ð¾ÑÐ° Ð¿Ð¾ÑÐ²ÑÑÐµÐ½Ð° ÑÐ°Ð·ÑÐ°Ð±Ð¾ÑÐºÐµ ÑÐµÑÐ²Ð¸ÑÐ° Ð´Ð»Ñ Ð°Ð²ÑÐ¾Ð¼Ð°ÑÐ¸ÑÐµÑÐºÐ¾Ð³Ð¾ ÑÐ°Ð·Ð²ÐµÑÑÑÐ²Ð°Ð½Ð¸Ñ Ð¾ÑÐºÐ°Ð·Ð¾ÑÑÑÐ¾Ð¹ÑÐ¸Ð²Ð¾Ð³Ð¾ Gitlab. Ð ÐºÐ°ÑÐµÑÑÐ²Ðµ Ð·Ð°Ð´Ð°ÑÐ¸ ÑÐ°Ð±Ð¾ÑÑ ÑÑÐµÐ±Ð¾Ð²Ð°Ð»Ð¾ÑÑ Ð²ÑÐ±ÑÐ°ÑÑ Ð¸ Ð½Ð°ÑÑÑÐ¾Ð¸ÑÑ Ð¾ÑÐºÐ°Ð·Ð¾ÑÑÑÐ¾Ð¹ÑÐ¸Ð²ÑÑ Ð°ÑÑÐ¸ÑÐµÐºÑÑÑÑ Ð´Ð»Ñ 3000 ÑÐ°Ð·ÑÐ°Ð±Ð¾ÑÑÐ¸ÐºÐ¾Ð² Ð¸ ÑÐ°Ð·ÑÐ°Ð±Ð¾ÑÐ°ÑÑ ÑÐµÑÐ²Ð¸Ñ Ð´Ð»Ñ ÐµÐµ Ð°Ð²ÑÐ¾Ð¼Ð°ÑÐ¸ÑÐµÑÐºÐ¾Ð³Ð¾ ÑÐ°Ð·Ð²ÐµÑÑÑÐ²Ð°Ð½Ð¸Ñ. Ð¢Ð°ÐºÐ°Ñ Ð°ÑÑÐ¸ÑÐµÐºÑÑÑÐ° Ð½ÐµÐ¾Ð±ÑÐ¾Ð´Ð¸Ð¼Ð° Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶ÐºÐ¸ Ð±ÐµÑÐ¿ÐµÑÐµÐ±Ð¾Ð¹Ð½Ð¾Ð¹ ÑÐ°Ð±Ð¾ÑÑ ÑÐ°Ð·ÑÐ°Ð±Ð¾ÑÑÐ¸ÐºÐ¾Ð², Ð° ÑÐ°ÐºÐ¶Ðµ Ð´Ð»Ñ ÑÐ¾ÐºÑÐ°ÑÐµÐ½Ð¸Ñ Ð²ÑÐµÐ¼ÐµÐ½Ð½ÑÑ Ð·Ð°ÑÑÐ°Ñ Ð½Ð° ÑÑÑÐ°Ð½Ð¾Ð²ÐºÑ Ð¸Ð»Ð¸ Ð¿ÐµÑÐµÑÑÑÐ°Ð½Ð¾Ð²ÐºÑ Ð¾ÑÐºÐ°Ð·Ð¾ÑÑÑÐ¾Ð¹ÑÐ¸Ð²Ð¾Ð¹ Ð°ÑÑÐ¸ÑÐµÐºÑÑÑÑ. Ð ÑÐ°Ð¼ÐºÐ°Ñ ÑÐ°Ð±Ð¾ÑÑ Ð±ÑÐ»Ð¸ Ð¿ÑÐ¾Ð°Ð½Ð°Ð»Ð¸Ð·Ð¸ÑÐ¾Ð²Ð°Ð½Ñ ÑÐ°Ð·Ð»Ð¸ÑÐ½ÑÐµ Ð¿Ð¾Ð´ÑÐ¾Ð´ÑÑÐ¸Ðµ Ð°ÑÑÐ¸ÑÐµÐºÑÑÑÑ, ÑÐ°ÐºÐ¸Ðµ ÐºÐ°Ðº Bitbucket Ð² ÑÐ²ÑÐ·ÐºÐµ Ñ Jenkins, Gerrit Ð² ÑÐ²ÑÐ·ÐºÐµ Ñ Zuul Ð¸ Gitlab Community Edition. ÐÐµÑÐ²Ð°Ñ ÑÐ²ÑÐ·ÐºÐ° Bitbucket Ð¸ Jenkins Ð¸Ð¼ÐµÐµÑ Ð´Ð¾ÑÑÐ°ÑÐ¾ÑÐ½Ð¾ Ð¼Ð½Ð¾Ð³Ð¾ Ð¼Ð¸Ð½ÑÑÐ¾Ð², Ð½Ð°Ð¿ÑÐ¸Ð¼ÐµÑ: ÑÑÐ¾ Ð´Ð²Ð° ÑÐ°Ð·Ð»Ð¸ÑÐ½ÑÑ ÑÐµÑÐ²Ð¸ÑÐ°, ÐºÐ¾ÑÐ¾ÑÑÐµ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐ°ÑÑÑÑ Ð´ÑÑÐ³ Ðº Ð´ÑÑÐ³Ñ, Ð¸Ð·-Ð·Ð° ÑÑÐ»Ð¾Ð¶Ð½ÑÐµÑÑÑ Ð¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶ÐºÐ° Ð¿Ð¾ Ð¾ÑÐ´ÐµÐ»ÑÐ½Ð¾ÑÑÐ¸, ÑÐ°ÑÑÑÐµ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Jenkins Ð¿ÑÐ¸Ð²Ð¾Ð´Ð¸Ð»Ð¸ Ðº Ð½ÐµÑÐ¾Ð²Ð¼ÐµÑÑÐ¸Ð¼Ð¾ÑÑÐ¸ Ñ Bitbucket, Ð¸Ð·-Ð·Ð° ÑÐµÐ³Ð¾ Ð¿ÑÐ¸ÑÐ¾Ð´Ð¸Ð»Ð¾ÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÑÑÑ Ð¸ ÐµÐ³Ð¾ Ð²ÐµÑÑÐ¸Ñ, Jenkins Ð¸Ð¼ÐµÐµÑ Ð±Ð¾Ð»ÑÑÐ¾Ðµ ÐºÐ¾Ð»Ð¸ÑÐµÑÑÐ²Ð¾ ÑÑÐ·Ð²Ð¸Ð¼Ð¾ÑÑÐµÐ¹, ÐºÐ¾ÑÐ¾ÑÑÐµ ÑÑÑÑÐ°Ð½ÑÑÑÑÑ Ð´Ð¾ÑÑÐ°ÑÐ¾ÑÐ½Ð¾ Ð´Ð¾Ð»Ð³Ð¾. Gerrit Ð¸ Zuul ÑÐ°ÐºÐ¶Ðµ Ð¸Ð¼ÐµÑÑ Ð¼Ð¸Ð½ÑÑÑ, ÑÐ°ÐºÐ¸Ðµ ÐºÐ°Ðº Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐ¸ÑÑ LDAP Ðº Zuul Ð±ÐµÐ· ÑÑÐ¾ÑÐ¾Ð½Ð½ÐµÐ³Ð¾ ÑÐµÑÐ²Ð¸ÑÐ° Keycloak. Gitlab Ð² Ð¾ÑÐ»Ð¸ÑÐ¸Ðµ Ð¾Ñ Ð²ÑÑÐµÐ¾Ð¿Ð¸ÑÐ°Ð½Ð½ÑÑ Ð°ÑÑÐ¸ÑÐµÐºÑÑÑ ÑÐ²Ð»ÑÐµÑÑÑ Ð¾Ð´Ð½Ð¸Ð¼ ÑÐµÑÐ²Ð¸ÑÐ¾Ð¼, ÐºÐ¾ÑÐ¾ÑÑÐ¹ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¿Ð»Ð°ÑÐ½ÑÐµ Ð¸ Ð±ÐµÑÐ¿Ð»Ð°ÑÐ½ÑÐµ Ð²ÐµÑÑÐ¸Ð¸. ÐÐ¾ÑÐ»Ðµ ÑÐ³Ð»ÑÐ±Ð»ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð°Ð½Ð°Ð»Ð¸Ð·Ð° Ð¸ ÑÐµÑÑÐ¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ð¸Ð· Ð²ÑÑÐµÐ¾Ð¿Ð¸ÑÐ°Ð½Ð½ÑÑ Ð°ÑÑÐ¸ÑÐµÐºÑÑÑ Ð±ÑÐ» Ð²ÑÐ±ÑÐ°Ð½ Ð±ÐµÑÐ¿Ð»Ð°ÑÐ½ÑÐ¹ Gitlab. Ð¢Ð°ÐºÐ¶Ðµ Ð² ÑÐ°Ð¼ÐºÐ°Ñ ÑÐ°Ð±Ð¾ÑÑ Ð½Ð° Python Ð±ÑÐ»Ð¸ ÑÐ°Ð·ÑÐ°Ð±Ð¾ÑÐ°Ð½Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑÐµÐ»ÑÐ½ÑÐµ ÑÐµÑÐ²Ð¸ÑÑ, Ð´Ð¾ÑÑÑÐ¿Ð½ÑÐµ ÑÐ¾Ð»ÑÐºÐ¾ Ð² Ð¿Ð»Ð°ÑÐ½Ð¾Ð¹ Ð²ÐµÑÑÐ¸Ð¸ Gitlab, ÑÐ°ÐºÐ¸Ðµ ÐºÐ°Ðº ÑÐµÑÐ²Ð¸Ñ Ð´Ð»Ñ Ð°Ð²ÑÐ¾Ð¼Ð°ÑÐ¸ÑÐµÑÐºÐ¾Ð³Ð¾ ÑÐ»Ð¸ÑÐ½Ð¸Ñ Ð²ÐµÑÐ¾Ðº (Merge Bot) Ð¸ ÑÐµÑÐ²Ð¸Ñ Ð´Ð»Ñ Ð°Ð²ÑÐ¾Ð¼Ð°ÑÐ¸ÑÐµÑÐºÐ¾Ð³Ð¾ Ð¾ÑÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð²ÑÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð½ÑÑ ÑÐ°Ð¹Ð»Ð¾Ð² Ð² ÐºÐ°Ð¶Ð´Ð¾Ð¼ ÐºÐ¾Ð¼Ð¼Ð¸ÑÐµ ÑÐ°Ð·ÑÐ°Ð±Ð¾ÑÑÐ¸ÐºÐ¾Ð² Ð´Ð»Ñ Ð¿ÑÐ¸Ð½ÑÑÐ¸Ñ ÑÐµÑÐµÐ½Ð¸Ñ Ð¾ Ð½ÐµÐ¾Ð±ÑÐ¾Ð´Ð¸Ð¼Ð¾ÑÑÐ¸ Ð¿ÑÐ¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÑÐ±Ð¾ÑÐºÐ¸.
description: This work is dedicated to the development of a service for automated deployment of a high availability Gitlab. The task of the work was to select and configure a high availability architecture for 3000 developers and develop a service for its automated deployment. Such architecture is necessary to support uninterrupted work of developers, as well as to reduce the time spent on installation or reinstallation of a high availability architecture. As a part of the work, various suitable architectures were analyzed, such as Bitbucket with Jenkins, Gerrit with Zuul, and Gitlab Community Edition. The first combination of Bitbucket and Jenkins has several drawbacks, for example: these are two different services that need to be connected to each other, which complicates their support separately, frequent updates of Jenkins led to incompatibility with Bitbucket, requiring updates to its version, Jenkins has a large number of vulnerabilities that take a long time to fix. Gerrit an Zuul also have drawbacks, such as the inability to connect LDAP to Zuul without the third-party Keycloak service. Unlike the above-mentioned architectures, Gitlab is a single service that supports both paid and free versions. After analysis and testing of each of the above architectures, the free Gitlab was chosen. Also, as part of the work, additional services were developed, available only in the pay version of Gitlab, in Python, such as a service for automatic branch merging (Merge Bot) and a service for automatic tracking of all changed files in each developerâs commit to make decision on the need for a build.