Настройка авто деплоя при пуле в репозиторий Bitbucket и последующая авто выгрузка изменений на сервер (сайт).
Простое развертывание проекта с помощью Bitbucket pipelines.
При пул-реквесте в ветку master обновлять код на сервере.
1. Генерируем SSH ключ
На сервере выполняем следующее:
cd ~/ssh-keygen
# Enter file in which to save the key (~/.ssh/id_rsa): [Press enter]
# Enter passphrase (empty for no passphrase):
# Enter same passphrase again:
cd .ssh
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys
ssh-keygen - Генерирует ssh ключ (при его создании не вводим пароль) приватный id_rsa (без пароля - empty for noe passphrase - просто жмем Enter) и публичный id_rsa.pub
2. Добавляем созданный ssh ключ в Bitbucket
На сервере выполняем следующее:
base64 < id_rsa
Эта команда выведет содержимое приватного ключа, его Вы копируете и вставляется в настройки Pipelines . Они находятся в настройках репозитория, на скриншоте должно быть видно.
Обзываете переменную name = DEPLOY_SSH_KEY, в value = <содержимое скопированного приватного ключа> и ставим галочку Secured
Эту переменную мы будем использовать дальше
3. Добавляем known_hosts
На сервере выполняем следующее:
ssh-keyscan -t rsa server.example.com > deploy_known_hostscat deploy_known_hosts
server.example.com - Ваш сервер (может быть IP адрес)
Эта команда добавить ваш урл или IP в файл deploy_know_hosts и выведет в консоль его содержимое. Копируем содержимое файла в локальный проект, предварительно создав в корне проекта файл deploy_known_hosts.
4. Добавляем файл bitbucket-pipelines.yml
В BitBucket также необходимо включить опцию Enable Pipelines
В разделе настроек Deployments мы добавляем свою ветку в один из раздел environments, либо используем уже существующие.
Теперь, в локальном проекте, рядом с файлом deploy_known_hosts создаем файл bitbucket-pipelines.yml - в нем будут прописываться задания, которые будет выполнятся после пулла в репозиторий
Пример файла:
image: atlassian/default-image:latest
pipelines:
branches:
master:
- step:
name: Deploy master branch
deployment: Master
script:
- mkdir -p ~/.ssh
- cat deploy_known_hosts >> ~/.ssh/known_hosts
- (umask 077 ; echo $DEPLOY_SSH_KEY | base64 -di > ~/.ssh/id_rsa)
- ssh -i ~/.ssh/id_rsa user@server.example.com 'cd /path/you/project && git pull origin master'
- echo "MASTER SUCCESS!"
Где:
- deployment: Master - из настроек Deployments
- $DEPLOY_SSH_KEY наша переменная из Bitbucket pipelines Repository variables
- user@server.example.com - пользователь от которого мы создали ключ ssh на сервере и сам сервер (IP или url)
- /path/you/project - путь к каталогу на сервере в котором развернут git проект
- git pull origin master - команда выполняемая автоматически, у Вас может быть любой другой
В текущем примере git репозиторий уже должен быть инициализирован и привязан к вашему репозиторию на BitBucket - иначе будет ошибка
5. Настраиваем config на сервере
Я бы сразу настроил файл ~/.ssh/config - т.к. без него у меня возникали проблемы при подключении
На сервере содержимое файла ~/.ssh/config должно быть примерно такое:
Host bitbucket.orgIdentityFile ~/.ssh/id_rsa
Port 22
User user@server.example.com
У меня была проблема с портом и с пользователем, поэтому я прописал 22й порт, до этого почему то пыталось подключится на 777й порт, а также прописал пользователя, от которого у меня был создан ssh ключ
6. Доп. настройки в репозитории на BitBucket
Также я указал ssh ключ (приватный и публичный) в другом разделе настроек, он нам понадобится ниже, а также добавил Known hosts всех возможных вариантов своего сервер (возможно это лишнее).
7. Настройка репозитория на выполнение команд по ssh без ввода пароля каждый раз
Добавляем ключи ssh в ssh-агент, выполняем команду на сервере:
ssh-agent -s
Должен быть однострочный вывод с примерно таким содержанием, кроме цифр, цифры у Вас буду Ваши:
Agent pid 434321
Если по каким то причинам такого содержимого не выведется, тогда в консоль пишем:
eval $(ssh-agent -s)
После того, как надпись появилась с номером агента, выполняем следующее:
ssh-add ~/.ssh/id_rsa
Эта команда добавляет приватный ключ в агент, публичный ключ (~/.ssh/id_rsa.pub) мы добавляем в Bitbucket на 6м шаге - выше на скриншоте показано.
Теперь активируем ключи, для bitbucket это выглядит так:
ssh -t git@bitbucket.org
# у меня так не сработало, поэтому я сделал вот так, с указанием порта и без указания нового окна терминала
ssh git@bitbucket.org -p22
В ответ будет сообщение продолжат или нет, соглашаемся и пишем yes в консоль
Следующий шаг - это найти на сервере файл ~/.bashrc который обычно находится в корне, этот файл будет содержать настройки для запуска агента и активации наших ключей, дописываем такое содержимое в конец этого файла:
# Note: ~/.ssh/environment should not be used, as it# already has a different purpose in SSH.
env=~/.ssh/agent.env
# Note: Don't bother checking SSH_AGENT_PID. It's not used
# by SSH itself, and it might even be incorrect
# (for example, when using agent-forwarding over SSH).
agent_is_running() {
if [ "$SSH_AUTH_SOCK" ]; then
# ssh-add returns:
# 0 = agent running, has keys
# 1 = agent running, no keys
# 2 = agent not running
ssh-add -l >/dev/null 2>&1 || [ $? -eq 1 ]
else
false
fi
}
agent_has_keys() {
ssh-add -l >/dev/null 2>&1
}
agent_load_env() {
. "$env" >/dev/null
}
agent_start() {
(umask 077; ssh-agent >"$env")
. "$env" >/dev/null
}
if ! agent_is_running; then
agent_load_env
fi
# if your keys are not stored in ~/.ssh/id_rsa or ~/.ssh/id_dsa, you'll need
# to paste the proper path after ssh-add
if ! agent_is_running; then
agent_start
ssh-add
elif ! agent_has_keys; then
ssh-add
fi
unset env
Теперь осталось проверить подключение к репозиторию, на сервере из каталога с репозиторием в консоли выполняем:
git remote -v
Эта команда покажет каким способом вы подключены к удаленному репозиторию на BitBucket - обычно это http/https и в ответ вам придет что то вроде:
origin https://<your_username>@bitbucket.org/<workspace_ID>/<repo_name>.git (fetch)origin https://<your_username>@bitbucket.org/<workspace_ID>/<repo_name>.git (push)
Если это так, то меняем подключение на ssh вариант, один из:
git@bitbucket.org:<workspace_ID>/<repo_name>.git
or
ssh://git@bitbucket.org/<workspace_ID>/<repo_name>.git
делается это так, в консоли пишем:
git remote set-url origin git@bitbucket.org:<workspace_ID>/<repo_name>.git# или пишем так, будет одинаково верно
git remote set-url origin ssh://git@bitbucket.org/<workspace_ID>/<repo_name>.git
После этих всех действий, у Вас должно все работать, а именно - когда вы запушите коммит в репозиторий, то он автоматически зальется на сервер. Эта инструкция является лишь одним из простых вариантов настройки авто деплоя на сервер через ssh с Bitbucket'а, буду рад если она Вам помогла как и мне понять и разобраться немного в этом.