Déploiement d'un blog jekyll avec jenkins

Parent Feed: 
Original Post: 

Chez af83, nous avons pour habitude d'utiliser jenkins pour l'intégration continue. Aussi, nous avons décidé de l'utiliser aussi pour ce blog. À chaque commit sur la branche master, on lance un build qui consiste à vérifier que toutes les pages sont conformes aux standards du w3c, puis à mettre en ligne les fichiers générés.

Pour cela sur jenkins on lance une premiere étape de validation avec rake:validate qui build le blog et regarde si toutes les pages sont valides par le w3c grace à la gem validate-website :

require 'yaml'
@config = YAML.load_file(File.join(File.dirname(__FILE__), '_config.yml'))

desc 'validate _site with validate website'
task :validate => :build do
  Dir.chdir('_site') do
    system("validate-website-static --site '#{@config['url']}/' --quiet")
    exit($?.exitstatus)
  end
end

desc 'build static _site'
task :build do
  system('bundle exec jekyll')
end

Avec l'exit, on stop le déploiement du blog s'il y a eu une erreur de validation. Le build échoue, nous sommes notifiés et nous pouvons corriger le problème.

Dans le cas où tout est valide, on déploie avec un rsync rake rsync:live :

namespace :rsync do
  @rsync_options = "-avz --progress --human-readable --delete #{@config['destination']}/ #{@config['deploy']['user']}@#{@config['deploy']['host']}:#{@config['deploy']['destination']}"

  desc "--dry-run rsync"
  task :dryrun => :build do
    system("rsync --dry-run #{@rsync_options}")
  end

  desc "rsync"
  task :live => :build do
    system("rsync #{@rsync_options}")
  end
end

Voilà, vous savez maintenant comment ce billet a été mis en ligne !