Подтвердить что ты не робот

Как опубликовать на страницах Github от Travis CI?

Мы компилируем Doxygen docs на сервере travis-ci и хотим нажимать их на ветку gh-pages.

Как обрабатывать авторизацию для git push? Есть ли у кого-нибудь пример использования зашифрованных переменных в travis-ci? Должен ли я идти для авторизации https или для ключа SSH?

4b9b3361

Ответ 1

Пошаговый пример с HTTPS API Token в переменной среды

Другие упоминали об этом, но здесь идет более подробная процедура.

  1. Создайте отдельный репозиторий для сайта (необязательно). Это уменьшит вероятность того, что вы перезапишете свой основной репозиторий, и не допустит загрязнения выходных файлов.

  2. Получите токен личного доступа по адресу https://github.com/settings/tokens.

    Разрешить доступ "public_repo" только для публичных репозиториев, "repo" для приватных.

    Сохраните токен где-нибудь, так как вы можете увидеть его только один раз.

  3. В настройках Travis для хранилища https://travis-ci.org/<me>/<myrepo>/settings создайте переменную среды:

    GITHUB_API_KEY=<token>
    

    и обязательно пометьте "Отображать значение в журнале сборки" как "Выкл.".

    Это безопасно, потому что такие переменные окружения видят только авторизованные пользователи, поэтому если злонамеренный пользователь попытается сделать запрос на получение вашей строки, переменная там не будет.

    Просто убедитесь, что вы никогда не перечислили переменные окружения в вашей сборке!

  4. Добавьте следующее в ваш .travis.yml:

    after_success: |
      if [ -n "$GITHUB_API_KEY" ]; then
        cd "$TRAVIS_BUILD_DIR"
        # This generates a 'web' directory containing the website.
        make web
        cd web
        git init
        git checkout -b gh-pages
        git add .
        git -c user.name='travis' -c user.email='travis' commit -m init
        # Make sure to make the output quiet, or else the API token will leak!
        # This works because the API key can replace your password.
        git push -f -q https://<me>:[email protected]/<me>/<myrepo>-gh-pages gh-pages &>/dev/null
        cd "$TRAVIS_BUILD_DIR"
      fi
    

Альтернативный метод шифрования travis

Подробно объяснено по адресу: fooobar.com/questions/136258/...

GITHUB_API_KEY=<key> строку GITHUB_API_KEY=<key> с travis камня travis и добавьте его в свой .travis.yml:

env:
  secure: <encrypted>

Это имеет то преимущество, что не требует использования веб-интерфейса Travis, но требует использования Gem и некоторого дополнительного копирования.

Ответ 2

Я не знаю, как это было недавно, но у Travis теперь есть встроенная опция развертывания, в основном добавляемая в ваш файл travis:

deploy:
  provider: pages
  skip_cleanup: true
  local_dir: myfolder/  # or remove this line to upload from root of repo
  github_token: $GITHUB_TOKEN # Set in travis-ci.org dashboard
  on:
    branch: master

Убедитесь, что у вас нет .gitignore в загруженной папке; он загружает только не проигнорированные файлы.

Смотрите онлайн официальный документ от travis: https://docs.travis-ci.com/user/deployment/pages/

При использовании подхода "Настройки репозитория" проблем с открытым ключом не возникает, вы генерируете ключ в Github и копируете его, вставляя в секретные/невидимые поля Travis.

Проблема с историей загрузки. Обратите внимание, что при каждой загрузке удаляются все ранее загруженные данные без сохранения истории.

  • Теперь вы можете (ноябрь 2017+) вместо этого сохранить историю, добавив keep_history: true

  • Это может быть желательно, так как эти сборки моментальных снимков могут быть объемными, и в любом случае они воспроизводимы по желанию (просто отведите ветку депо от нужной ревизии). Указание на такие артефакты обычно указывает на последнюю успешную сборку снимка.

  • Однако, чтобы запустить хранилище в стабильном месте, просто отредактируйте ваш travis, чтобы добавить флаг:
    target_branch: ветвь, на которую нужно принудительно нажать, по умолчанию gh-страницы
    Например, target_branch: rc1.2

И запустите его один раз, прежде чем вернуть его в режим снимка.

Другая альтернатива, которая может быть полезна для выпусков (хотя я лично не проверял), это опубликовать в теге, см.: https://docs.travis-ci.com/user/deployment/releases/

Ответ 3

Документация travis-ci здесь рекомендует добавить это, чтобы нажать на git repo:

after_success:
   - chmod 600 .travis/deploy_key.pem # this key should have push access
   - ssh-add .travis/deploy_key.pem
   - git remote add deploy DEPLOY_REPO_URI_GOES_HERE
   - git push deploy

Однако это небезопасно, поскольку он хранит ваш незащищенный закрытый ключ в репозитории github.

Вместо этого вы можете добавить свой ключ ssh в зашифрованную переменную окружения с помощью инструмента travis:

travis encrypt DEPLOY_KEY=<private ssh key with write access> --add env.matrix

Теперь вам просто нужно добавить эту строку в начало after_success:

cat $DEPLOY_KEY > .travis/deploy_key.pem

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

Ответ 4

Просто чтобы добавить другое решение, я использовал токен HTTPS из github, зашифровал его и использовал HTTPS для проверок и нажал

Ответ 5

Я только что написал блог об этом несколько дней назад. Вот краткое изложение:

Я написал собственный сценарий развертывания для этой цели. Основная функциональность скрипта выглядит следующим образом:

#!/bin/bash

git clone --depth=1 --branch=master "https://github.com/iBug/iBug.github.io.git" deploy
cd deploy
git rm -rf .
cd ..
mv _site/* deploy
cd deploy
git add --all
git config user.name "Travis CI"
git config user.email "[email protected]"
git commit --message "Auto deploy from Travis CI"
git remote add deploy "https://[email protected]/iBug/iBug.github.io.git" &>/dev/null
git push deploy master &>/dev/null

Теперь перейдите на https://github.com/settings/tokens и создайте токен. Предоставьте ему привилегию public_repo. Перейдите в настройки репозитория на Travis CI и сохраните токен с именем переменной GH_TOKEN.

Добавьте сценарий развертывания в travis:

script: bundle exec jekyll build
after_success:
    - bash .travis/deploy.sh

Нажмите эти вещи на GitHub и Travis будет запущен.


Мой блог здесь. Он является исчерпывающим и, следовательно, излишним, если размещен в качестве ответа здесь (поскольку пользователи Qaru в основном являются опытными разработчиками). Скрипту, который я разместил в своем блоге, также не хватает функциональности: он не сохраняет историю коммитов построенного сайта, в то время как скрипт в этом ответе выше.