Переезд на Travis-CI
May 4, 2017 · 3 minute read · CommentsКогда я только переехал на Hugo, встал вопрос об автоматизации обновления сайта. Не стал ничего выдумывать и просто следовал рекомендациям на офицальном сайте gohugo.io и настроил Wercker. Все отлично работало.
Но однажды сборка сломалась - оказалось в образе debian перестал работать wget. Пришлось немного поправить настройки. В итоге получилось следующее (определенно избыточно):
box: debian
build:
steps:
- script:
name: install git
code: |
apt-get update && apt-get install git -y
- script:
name: initialize git submodules
code: |
git submodule update --init --recursive
- arjen/hugo-build@1.16.1
deploy:
steps:
- script:
name: install git
code: |
apt-get update && apt-get install git -y
- lukevivier/gh-pages@0.2.1:
token: $GIT_TOKEN
repo: Bege13mot/Bege13mot.github.io
basedir: public
Время шло, Wercker исправно работал. Но тут его купил Oracle, о чем красноречиво напоминала красная плашка на всех страницах. Может быть, ничего страшного и не случится, но на всякий случай надо подготовить запасной вариант.
Блог хостится на Github, и первая CI, что приходит на ум, конечно Travis. Благо и инструкций для этого есть немало. Я использовал вот эту.
Единственное что, немного доработал deploy.sh, чтобы деплоить только если есть изменения. Иначе даже при добавлении черновика блог будет пересобираться. За основу взял статью. Итоговый результат:
# !/bin/bash
set -e # Exit with nonzero exit code if anything fails
SOURCE_BRANCH="master"
# Pull requests and commits to other branches shouldn't try to deploy, just build to verify
if [ "$TRAVIS_PULL_REQUEST" != "false" -o "$TRAVIS_BRANCH" != "$SOURCE_BRANCH" ]; then
echo "Skipping deploy; just doing a build."
exit 0
fi
# Save some useful information
REPO="bege13mot.github.io"
GH_REPO="github.com/bege13mot/$REPO.git"
#SHA=`git rev-parse --verify HEAD`
EMAIL="bege13mot@gmail.com"
# Build the project.
hugo # if using a theme, replace by 'hugo -t <yourtheme>'
# Clone the existing gh-pages for this repo into out/
git clone --depth=1 "https://$GH_REPO" out
# Clean out existing contents
rm -rf out/**/* || exit 0
# copy files to commit
cp -R public/* out
# Now let's go have some fun with the cloned repo
cd out
git remote
git config user.name "Travis CI"
git config user.email "$EMAIL"
# If there are no changes to the compiled out (e.g. this is a README update) then just bail.
git status
if git diff-index --quiet HEAD --; then
echo "No changes to the output on this push; exiting."
exit 0
fi
# Commit the "changes", i.e. the new version.
# The delta will show diffs between new and old versions.
git add -A .
git commit -m "Deploy to GitHub Pages"
# Now that we're all set up, we can push.
git push "https://$GH_TOKEN@$GH_REPO" $SOURCE_BRANCH
Переезд на более “стабильный” (как минимум более известный и проверенный) CI успешно состоялся. Заодно и процесс деплоя упростился после отказа от сторонних скриптов.