Как сделать автоматическое развертывание с помощью хуков Github

GitHub
Как сделать автоматическое развертывание с помощью хуков Github

Недавно случайно приобрел доменное имя и сервер, не использовать его действительно жалко, кроме того, у меня никогда не было своего личного сайта, поэтому я планирую использовать hexo для игры на сервере, чтобы не не нужно беспокоиться об использовании страниц Github или страниц Gitee. Конечно, сегодняшняя тема не о создании блога, а о том, как использовать хуки Github для развертывания кода блога на сервере.

Ведь у гитхабовских хуков долгая история, а в интернете много опенсорсных проектов, которые можно использовать, поэтому я не стал строить колесо, а пошел на 5К звездный опенсорсный проект Gowebhook, функция этого инструмента состоит в том, чтобы получить уведомление об изменении репозитория Github, а затем вызвать настроенный вами сценарий оболочки.Сценарий может писать команды извлечения кода или операции компиляции и т. д., в зависимости от индивидуальных потребностей. Короче говоря, он просто подтягивает Github к вашему серверу.

file

установка инструмента вебхука

Поскольку веб-перехватчик разработан на языке Go, сначала необходимо установить язык Go.

yum install -y golang

Затем вы можете установить вебхук с помощью команды go.

go get github.com/adnanh/webhook

Доступ к месту установки команды можно получить черезgo envПроверьте, GOPATH — это путь установки команды, например, моя команда установлена ​​в /root/go/bin/webhook.

go env
...
GOOS="linux"
GOPATH="/root/go"
...

сгенерировать ssh-ключ

Перед написанием скрипта убедитесь, что у сервера есть разрешение на получение кода github.Если вы уже настроили его, вы можете пропустить этот раздел, чтобы увидетьСкрипты развертывания. Ключ ssh – это идентификатор платформы, на которой размещается код (github, gitee, coding, gitlab и т. д.), чтобы определить, имеете ли вы право извлекать код. Для его создания требуется всего одна строка команды и возврат каретки.

ssh-keygen

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:M6sCf/J/hOu3zLxMkFUVmv3iWIa30CfbxiWqmWCt1YE root@iZwz96y36tk2ecnykzituxZ
The key's randomart image is:
+---[RSA 2048]----+
|            ..o. |
|           . o   |
|          . o    |
|       . o .     |
|      E S.  .    |
|  .  . ..Oo ..   |
|   oo o ==Boo .  |
|   .++.+o#== .   |
|    .=*+=+@o     |
+----[SHA256]-----+

может быть сгенерированоcat ~/.ssh/id_rsa.pubПроверьте команду, и, наконец, добавьте ключ на github.Добавление не будет повторяться, пожалуйста, погуглите сами.

cat ~/.ssh/id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQHBAAABAQCv7LGVJUFdcLL+HZyRFTQIQCdre61Gch76lDVpmWSX9BGGRU3iQS7EU5qApFn1VSvt+yf4rMt2LEkuxGCm1wIyBKZ6LYDViZBeTAfx4BcM1mcpxOX6I/+r07mQ4llTz+poQB1Zp9Y60uk0tbGOVWlCoDBEvf9qeEnQ0qEczEkv7wcawV6pVhlXjFKZgq0EOQbCYoWMvPUl+dwDbTcl/h+7At1nlgfF7IuRHlKf18qvgnTRT2wpiuz4pWdoAi8LcY1JiR1z5OB0oCJ2euhyDND39G2NxZRS1FIVdgCEvioHtdoHOSoWBlcSj0fLFSnscBfRBrCd7yhOP7fFKfrowHMj root@iZwz96y36tk2ecnykzituxZ

Скрипты развертывания

Основная цель этого шелл-скрипта – извлечь код из github.Содержимое скрипта очень простое.В нем делается только краткая оценка каталога.Если каталог с кодом существует, он будет обновлен.Если он не существует , склад будет клонирован. Пожалуйста, замените рабочий каталог и название и адрес склада на свои. .

#!/bin/bash

cd /home/www/website

if [ ! -d "go-home" ]; then
  git clone https://github.com/pingyeaa/go-home.git
fi

cd go-home
git pull

настройка и запуск вебхука

Напишите файл конфигурации hooks.json в следующем формате.

[
  {
    "id": "deploy-webhook",
    "execute-command": "deploy.sh",
    "command-working-directory": "/home"
  }
]
  • id: идентификатор хука, настраиваемый
  • execute-command: имя сценария, который должен быть выполнен, — это только что написанный сценарий развертывания.
  • command-working-directory: каталог, в котором находится скрипт

После завершения запускаем его через команду webhook.Вы видите, что конфигурация с id deploy-webhook загружена.На что нам нужно обратить внимание, так это на прослушивающий порт и путь, который будет использоваться позже.

/root/go/bin/webhook -hooks hooks.json -verbose

[webhook] 2020/04/22 15:18:22 version 2.6.11 starting
[webhook] 2020/04/22 15:18:22 setting up os signal watcher
[webhook] 2020/04/22 15:18:22 attempting to load hooks from hooks.json
[webhook] 2020/04/22 15:18:22 found 1 hook(s) in file
[webhook] 2020/04/22 15:18:22   loaded: deploy-webhook
[webhook] 2020/04/22 15:18:22 serving hooks on http://0.0.0.0:9000/hooks/{id}
[webhook] 2020/04/22 15:18:22 os signal watcher ready
http://0.0.0.0:9000/hooks/{id}

Конфигурация веб-хуков Github

Теперь, когда сервер запустил программу веб-перехватчика для прослушивания порта 9000, вам нужно только сообщить Github этот адрес и порт.

Откройте страницу настроек репозитория и добавьте веб-хук.

Настройте веб-перехватчики, Payload URL — это адрес для уведомления, просто заполните только что напечатанный порт и путь, остальные — по умолчанию.

file

Теперь вы можете отправить код на тестирование, в случае неудачи пуша будет сообщение об ошибке в Github.Также успех можно не только увидеть в Github, но и зафиксировать в журнале печати сервера.

file

file


Меня зовут Пинг Йе, это проект с открытым исходным кодом, ориентированный на развитие технологии Gopher."иди домой"


Спасибо за просмотр.Если вы считаете, что статья была вам полезна, обратите внимание на паблик-аккаунт "Pingye", посвященный языку Go и техническим принципам.

关注我