Gulp, Travis CI och gh-pages
I kursen använder vi Travis CI för att köra våra test och vi använder gh-pages på Github för våra applikationer. Jag ville därför att Travis CI skulle publisera på gh-pages automatisk om testen lyckas och är gröna.
Gulp
Eftersom vi använder gulp, använder jag gulp-gh-pages för att pusha den genererade koden till gh-pages:
npm install gulp-gh-pages --save-dev
var deploy = require('gulp-gh-pages');
gulp.task('deploy', ['deploy:dist', 'deploy:docs'], function () {
return gulp.src('.tmp/**/*.*')
.pipe(deploy());
});
deploy:dist
och deploy:docs
genererar kod och dokumentation och lägger det
i mappen .tmp/
.
Travis CI
För att Travis ska ha tillåtelse att pusha till Github, måste namn, epost och token sparas för att senare användas för att sätta upp git hos Travis. För att inte behöva spara detta publikt i .travis.yml, har Travis skapat ett Ruby-gem som krypterar datan.
gem install travis
travis encrypt 'GIT_NAME="Ditt namn" GIT_EMAIL=foo@bar.com GH_TOKEN=token' --add
Du skapar din token på Github.com → settings → applications.
Med --add
läggs den enctryptade strängen automatiskt till i .travis.yaml. Travis
använder den för att skapa environment variabler, som du kan använda för att sätta
upp git.
env:
global:
secure: hemligt
before_script:
- git config --global user.email "$GIT_EMAIL"
- git config --global user.name "$GIT_NAME"
after_success:
- gulp deploy
Du måste även ändra i gulpfile.js
så att gulp deploy
vet vilken remote den
ska pusha till.
return gulp.src('.tmp/**/*.*')
.pipe(deploy({
remoteUrl: 'https://' + process.env.GH_TOKEN + '@github.com/anvnamn/repo.git'
}));
Länkar
Det tog ett tag att få det att fungera, och dessa texter var till stor hjälp, även om de har valt att lösa det lite anorlunda jämfört med hur jag har löst det.