Jak publikować strony na Githubie od Travis CI?

Kompilujemy dokumenty Doxygen na serwerze travis-ci i chcemy je wypchnąć na naszą gałąź gh-pages.

Jak obsługiwać autoryzację dla git push? Czy ktoś ma Przykład użycia zaszyfrowanych zmiennych w travis-ci? Czy powinienem wybrać autoryzację https czy klucz SSH?

Author: Steven Vascellaro, 2014-04-24

5 answers

Przykład krok po kroku z Tokenem HTTPS API w zmiennej środowiskowej

Inni o tym wspominali, ale oto bardziej szczegółowa procedura.

  1. Utwórz osobne repozytorium dla witryny (opcjonalnie). Zmniejszy to prawdopodobieństwo nadpisania głównego repozytorium i zapobiegnie zanieczyszczeniu plików wyjściowych.

  2. Uzyskaj osobisty Token dostępu Pod https://github.com/settings/tokens

    Włącz tylko "public_repo" Dostęp dla publicznych repozytoriów, "repo" dla prywatnych.

    Zapisz gdzieś żeton, ponieważ możesz go zobaczyć tylko raz.

  3. W Ustawieniach repozytorium https://travis-ci.org/<me>/<myrepo>/settings Utwórz zmienną środowiskową:

    GITHUB_API_KEY=<token>
    

    I zaznacz "Display value in build log "jako " Off".

    Jest to bezpieczne, ponieważ tylko autoryzowane naciśnięcia przez Ciebie widzą takie zmienne środowiskowe, więc jeśli złośliwy użytkownik spróbuje wykonać pull request, aby uzyskać twój ciąg znaków, zmienna nie będzie go tam.

    Upewnij się tylko, że nigdy, przenigdy nie wymieniasz swoich zmiennych środowiskowych na swojej kompilacji!

  4. Dodaj do swojego .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
    

Alternatywna metoda szyfrowania

Wyjaśnione szczegółowo na stronie: https://stackoverflow.com/a/33109519/895245

Zaszyfruj łańcuch GITHUB_API_KEY=<key> za pomocą klejnotu travis i dodaj go do swojego .travis.yml:

env:
  secure: <encrypted>

Ma tę zaletę, że nie wymaga użycia Interfejs Travis web, ale wymaga użycia klejnotu i trochę więcej wklejania kopii.

 33
Author: Ciro Santilli 新疆改造中心 六四事件 法轮功,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-25 20:50:36

Nie wiem, jak niedawno, ale Travis ma teraz wbudowaną opcję wdrażania, w zasadzie Dodaj do pliku 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

Upewnij się, że nie masz.gitignore w przesłanym folderze; przesyła tylko pliki nie ignorowane.

Zobacz oficjalny dokument online od Travisa : https://docs.travis-ci.com/user/deployment/pages/

Nie ma problemu z kluczem publicznym używając metody "repozytorium Settings", generujesz klucz w Githubie, a następnie kopiujesz wklejasz go do secret / non widoczne pola Travisa.

Problem z historią wysyłania: Zauważ, że każde przesłanie miażdży wszystkie wcześniej przesłane dane, bez zachowania historii.

  • Możesz teraz (Listopad 2017+) zamiast tego zachować historię, dodając keep-history: true linię

  • Może to być pożądane, ponieważ te Kompilacje migawek mogą być obszerne i są odtwarzalne do woli (po prostu oddziel swój depot od wersji, którą chcesz). Wskazywanie na takie artefakty zazwyczaj wskazuje na ostatnia udana Budowa migawki.

  • Jednak aby uruchomić storage w stabilnym miejscu, po prostu Edytuj swój travis, aby dodać flagę :
    target_branch: gałąź do pchnięcia siły, domyślnie gh-pages
    E. g target_branch: rc1.2

I uruchomić go raz przed ustawieniem go z powrotem do trybu migawki.

Inną alternatywą, która może być dobra dla wydań (nie testowałem osobiście), jest opublikowanie do tagu see : https://docs.travis-ci.com/user/deployment/releases/

 16
Author: Yann TM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-05 17:23:41

Dokumentacja travis-ci tutaj zaleca dodanie tego do push do repo git:

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

Jednakże, jest to niebezpieczne , ponieważ przechowujesz swój niezabezpieczony klucz prywatny w repozytorium github.

Zamiast tego możesz dodać swój klucz ssh jako zaszyfrowaną zmienną środowiskową za pomocą narzędzia travis:

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

Teraz wystarczy dodać tę linię na początku after_success:

cat $DEPLOY_KEY > .travis/deploy_key.pem

Należy pamiętać, że after_success będzie przełączać się w każdym zbuduj w macierzy build, więc jeśli masz wiele zadań na kompilację, Twój kod zostanie wypchnięty wiele razy, co nic nie da, ale dobrze jest wiedzieć, że to się dzieje.

 12
Author: joshua-anderson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-16 19:09:06

Aby dodać kolejne rozwiązanie, użyłem tokena HTTPS z github, zaszyfrowałem go i użyłem HTTPS do kasowania i wypychania

 10
Author: Stasik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-27 10:01:16

Kilka dni temu napisałem o tym bloga. Oto krótki opis:

Napisałem własny skrypt deploy w tym celu. Podstawowa funkcjonalność skryptu wygląda tak:

#!/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

Teraz przejdź do https://github.com/settings/tokens i wygenerować token. Przyznaj mu public_repo przywilej. Przejdź do ustawień repozytorium na Travis CI i zapisz token o nazwie zmiennej GH_TOKEN.

Dodaj skrypt deploy do:

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

Push these things to GitHub i Travis zostaną aktywowani.


Mój blog jest tutaj . Jest to wyczerpujące, a zatem zbędne, jeśli opublikowane jako odpowiedź tutaj (ponieważ użytkownicy Stack Overflow są w większości doświadczonymi programistami). Skrypt, który zamieściłem na moim blogu, również nie posiada funkcjonalności: nie zachowuje historii zmian zbudowanej strony, podczas gdy skrypt w powyższej odpowiedzi tak.

 0
Author: iBug,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-18 02:06:20