UMGUM.COM (лучше) 

External App ( Дополнение к возможностям сервиса автоматизации доставки и развёртывания кода простейших web-приложений. )

10 июня 2019

OS: "Linux Debian 8/9", "Linux Ubuntu 16/18 LTS".
Apps: "Bash".

Здесь изложены необходимые для поддержки вызова внешнего приложения (в примере описывается связка с "Docker + Bash") дополнения к возможностям сервиса автоматизации доставки и развёртывания кода простейших web-приложений к серверам тестирования и публикации, рассматриваемого в вышестоящей заметке.


Используя функционал расширения конфигурации SUDO добавляем правила в отдельные файлы конфигурации, разрешая пользователю, от имени которого запущен web-сервер, простую прямую загрузку данных из Git-репозитория непосредственно в директории web-сайтов и запуск скриптов "деплоя":

# vi /etc/sudoers.d/web-deploy-users

....
www-data ALL=(root:root) NOPASSWD: /usr/bin/test,/usr/local/etc/devops/docker-ctrl.sh
....

Дополненный для поддержки вызова внешнего инструмента конфигурационный файл:

# vi ./group0-site.example.net-testing.conf

##
# (required file name format: ./groupname-reponame-branch.conf) - in lowercase! #
# (supported branches: {master|staging|testing}) - in lowercase! #
##

# Секретный ключ, которым подписывается тело уведомления от удалённого репозитория, или пароль простой аутентификации
WEBHOOK_SECRET_KEY="keyHMACforPOST"

# Задаём метод доставки и применения данных
CD_MODE="external" # {direct|external}

# Адрес удалённого Git-репозитория, из которого будут загружаться данные
# (не указывается, если используется внешний инструмента развёртывания)
#GIT_REMOTE="ssh://git@gitlab.example.net/group0/site.example.net.git"

# Пользователь, от имени которого следует обращаться к удалённому репозиторию
# (не указывается, если используется внешний инструмента развёртывания)
#GIT_USER="git-group0"

# Месторасположение локального репозитория
# (не указывается, если используется внешний инструмента развёртывания)
#GIT_DIR="/var/www/group0/site.example.net"

# Месторасположение внешнего инструмента развёртывания и конфигурационного файла сайта
CD_EXTERNAL_EXEC="/usr/local/etc/devops/docker-ctrl.sh"
CD_EXTERNAL_CONF="/usr/local/etc/devops/conf/stage-site.example.net.conf"

Выносим в подключаемый файл подборку функций, предназначенных передачи управления внешнему инструменту "деплоя":

# cd /var/www/cgi-bin/webhook/webhook/lib
# vi ./cd-external-wrapper.sh.snippet && chown www-data:www-data ./cd-external-wrapper.sh.snippet && chmod o-rwx ./cd-external-wrapper.sh.snippet

#!/bin/bash
# This file contains the code snippet for the shell Bash v.4 (Bourne again shell).
# Файл содержит фрагмент кода для командного интерпретатора Bash v.4 (Bourne again shell).

# Функция развёртывания внешним инструментом
function cd-external {

  # Проверяем наличие обязательных переменных
  if [[ -z "${CD_EXTERNAL_EXEC}" || -z "${CD_EXTERNAL_CONF}" ]] ; then
    FORTH=false
    STATUS="422 Unprocessable Entity"
    echo "${DATE}: Некорректный запрос: не все обязательные параметры описания внешнего CI/CD-инструмента присутствуют." >> "${LOG}"
  fi

  # Проверяем наличие точки взаимодействия с внешним инструментом
  if sudo -u root test -f "${CD_EXTERNAL_EXEC}" && sudo -u root test -f "${CD_EXTERNAL_CONF}" ; then

    # Пробуем запустить на исполнение CI/CD-процедуру, сразу уводя её в фоновый режим
    sudo -u root "${CD_EXTERNAL_EXEC}" start-group "${CD_EXTERNAL_CONF}" >> "${LOG}" 2>&1 &
    if [ "${?}" -eq "0" ] ; then
      STATUS="200 Ok"
      echo "${DATE}: Запрос на CI/CD-процедуры отправлен внешнему инструменту \"${CD_EXTERNAL_EXEC}\"." >> "${LOG}"
    else
      FORTH=false
      STATUS="422 Unprocessable Entity"
      echo "${DATE}: Сбой на этапе отправки запроса CI/CD-процедур внешнему инструменту \"${CD_EXTERNAL_EXEC}\"." >> "${LOG}"
    fi
  else
    FORTH=false
    STATUS="422 Unprocessable Entity"
    echo "${DATE}: Недоступен внешний инструмент \"${CD_EXTERNAL_EXEC}\"." >> "${LOG}"
  fi

return ${?}
}

Напоминаю, что эта заметка является частью описания самодельного сервиса автоматизации доставки и развёртывания кода простейших web-приложений, изложенного в вышестоящей инструкции.


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )