Terug naar blog
2020.04.05

TravisCI-builds deployen via SSH

Ik kon de informatie hierover nergens op één plek vinden, dus besloot ik alles wat je nodig hebt te verzamelen en er een post van te maken.

We moeten de private key versleutelen en aan je repo in TravisCI koppelen, en de public key op je remote VPS registreren. Zodra die daar is opgeslagen, kan de build bot er veilig bij wanneer dat nodig is.

Vereisten (lokale machine)

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

SSH-key genereren en naar Travis CI pushen

  1. Ga naar de directory van je repository en sudo travis login --com (com als je repo privé is en je travis.com gebruikt in plaats van travis.org, gebruik anders org)
Als je 2FA op je GitHub-account hebt ingeschakeld, moet je een token genereren en het zo meegeven: sudo travis login --com --github-token <YOUR TOKEN HERE>
  1. Genereer een SSH-key: ssh-keygen -t rsa -b 4096 -C 'build@travis-ci.org' -f ./deploy_rsa (maak de key aan zonder wachtwoord)
  2. Versleutel de private key en voeg hem toe aan travis: sudo travis encrypt-file deploy_rsa -add
  3. Kopieer de public key naar de doelserver en voeg hem toe aan de authorized keys: ssh-copy-id -i deploy_rsa.pub username@hostip
  4. Verwijder deploy_rsa uit je repository! Iedereen met deze key kan zonder wachtwoord toegang tot je server krijgen!
  5. Voeg de volgende regels toe aan je .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

Voor de ? in de encrypted keys kijk je bij Settings->Environment Variables van je repository in Travis

  1. Vanaf nu worden alle geslaagde builds gedeployd