Это пятая часть материала. Первая часть. Вторая часть. Третья часть. Четвёртая часть.
В этой части мы настроим
и
нашего бэкенда. Мы сделаем так, чтобы все сделанные нами изменения в проекте, автоматически обновляли приложение на сервере, при этом избегая ошибок.
Как?
Для этой цели мы воспользуемся сторонним сервисом: Codeship
Код нашего приложения хранится на GitHub и Codeship настроен так, что каждое изменение репозитория на GitHub, автоматически вызывает преднастроенные процессы в Codeship.
Это процесс состоит из следующих шагов:
- Получение кода и завимостей
- Сборка бинарника
- Копирование бинарника на сервер
- Перезапуск приложения на сервере
Получение кода
Эта часть самая простая — Codeship сделает это за нас. Нам нужно только настроить проект в Codeship и привязать его к GitHub. При привязке аккаунта GitHub к Codeship будет создан веб-хук для оповещения Codeship об изменениях в репозитории.
Затем нужно настроить скрипты, запускаемые при срабатывании хука.
Вот сценарий, который работает у меня:
GO_VERSION=${GO_VERSION:="1.8.0"}
# strip all components from PATH which point toa GO installation and configure the
# download location
CLEANED_PATH=$(echo $PATH | sed -r 's|/(usr/local\|tmp)/go(/([0-9]\.)+[0-9])?/bin:||g')
CACHED_DOWNLOAD="${HOME}/cache/go${GO_VERSION}.linux-amd64.tar.gz"
# configure the new GOROOT and PATH
export GOROOT="/tmp/go/${GO_VERSION}"
export PATH="${GOROOT}/bin:${CLEANED_PATH}"
# no set -e because this file is sourced and with the option set a failing command
# would cause an infrastructur error message on Codeship.
mkdir -p "${GOROOT}"
wget --continue --output-document "${CACHED_DOWNLOAD}" "https://storage.googleapis.com/golang/go${GO_VERSION}.linux-amd64.tar.gz"
tar -xaf "${CACHED_DOWNLOAD}" --strip-components=1 --directory "${GOROOT}"
# check the correct version is used
go version | grep ${GO_VERSION}
go get -t -v ./...
Команда для запуска тестов:
go test -v ./...
Затем добавим скрипт для развёртывания. Но вначале настроим, чтобы применялись коммиты/пуши только из ветки «production».
Выберем вариант «custom script» и вставим такой текст:
go build
scp -P 2222 currencyconverter root@$SERVER:/root/tmp_currencyconverter
ssh -p 2222 root@$SERVER<
EOF
Этот скрипт соберёт приложение из исходников и скопирует готовый бинарник на наш сервер. Затем подсоединится по ssh к серверу, остановит службу, заменит новыми файлами и запустит процесс заново.
Для этого нужно будет добавить открытый ключ SSH (из Project settings > General) в папку ~/.ssh/authorized_keys пользователя root. Это даст возможность Codeship соединяться с сервером без указания паролей.
Обратите внимание на переменную $SERVER — так можно указывать переменные проекта, которые потом легко будет заменить.
Готово. Мы настроили CI/CD и теперь при каждом обновлении ветки “production” Codeship получит измененный код, протестирует его, скопирует на сервер и запустит приложение. И всё это автоматически!
В следующей части мы настроим мониторинг, чтобы получать актуальную информацию о том, что приложение работает, отвечает на запросы и т.д.
Разработчик: java, kotlin, c#, javascript, dart, 1C, python, php.
Пишите: @ighar. Buy me a coffee, please :).