Переезд на Travis-CI

Post Tag: techit

Когда я только переехал на 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 успешно состоялся. Заодно и процесс деплоя упростился после отказа от сторонних скриптов.

comments powered by Disqus