af83

Déploiement d'un blog jekyll avec jenkins

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 !

blog comments powered by Disqus