Моим последним приключением был перенос моего грязного сайта Jekyll на Gatsby. Раньше я развертывал свой сайт Jekyll вручную, создавая его локально и отправляя сгенерированный статический контент в ветку gh-pages
на GitHub. Создав свой новый сайт, я решил, что пора оставить старые методы позади и настроить автоматизированный конвейер для развертывания моего сайта на страницах GitHub.
Почему именно GitHub Pages?
Я всегда использовал GitHub Pages для размещения своего блога, потому что он легкий и легко интегрируется с GitHub. Это просто, бесплатно и предоставляет бесплатные возможности, такие как принудительное использование HTTPS по умолчанию, а также поддерживает добавление собственного домена.
Развертывание сайта Gatsby локально
Прежде чем автоматизировать развертывание моего нового сайта Gatsby, я научился развертывать его локально. Для этого я добавил запись в тег scripts
в package.json
, которая создает готовую к производству сборку для моего сайта Gatsby.
"scripts": { ... "build": "gatsby build" }
npm run build
создает сайт и помещает сгенерированные ресурсы в папку с именем public
. Копирование этой public
папки на любой HTTP-сервер приведет к развертыванию моего сайта на этом сервере.
Я запустил HTTP-сервер, используя http-сервер для обслуживания ресурсов в папке public
, которая эффективно развернула мой сайт локально.
➜ cd public ➜ http-server Starting up http-server, serving ./ Available on: http://127.0.0.1:8082 http://10.10.10.10:8082 http://192.168.13.12:8082
Развертывание сайта Gatsby вручную на страницах Github
Настройка страниц Github
У меня уже были настроены страницы GitHub, так как я использовал их для своего сайта Jekyll, но для полноты я опишу шаги здесь.
Я перешел на страницу настроек своего репозитория GitHub и прокрутил страницу до раздела GitHub Pages
.
Я не хотел, чтобы файлы, созданные в процессе сборки Gatsby, загромождали мою ветку master
, поэтому я выбрал ветку gh-pages
в качестве исходной ветки для моего сайта GitHub Pages. Любой статический сайт, который я помещаю в эту ветку, будет опубликован на deborah-digges.github.io
. Еще мне понравилось, что по умолчанию Enforce HTTPS
включен. Вся безопасность!
Развертывание вручную
Я развернул сайт вручную на страницах GitHub, создав сайт локально и отправив только папку public
в ветку gh-pages
на GitHub.
Для этого потребовалась довольно неудобная последовательность команд.
Это непросто, и легко случайно взорвать весь компьютер с помощью таких команд, как rm -r *
. Хорошо, что пакет gh-pages существует, чтобы спасти нас от самих себя.
Я добавил в свой проект зависимость, чтобы дать ему шанс.
yarn add gh-pages
Чтобы gh-pages
узнать, где находится мой репозиторий, я добавил свойство homepage
в package.json
.
{ ... "homepage": "deborah-digges.github.io" ... }
Я добавил еще один сценарий deploy
в свой package.json
, который выполняет build
, а затем помещает папку public
в ветвь gh-pages
моего репозитория на Github.
"scripts": { "build": "gatsby build", "deploy": "npm run build && gh-pages -d public" }
И вуаля! Мне удалось развернуть свой сайт вручную со своего компьютера с помощью сценария npm run deploy
. Мой сайт тогда был запущен и работал по адресу deborah-digges.github.io
✨Непрерывно✨ Развертывание сайта Gatsby с Travis CI
Большой! Я развернул свой сайт Gatsby! Однако я бы не хотел развертывать сайт вручную с портативного компьютера в пятницу днем.
Я решил постоянно развертывать свой сайт, чтобы каждый новый коммит автоматически развертывался на моем сайте GitHub Pages. Это было захватывающе, но я пропустил важный шаг - автоматизированные тесты для моего сайта, чтобы убедиться, что плохая фиксация не разрушила весь мой блог. Однако я решил жить опасно и продолжить тестирование своего сайта Gatsby для будущей публикации в блоге.
Подписываясь
Я зарегистрировался на веб-сайте Travis CI, используя свою учетную запись GitHub, и согласился поделиться своими данными GitHub с Трэвисом.
Включение репозитория
Затем я перешел на страницу репозиториев и включил сборки для репозитория deborah-digges.github.io
.
Добавление файла travis.yml
Я добавил travis.yml
файл в корень своего репозитория, чтобы сообщить Трэвису, что делать при каждой фиксации master
.
script
запускает yarn run deploy
шаг, который я ранее использовал для локального развертывания моего сайта. Он делает некоторые дополнительные шаги, чтобы дать Travis CI право доступа для отправки в мой репозиторий GitHub.
Он сообщает git
клиенту, установленному на Travis CI, кто я.
git config --global user.name $GH_USERNAME git config --global user.email $GH_EMAIL
Чтобы предоставить скрипту push-доступ к моему репозиторию GitHub, я встроил свою переменную среды Github Token в удаленный URL-адрес.
git remote set-url origin "https://${GH_USERNAME}:${GH_TOKEN}@github.com/deborah-digges/
Откуда взялись эти переменные среды?
Настройка переменных среды Travis
Я перешел к настройкам своего репозитория и сделал следующие переменные среды доступными для моего скрипта.
Мне потребовалось несколько попыток, чтобы понять это правильно, но я с гордостью могу сказать, что мой сайт теперь постоянно развертывается на страницах GitHub при каждой фиксации в ветке master
моего репозитория.
Это была большая работа, и в моем стремлении найти более простое решение я изучу использование GitHub Action для непрерывного развертывания моего сайта. Следите за обновлениями для более опасной жизни!
Первоначально опубликовано на https://deborah-digges.github.io.