Powrót do bloga
2020.04.05

Deploy buildów TravisCI przez SSH

Nie udało mi się znaleźć tych informacji w jednym miejscu, więc postanowiłem zebrać wszystko, czego potrzebujesz, i zrobić z tego wpis.

Musimy zaszyfrować klucz prywatny i powiązać go z twoim repozytorium w TravisCI oraz zarejestrować klucz publiczny na zdalnym VPS-ie. Gdy zostanie tam zapisany, build bot będzie mógł bezpiecznie z niego korzystać, kiedy zajdzie taka potrzeba.

Wymagania (maszyna lokalna)

  • ruby-dev: apt-get install ruby-dev
  • travis: gem install travis

Generowanie klucza SSH i wysyłanie go do Travis CI

  1. Przejdź do katalogu swojego repozytorium i sudo travis login --com (com, jeśli twoje repo jest prywatne i korzystasz z travis.com, a nie travis.org, w przeciwnym razie użyj org)
Jeśli masz włączone 2FA na koncie GitHub, musisz wygenerować token i podać go w ten sposób: sudo travis login --com --github-token <YOUR TOKEN HERE>
  1. Wygeneruj klucz SSH: ssh-keygen -t rsa -b 4096 -C 'build@travis-ci.org' -f ./deploy_rsa (utwórz klucz bez hasła)
  2. Zaszyfruj klucz prywatny i dodaj go do travis: sudo travis encrypt-file deploy_rsa -add
  3. Skopiuj klucz publiczny na serwer docelowy i dodaj go do authorized keys: ssh-copy-id -i deploy_rsa.pub username@hostip
  4. Usuń deploy_rsa ze swojego repozytorium! Każdy, kto ma ten klucz, może uzyskać dostęp do twojego serwera bez hasła!
  5. Dodaj poniższe linie do swojego pliku .travis.yml:
   before_deploy:
   - openssl aes-256-cbc -K $encrypted_?_key -iv $encrypted_?_iv -in deploy_rsa.enc -out /tmp/deploy_rsa -d
   - eval "$(ssh-agent -s)"
   - chmod 600 /tmp/deploy_rsa
   - ssh-add /tmp/deploy_rsa

   deploy:
   - provider: script
     skip_cleanup: true
     script: scp -r ./directory_to_copy username@hostip:/dest/dir

   addons:
     ssh_known_hosts:
       - hostip

Wartość ? w zaszyfrowanych kluczach znajdziesz w Settings->Environment Variables swojego repozytorium w Travisie

  1. Od teraz wszystkie udane buildy będą deployowane